Install Tensorflow(gpu) บน Window 10 เบื้องต้น

champ sirichai
4 min readJul 6, 2018

--

>> LAST UPDATED JULY, 2018 <<

บทความนี้จะแบ่งเป็น 2 part โดยจะสอนตั้งแต่ลงโปรแกรมพื้นฐานที่จำเป็น ไปจนถึงขั้นตอนที่เราสามารถทำ Object detection เบื้องต้นได้

  1. เตรียมโปรแกรมที่จำเป็นสำหรับการใช้ tensorflow + install tensorflow(gpu)
  2. การทำ object detection

ก่อนอื่นตรวจสอบรุ่น gpu ที่สามารถใช้กับ cuda ได้ที่นี่ ไม่งั้นจะไม่สามารถใช้ tensorflow(gpu) ได้ (รุ่นที่ผมใช้ เป็น NVIDIA GeForce GTX 1060)

เอาละมาเริ่มกันเลยย !

Part1

โปรแกรมที่จำเป็นสำหรับการใช้ tensorflow

  1. Visual Studio 2015 Community Edition Update 3 → download
  2. Anaconda (64-bit) with Python 3.6 (Anaconda3–5.2.0) → download
  3. CUDA 9.0 (64-bit) → download
  4. cuDNN for CUDA 9.0 → download
  5. Tensorflow-gpu

1.Install Visual Studio 2015 Community Edition Update 3

ในที่นี้จะใช้เป็น version 2015 เนื่องจากที่ไปอ่านมาส่วนใหญ่ version 2017 จะมีปัญหา (แต่ถ้าเพื่อนคนไหนอยากใช้ version 2017 ก็สามารถใช้ได้ครับ)

เลือกลงแบบ custom แล้วติดตั้งตามภาพ

เมื่อติดตั้งเรียบร้อยแล้วให้ทำการ add path ของ Visual Studio 2015 ด้วย

กด search ของ window แล้วพิมพ์ environment variables เพื่อทำการ add path

1.1 กด New สร้างตัวแปร INCLUDE และใส่ค่าเป็น C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt

1.2 กด New สร้างตัวแปร LIB และใส่ค่าเป็น C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64

1.3 ไปที่ Path กด Edit แล้ว New เพื่อเพิ่ม C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin เข้าไป

2.Install Anaconda (64-bit) with Python 3.6 (Anaconda3–5.2.0)

เมื่อเปิดตัวติดตั้ง ให้กด Next ไปเรื่อยๆจนถึงหน้านี้ ให้เลือก add Anaconda PATH เพื่อที่เราจะได้ไม่ต้องไป add path เพิ่มทีหลัง

เมื่อลงเรียบร้อยเปิด command prompt หรือ anaconda prompt ก็ได้ แล้วทำการสร้าง environment ขึ้นมาใหม่เพื่อใช้งานกับ tensorflow

สร้าง environment ชื่อ myenv(ตั้งอะไรก็ได้) และลง packages ที่จำเป็น

พิมพ์คำสั่งสร้าง environment ไปที่ cmd

conda create -n myenv pip python=3.6.1 numpy scipy mkl pillow lxml cython jupyter matplotlib pandas

ทำการเรียกใช้ environment โดยใช้คำสั่ง activate ตามด้วยชื่อ environment

activate myenv

คำสั่งเมื่อต้องการออกจาก environment

deactivate

คำสั่งเมื่อต้องการลบ environment (ไม่ต้องการจะใช้แล้วหรือมี environment อื่น)

conda env remove -n myenv

3.Install CUDA 9.0 (64-bit)

ให้ลง CUDA version 9.0 เนื่องจาก tensorflow ยังไม่รองรับ 9.2

โหลดโปรแกรมสำหรับ window version ดังภาพ

กดเลือกตามนี้แล้ว download มาทั้งหมด

เลือกลงแบบ custom ตามภาพ

ลงแบบ custom แล้วเลือกเฉพาะ CUDA

หลังจากลงเรียบร้อยให้ทำการ add path ของ CUDA

3.1 เข้าไปที่ Path กด Edit แล้ว New เพื่อเพิ่ม C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin เข้าไป

3.2 เข้าไปที่ Path กด Edit แล้ว New เพื่อเพิ่ม C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp เข้าไป

#Common Errors

  1. สำหรับคนมี error ขั้น system check แล้วขึ้น “ This graphics driver could not find compatible graphics hardware” ให้ทำการลง CUDA version ที่สามารถหาการ์ดจอเจอก่อน ในที่นี้ใช้ version 9.2 แล้วลง CUDA version ที่ tensorflow รองรับ คือ version 9.0 ต่อ เนื่องจาก แต่ละ version สามารถทำงานร่วมกันได้ อ้างอิง
  2. สำหรับคนที่ cuda install failed ให้ทำการ uninstall โปรแกรมบนเครื่องที่ชื่อขึ้นต้นด้วย nvidia ทั้งหมดในเครื่อง ทำการ restart แล้วลง CUDA ใหม่อีกรอบ

4.Install cuDNN for CUDA 9.0

เลือก cuDNN ให้ตรงกับ CUDA ที่เราลงในครั้งนี้ใช้ cuDNN for CUDA 9.0

เมื่อโหลดเสร็จแล้วให้เราแตกไฟล์ zip ข้างในจะมี folder (bin, include, lib) อยู่ นำ folder (bin, include, lib) ไปใส่ใน folder ที่เราลง CUDA ไว้ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0

5.Install Tensorflow-gpu

เปิด command prompt แล้วทำการเรียกใช้ environment ที่เราสร้างไว้

แล้วพิมพ์คำสั่งเพื่อลง tensorflow-gpu

pip install --upgrade tensorflow-gpu

เมื่อเสร็จแล้วทำการให้ลง keras ต่อ

pip install --upgrade keras

เสร็จเรียบร้อยแล้วสำหรับการลงโปรแกรมเพื่อเตรียมสำหรับทำ object detection

ขั้นตอนสุดท้าย test ว่า tensorflow gpu ของเราทำงานได้รึไม่ โดยเข้าพิมพ์ python ลงไปที่ command prompt แล้วใส่ code ตามนี้เลย

'''Trains a simple convnet on the MNIST dataset.

Gets to 99.25% test accuracy after 12 epochs
(there is still a lot of margin for parameter tuning).
16 seconds per epoch on a GRID K520 GPU.
'''

from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K

batch_size = 128
num_classes = 10
epochs = 12

# input image dimensions
img_rows, img_cols = 28, 28

# the data, shuffled and split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])

model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
จะเห็นได้ว่า python ใช้ gpu ในการคำนวณแล้ว

GPU ของเราทำงานแล้ว เย่ +++

จบแล้วครับสำหรับการเตรียมความพร้อมใน part แรก

สามารถไปต่อ Part2 กันได้เลย ยย

References

  1. GPU-accelerated Deep Learning on Windows 10

--

--