February 22, 2019
TensorFlow เป็น library สำหรับการทำ machine learning (ML) ที่สำคัญเป็น open-source แล้วก็มี APIs ให้ใช้อีกด้วย โดยจะทำงานกับ System ที่เป็น 64 bit เท่านั้น
โปรแกรมที่เราจะลงมี 3 ตัวก็ คือ
โดยการติดตั้งนั้นต้องดูเรื่อง version ของโปรแกรมที่รองรับให้ตรงกัน เช่น ในที่นี้ผมใช้ Python 3.6, TensorFlow 1.9, CUDA 9.0 และ cuDNN 7.4.2 โดยสามารถอ่านบทความ วิธีการติดตั้ง CUDA บน Windows 10 เพื่อใช้งาน TensorFlow-GPU และทำการติดตั้งให้เสร็จก่อนอ่านบทความนี้นะครับ
ผมได้เขียนการติดตั้ง Python แยกไว้แล้วนะครับ ลองดูได้ที่บทความนี้ครับ VS Code, Python - มาเขียน Python บน Visual Studio Code กันครับ
แนะนำให้สร้าง Environment ใหม่ขึ้นมาโดยใช้ Virtualenv หลังจากนั้นให้ใช้คำสั่ง
pip install tensorflow==1.9.0
pip install tensorflow-gpu==1.9.0
ต่อมาเราจะลอง import tensorflow มาใช้กันนะครับ สร้างไฟล์ Python แล้วลองรันดูครับ โดยโค้ดนี้จะทำการสร้าง Matrices มา 2 ตัวแล้วเอาไปคูณกันบน GPU
โดยเจ้า log_device_placement
ถ้าเป็น True มันจะตัวเลือก device ให้เราอัตโนมัติ โดยมันจะเลือกเป็น GPU ถ้าเราทำทุกอย่างถูกต้องนะครับ
import tensorflow as tf
# Creates a graph.
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))
2019-02-22 00:19:39.508398: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2019-02-22 00:19:40.310730: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1392] Found device 0 with properties:
name: GeForce 940M major: 5 minor: 0 memoryClockRate(GHz): 1.176
pciBusID: 0000:01:00.0
totalMemory: 2.00GiB freeMemory: 1.66GiB
ข้างบนมันก็จะบอกประมาณว่าเจอ GPU ID:0 นะ ชื่อนี้ๆ มี memory เท่าไหร่ใช้ได้เท่าไหร่ก็ว่าไป ส่วนด้านล่างก็จะเป็นการเพิ่ม GPU เข้าไปเพื่อใช้ในการคำนวณ
2019-02-22 00:19:40.319866: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1471] Adding visible gpu devices: 0
2019-02-22 00:19:43.146767: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:952] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-02-22 00:19:43.150924: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:958] 0
2019-02-22 00:19:43.153615: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:971] 0: N
2019-02-22 00:19:43.156556: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1084] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1422 MB memory) -> physical GPU (device: 0, name: GeForce 940M, pci bus id: 0000:01:00.0, compute capability: 5.0)
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce 940M, pci bus id: 0000:01:00.0, compute capability: 5.0
2019-02-22 00:19:43.324439: I T:\src\github\tensorflow\tensorflow\core\common_runtime\direct_session.cc:288] Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce 940M, pci bus id: 0000:01:00.0, compute capability: 5.0
2019-02-22 00:19:43.344617: I T:\src\github\tensorflow\tensorflow\core\common_runtime\placer.cc:886] MatMul: (MatMul)/job:localhost/replica:0/task:0/device:GPU:0
a: (Const): /job:localhost/replica:0/task:0/device:GPU:02019-02-22 00:19:43.349202: I T:\src\github\tensorflow\tensorflow\core\common_runtime\placer.cc:886] a: (Const)/job:localhost/replica:0/task:0/device:GPU:0
b: (Const): /job:localhost/replica:0/task:0/device:GPU:0
2019-02-22 00:19:43.354614: I T:\src\github\tensorflow\tensorflow\core\common_runtime\placer.cc:886] b: (Const)/job:localhost/replica:0/task:0/device:GPU:0
อันนี้ก็เป็นผลลัพธ์ของการคูณ Matrices
[[22. 28.]
[49. 64.]]
ใครได้ผลลัพธ์แบบนี้ก็ถือว่าเราติดตั้งทุกอย่างเสร็จผ่านไปได้ด้วยดี ใครที่มีปัญหาตอนลงก็ลองไล่เช็คอีกรอบนะครับ ว่าลืมทำอะไรไปรึป่าว ตอนผมทำครั้งแรกนี่ลืมดูเรื่อง version แล้วก็ถ้าใครใช้ Virtualenv ของผมตอนแรกไม่ได้เพิ่ม Path ของ CUDA ไปที่ System ทำให้ tensorflow หาไม่เจอ หลังจากผมก็ไปหาวิธีเพิ่ม Path ผ่าน command line วุ่นวายมากกว่าจะรู้ตัว