SKCONAN

วิธีการติดตั้ง TensorFlow-GPU ผ่าน pip (Python)

February 22, 2019

title

Tensorflow คืออะไร

TensorFlow เป็น library สำหรับการทำ machine learning (ML) ที่สำคัญเป็น open-source แล้วก็มี APIs ให้ใช้อีกด้วย โดยจะทำงานกับ System ที่เป็น 64 bit เท่านั้น

ขั้นตอนการติดตั้ง

tf compatibility

โปรแกรมที่เราจะลงมี 3 ตัวก็ คือ

  • Python 3.6 (หรือจะเป็น anaconda ก่อนได้ครับ แต่ขอให้เป็น Python 3.6 ก็พอ)
  • TensorFlow และ TensorFlow 1.9.0
  • Virtualenv (ไม่บังคับครับ แต่แนะนำให้ใช้ครับ เพราะจะทำให้การทำงานแต่ละโปรเจคไม่วุ่นวายกัน สามารถจัดการเรื่อง Library ได้ง่ายขึ้นครับ) ติดตั้ง Virtualenv บน Windows 10 ผ่าน Pip

โดยการติดตั้งนั้นต้องดูเรื่อง version ของโปรแกรมที่รองรับให้ตรงกัน เช่น ในที่นี้ผมใช้ Python 3.6, TensorFlow 1.9, CUDA 9.0 และ cuDNN 7.4.2 โดยสามารถอ่านบทความ วิธีการติดตั้ง CUDA บน Windows 10 เพื่อใช้งาน TensorFlow-GPU และทำการติดตั้งให้เสร็จก่อนอ่านบทความนี้นะครับ

การติดตั้ง Python

ผมได้เขียนการติดตั้ง Python แยกไว้แล้วนะครับ ลองดูได้ที่บทความนี้ครับ VS Code, Python - มาเขียน Python บน Visual Studio Code กันครับ


การติดตั้ง TensorFlow

แนะนำให้สร้าง 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 วุ่นวายมากกว่าจะรู้ตัว

หากใครชอบเนื้อหาที่ผมเขียน สามารถร่วมกัน Donate เพื่อเป็นค่ากาแฟได้นะครับ ^^


ใครที่สงสัยจุดไหน หรือพบว่าจุดไหนที่ผมอธิบายผิด สามารถเข้ามาพูดคุยกันได้นะครับ inbox มาที่ Facebook หรือ e-mail: supakit.kr@gmail.com จะยินดีมากเลยครับ



รับพัฒนาโปรแกรมทางด้าน Image Processing, Computer Vision และ Machine Learning สามารถติดต่อ สอบถาม และปรึกษาได้ฟรีครับ

Written by Supakit Kriangkhajorn

© 2019, Built with