在 2017 年的最後一天,要為大家介紹如何在 Docker 的 Container 裡面,使用到 GPU 的 Resource,因為在最近的幾年無論是 AI(人工智慧)、Machine Learning、 還是 Deep learning 這些名詞都常會被看到,它們的執行運算方式也從傳統的只用 CPU 做運算,變成了可以使用 GPU 做運算,加快程式計算的速度。另外一方面 Container 的技術也愈來愈興起,所以今天就為大家介紹如何在 Docker Container 內,使用到 GPU 的運算資源。
今天的實作就使用在 Docker Container 內執行簡單的 Tensorflow 矩陣相乘的程式以及撰寫簡單的 CUDA 程式,來測試在 Docker Container 裡面如何執行 GPU 的運算資源。
1.作業系統為 CentOS 7.3
2.需要使用 Nvidia 的顯示卡,目前我是使用較低階的型號 GT 710
3.下載 CUDA 的開發工具,網址如下
https://developer.nvidia.com/cuda-downloads
4.安裝 CUDA 的開發工具,主要使用的指令如下
# echo 'blacklist nouveau' >> /etc/modprobe.d/blacklist.conf
# dracut /boot/initramfs-$(uname -r).img $(uname -r) --force
# systemctl disable gdm
# reboot
# chmod 777 cuda_9.1.85_387.26_linux.run
# ./cuda_9.1.85_387.26_linux.run
# systemctl enable gdm
# reboot
5.安裝完成 CUDA,開發工具之後使用 nvidia-smi
指令確認是否安裝成功,畫面如下
6.需要安裝 nvidia-docker,指令如下
# curl -s -L https://nvidia.github.io/nvidia-docker/centos7/x86_64/nvidia-docker.repo | \
sudo tee /etc/yum.repos.d/nvidia-docker.repo
# yum install -y nvidia-docker
之後會使用 nvidia-docker 指令來操作 Docker,因為它有把 CUDA 的 library 連結進去,所以使用上較方便
7.啟動 nvidia-docker service,指令如下
# systemctl start nvidia-docker
# systemctl enable nvidia-docker
以上就把需要在 Docker 上使用 GPU Resource 的環境準備好了
1.啟動 Docker Container 的指令如下
$ nvidia-docker run -it tensorflow/tensorflow:latest-gpu /bin/bash
2.進入 container 輸入 python 指令,然後執行矩陣相乘的運算,畫面如下
這邊主要是要執行一個 2 * 2 矩陣乘上 2 * 2 的矩陣
3.執行的結果如下
以上就是簡單的使用 Tensorflow 執行矩陣相乘
1.啟動 Docker Container 指令如下
$ nvidia-docker run -it nvidia/cuda /bin/bash
2.進入 Container 之後需要安裝 vim 編輯器,指令如下
# apt-get update
# apt-get install -y vim
3.撰寫 CUDA 程式,如下
# vi sum.cu
程式如下
#include "stdio.h"
__global__ void add(int a, int b, int *c){
*c = a + b;
}
int main(void){
int c;
int *dev_c;
cudaMalloc((void**)&dev_c, sizeof(int));
add<<<1,1>>>(2, 7, dev_c);
cudaMemcpy(&c, dev_c, sizeof(int), cudaMemcpyDeviceToHost);
printf("2 + 7 = %d\n", c);
cudaFree(dev_c);
return 0;
}
以上的程式主要是要將二數相加的簡單程式
4.將程式編譯以及執行,指令如下
# nvcc sum.cu -o sum.o
# ./sum.o
執行結果的畫面如下
今天介紹了如何安裝 CUDA 的開發工具、如何在 Docker Container 執行 Tensorflow程式以及撰寫了簡單的 CUDA 程式,主要目的是除了可以在實體機上的環境上執行到 GPU 的資源,也可以透過使用 Container 的方式執行到 GPU 的資源。