ปัญหา
สร้างเครื่องบน VMWare ESXi รุ่นล่าสุดก็แล้ว ลงเป็น Windows Server 2016 DataCenter ก็แล้ว ตาม Spec ของ Tensorflow (Version ล่าสุด 1.12) บอกว่า ใช้ Python 3.6 ก็ลงแล้ว (ยังใช้กับตัวล่าสุด 3.7 ไม่ได้)
ติดตั้ง Tensorflow ก็ลงตามปรกติ
pip install tensorflow
ก็สำเร็จเรียบร้อยดี แต่พอลอง import
import tensorflow
ปรากฏว่าเกิด Error
“Failed to load the native TensorFlow runtime.”
ทั้ง ๆ ที่ลงบน Physical Server ที่ไม่ใช่ VMWare ก็ใช้งานได้ปรกติ ทำไม ???
ตั้งสมมุติฐาน
Hardware มีความแตกต่างอะไร ระหว่าง VMWare กับ Physical Server ?
รวบรวมข้อมูล
ไปดู Hardware Requirements พบว่า ตั้งแต่ Tensorflow 1.6 เป็นต้นมา ต้องใช้งานบน CPU ที่มี AVX Instruction
และจาก
https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#CPUs_with_AVX
บอกว่า CPU ที่มี AVX Instruction คือ เก่าสุด ชื่อรุ่น Sandy Bridge
แล้ว … เครื่อง Windows Server 2016 DataCenter ที่สร้างบน VMWare นั้น ได้ CPU อะไร ??
ค้นหาข้อมูล พบว่า Microsoft ให้ใช้เครื่องมือฟรี ที่ชื่อว่า coreinfo (ซึ่งบน Linux ใช้ cpuinfo) สามารถ Download ได้ที่ https://docs.microsoft.com/en-us/sysinternals/downloads/coreinfo
เมื่อลอง Download มาติดตั้ง และ ใช้คำสั่ง coreinfo ได้ผลว่า เป็นรุ่น Intel Xeon รุ่น E7 – 4870
ลองไปค้นหาดู ว่า รุ่น E7 – 4870 มี Code Name ว่าอะไร จาก Intel ได้ความว่า ชื่อรุ่น Westmere ซึ่ง ไม่มี AVX !!!!!
ไปดูลำดับ Codename จาก
https://en.wikipedia.org/wiki/List_of_Intel_CPU_microarchitectures
พบว่า Westmere เป็นรุ่นสุดท้าย ก่อนจะมีการใส่ AVX นั่นเอง (Sandy Bridge, Ivy Bridge, Haswell … เป็นต้นมา มี AVX หมด)
สรุปผล
เครื่องบน VMWare ปัจจุบัน นั้นจะได้ Spec ตาม CPU ตัวต่ำสุดใน Cluster ดังนั้น …. เจ้าจึงได้ Westmere ที่ไม่มี AVX ไปใช้ และ ใช้งาน Tensorflow รุ่นตั้งแต่ 1.6 เป็นต้นมาไม่ได้
จบข่าว