วิธีการติดตั้ง Keras + Tensorflow (GPU version) บน windows 10
บทความนี้เขียนขึ้นเพื่อหลายๆ คนที่กำลังจะหันมาเล่น Deep Neural Net นะครับ และเอาไว้อ้างอิง เวลาจะลง windows ใหม่ กันลืม หลังว่าจะมีประโยชน์ นะครับ
Dependencies
จะขอสรุปรายการ เครื่องมือที่จะต้องใช้สำหรับการติดตั้ง Keras และ Tensorflow นะครับ เน้น GPU เพราะ cpu ติดตั้งง่ายมากครับ
- Visual Studio 2017 Community Edition ใช้สำหรับ Compile CUDA library โดยขณะที่เขียน นี้ CUDA อยู่ version 9 ครับ แต่เราจะลง version 8 เพราะ Tensorflow version ใหม่ ยังไม่สเถียร
- Anaconda (64-bit) with Python 3.6 เน้นไปที่ Python version 3 นะครับ เพราะ version 2 แทบจะเลิกใช้งานแล้ว ดังนั้นลงตัวใหม่ดีกว่า
- CUDA V8 (64-bit) ใช้สำหรับ คำนวนบน GPU ครับ พวก คูณ Matrix parallel computing สนุกนักแล
- cuDNN v6 สำหรับ CUDA 8.0 ใช้รันพวก Deep Neural Net (convolution neural networks)
- Keras 2 + Tensorflow-gpu
- Keras เป็นส่วนที่ทำให้เขียน Deep NN สะดวกขึ้นง่ายขึ้นครับ เพราะไม่ต้องคำนวนจำนวน input output เอง keras จะเป็นคนทำให้ และส่งให้ Back end เช่น Theano, Tensorflow, or CNTK สำหรับในบนความนี้ใช้ Tensorflow เป็นหลักครับ - Tensorflow-gpu (1.4) เป็น Backend สำหรับทำ Deep Neural Network
Hardware
หลัก ๆ จะเป็น การ์ดจอครับ รุ่นที่ผมใช้เป็น NVIDIA GeForce GTX 1050, 4GB RAM
Installation
Outline step:
- Install Visual Studio 2017 Community Edition
- Install Anaconda (64-bit) with Python 3.6
- Install CUDA and CuDNN
- Install Tensorflow-gpu + Keras
1. Installation Visual Studio 2017 Community Edition
ทำการ Download Visual Studio มาก่อนครับ สามารถ Download ได้ที่นี่
จากนั้นทำการติดตั้งแบบ Online ให้ทำการเลือกตัวติดตั้งให้เหมือนดังภาพนะครับ
จากนั้นก็ทำการติดตั้ง ตัวโปรแกรมจะทำการ Download package มาติดตั้งให้ครับหลังจากติดตั้งเรียบร้อยแล้วให้ทำการ add path ของ Visual Studio 2017 ด้วยครับ วิธีการคือ
- เพื่อชื่อ VS14_PATH ในส่วนของ System variables ด้วย path “C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC” ซึ่งถ้าติดตั้งเสร็จแล้วมันจะมี ชื่อตัวแปลนี้ในระบบมาให้ครับ เราจะใช้ชื่อ VS14_PATH อ้างอิง path ยาวๆ จะได้ไม่ต้องเขียนเยอะครับ
2. จากนั้นทำการ Add path ดังกล่าวไปที่ระบบครับ คลิ๊กที่ Path และเลือก Edit ครับ จากนั้นทำการใส่ Path ของเราตามกรอบ 4 เหลี่ยมที่วงสีแดงไว้ครับ
2. install Anaconda
ให้ทำการ Download Anaconda ลงมาที่เครื่องครับ สำหรับท่านใดที่ยังไม่เคยใช้งาน python ให้ลองทำตามครับ จะพยายามเขียนให้ชัดเจนที่สุด Download Anaconda version ล่าสุดที่เป็น python 3.x ครับ(ตอนที่เขียนอยู่เป็น 3.6)
สำหรับ Anaconda เป็น ตัวช่วยในการจัดการ python ครับ เนื่องจาก python มี library เยอะแยะมาก เวลาทำการพัฒนา อาจจะใช้ library ไม่เหมือนกัน คนละ version Anaconda สามารถ จะลอง version ของ python ต่างๆ ได้ครับ กล่าวคือสามารถ สลับไปใช้งาน python 2 python 3 ได้สะดวก เลือกสลับลง library คนละversion ได้ครับ
เมื่อ Download มาแล้วก็ ทำการติดตั้งโดย คลิ๊ก Next และเริ่มติดตั้งครับ
ตรงเลือก ที่อยู่สำหรับติดตั้ง อันนี้แนะนำให้เอา programApp ออกนะครับ ถ้าไม่เอาออกเรา จะลำบากตอนเข้าไปแก้ไขหรือดูไฟล์ ต่างๆ ของ Anaconda
อีกส่วนนึงที่สำคัญ อย่าลืม Add path ให้กับ Anaconda ด้วยครับ วิธีก็ตอนลงให้เลือกว่าทำการ Add path ให้กับ Anaconda ติ๊กแล้วมันจะเป็นสีแดงๆ ปล่อยมันไปครับ
จากนั้นก็ install เลยครับ รอจนเสร็จสิ้นกระบวนการเป็นอันเสร็จพิธีติดตั้ง Anaconda
2. 1 install package สำหรับ Anaconda
เมื่อทำการติดตั้งเสร็จเรียบร้อยแล้ว ทีนี้จะทำการติดตั้ง Package ให้กับ Anaconda ครับ อย่างที่บอกไป Anaconda สามารถสร้าง Environment ใหม่ขึ้นมาได้ ดังนั้นเราจะทำการสร้าง Environment ชื่อ Py3TF เอาไว้ติดตั้ง Tensorflow ครับจะได้ไม่กระทบต่อ Environment หลักของเรา
- เริ่มจาก เปิด console ขึ้นมาครับ ทำการ เรียก python ก่อนเลยครับว่าเป็น version อะไร ของผมเป็น python 3.6.3 เวลาออกก็ exit() ครับ ถ้าขึ้นแสดงว่าใช้งาน python ได้แล้ว ถ้าไม่ได้ลองลง Anaconda ใหม่ครับ และอย่างลืม Add path ด้วย
2. ทำการสร้าง Environment ใหม่ขึ้นมาโดยใช้คำสั่ง
conda create — name <environment-name> <python-packages>
ดังนั้นจะสร้าง environment ชื่อ py36tf และมี packages ตามหลังเป็น python version3.6.1 ,numpy, pip, scipy และ mkl
conda create -name py36tf python=3.6.1 numpy pip scipy mkl
เมื่อติดตั้งเสร็จแล้วจะกลับมาที่ command หลัก วิธีการ สลับไปใช้ Environment ที่เราสร้างก็ ทำการเรียกคำสั่ง activate py36tf ครับ ลองมาดูตัวอย่าง
ตัวอย่างการสลับ ให้เรียกใช้คำสั่ง activate py36tf ครับ ทีนี้ถ้าใครใช้ windows ที่ตั้ง format เป็นภาษาไทยเช่นพวกวันที่ อะไรพวกนี้จะเจอปัญหานี้ครับ ไม่สามารถ Activate ได้ ล่ม วิธีแก้ไขตามไปที่บทความนี้ครับ “วิธีแก้ไขเมื่อ Activate Anaconda ไม่ได้”
เมื่อทำการ Activate Environment ได้แล้วจะขึ้นหน้าจอลักษณะดังนั้ ด้านหน้าจะมี ชื่อ Environment ของเราบอกไว้ให้เราทราบว่ากำลังทำงานอยู่ใน Environment ชื่ออะไรครับ
เป็นการเสร็จสิ้นการติดตั้ง Anaconda และ สร้าง Environment ครับ
3. Install CUDA and CuDNN
สามารถ Download CUDA Toolkit ได้ที่นี่เลยครับ download ซึ่ง Version ที่ใช้ตอนนี้จะเป็น version 8 ล่าสุดจะเป็น version 9 ซึ่ง version 9 tensorflow ยังไม่เสถียร เลยใช้ 8 ก่อนดีกว่าครับ ที่หน้า website จะมีให้เลือกกดเลือกเป็น version 8 ครับ
เมื่อโหลดลงมาแล้วให้ทำการติดตั้งนะครับ ติดตั้งง่ายมากครับ next กับ yes อย่างเดียว
เมื่อทำการติดตั้ง Finished แล้วให้ทำการตรวจสอบว่า CUDA ติดตั้งแล้วหรือยังครับ โดยปกติแล้ว CUDA จะทำการ ADD System variables ให้เราอัตโนมัติครับ ชื่อว่า CUDA_PATH ให้ทำการเช็คที่ Environment Variables ดูครับ
หลังจาก ติดตั้งเสร็จ เราจะทำการ Add path ของ CUDA ด้วยโดยใช้ ชื่อ CUDA_PATH ที่ Cuda_toolkit สร้างให้เป็นชื่อย่อของ Path CUDA ฟังดูงงๆ หน่อยง่ายๆ คือเราจะ ADD Path CUDA ครับ ให้เลือก ที่ Path ในช่องของ User variable ดังภาพด้านล่างครับ พิมพ์ข้อความตามรูปเลยครับ แล้วกด ok
เมื่อติดตั้งเสร็จแล้วต่อไปจะทำการลง CuDNN เพื่อใช้สำหรับ ทำ Deep learning ครับ Download ได้ที่นี่ครับ (แต่ต้องสมัครสมาชิกก่อนนะครับ) เพื่อความสะดวกผมฝังไฟล์ที่ Download มาให้แล้ว ครับ โหลดที่นี่
เมื่อ Download มาแล้วทำการแตกไฟล์ครับ ไฟล์ที่มีจะประกอบไปด้วย Folder bin , include และ lib ครับ ให้ทำการ Copy 3 Folder นี้เอาไปวางไว้ที่ Path ที่ CUDA ติดตั้งอยู่ครับ ถ้าจำที่อยู่ที่ CUDA ติดตั้งไม่ได้ให้ย้อนขึ้นไปดู CUDA_PATH ด้านบนครับ
เป็นอันสิ้นสุดการติดตั้งของ CUDA_Toolkit และ CuDnn ครับ
4. Install Tensorflow-gpu + Keras
ติดตั้ง Tensorflow-gpu และ Keras ครับ ผมขอแนะนำให้ติดตั้ง Tensorflow gpu version ก่อนครับ เพราะถ้าติดตั้ง Keras มันมักจะเอา tensorflow version cpu ติดมาให้ เดี๋ยวจะป่วน environment เรา
เมื่อพร้อม ให้ทำการเปลี่ยนไปใช้ Environment py36tf ของเราเลยครับ หากจำคำสั่งไม่ได้ พิมพ์ activate py36tf หน้า command prom ครับ
ทำการติดตั้ง tensorflow-gpu โดยใช้คำสั่ง
pip install --upgrade tensorflow-gpu
นั่งรอมัน Download และติดตั้งครับ
เมื่อติดตั้งเสร็จเรียบร้อยแล้วให้ทำการติดตั้ง keras ต่อเลยครับ ใช้คำสั่งเดิมเพิ่มเติมเปลี่ยนเป็น keras
pip install --upgrade keras
เสร็จแล้วครับ สำหรับการติดตั้งทั้งหมดทั้งมวล หลังจากนี้จะทำการ Test ว่ามันสามารถใช้งานได้จริงๆ หรือป่าวครับ ให้พิมพ์ คำสั่ง python เพื่อเข้าใช้งาน python ครับ
สังเกตว่า Environment py36tf ของเราใช้ python version 3.6.1 ครับ ซึ่งคนละ version กับตัวที่เรา download มา ดังนั้นเราสามารถใช้ python version ใดก้ได้โดยที่ทำการสร้าง Environment ชื่อใหม่และกำหนด python version ตอนสร้างครับ
ก๊อบปี้โค้ดนี้ไปวางใส่เลยครับ
'''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 ทำงานจริงๆ หรือไม่ ใช้โปรแกรม GPU-z นะครับ หา Download ได้ตาม google
เสร็จสิ้นสำหรับบทความนี้ครับ สำหรับการติดตั้ง tensorflow version GPU ใครติดตรงไหน Comment ที่บรรทัดที่ติดได้เลยครับ