摘要:
運行深度學習算法的需要一些計算能力,這主要由GPU提供。 但是我想在雲計算的時代幾乎不會有人喜歡,從頭搭建那麼多複雜的技術棧,那些工具,而且一個Tesla還很貴,心血來潮買個大GPU,然後丟在那裏讓它生鏽麼?我們喜歡在在Docker容器中安裝它們,以避免污染其他程序,並能夠與其他人分享結果。 這意味着我必須配置Docker來使用GPU的計算能力。另外談到低成本,我想你對阿里雲或者騰訊雲應該充滿怨言了,因爲真的很貴。
1. 選擇雲服務提供商
先來聊聊成本,讓我們來簡單對比下國外的標杆AWS和國內的一哥阿里雲。
AWS:
我選擇的是AWS EC2 P2,1塊Tesla K80 GPU, 4C-61G。
價格(這裏選的是競價實例,這個地方需要解釋下,競價實例會在有更高的價格時會回收,比按需的要便宜80%左右,但是價格很穩定,如果你價格定的合理,按照這個文章分析,你不會擔心輕易回收的問題。我也希望阿里雲有類似產品):它是按小時計費的,一個月下來,1321元
阿里雲
同樣是爲了科學上網的海外服務器,按月付費,每月5432元,且配置,1塊Tesla P100 GPU, 4C-30G。內存比P2少一半,GPU半斤八兩,但價格是AWS的接近5倍。我想你知道該怎麼選了。
經過調研,發現在2018年初,阿里雲也推出了競價實例,只不過優惠幅度不太大而且經常缺貨,目前我每沒看到該產品的入口,歡迎指正。
2. 在該實例上準備驅動和容器運行時
我們假設你在第一步通過對比做了理性選擇。
- 在該節點上安裝驅動:
參考:這個地方,不過這裏針對的是1.0 版本,不能照抄,也許你看到的時候已經改成2.0了,但是並不影響本文的正確性。
# Install official NVIDIA driver package
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
sudo sh -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 /" > /etc/apt/sources.list.d/cuda.list'
sudo apt-get update && sudo apt-get install -y --no-install-recommends linux-headers-generic dkms cuda-drivers
- 在該節點上部署nvidia-docker2
更新apt源
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
安裝nvidia-docker2
sudo apt-get install nvidia-docker2
sudo pkill -SIGHUP dockerd
That’s all! 是不是躍躍欲試了,跑個測試吧:
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
nice!
現在看起來,參數有些多哦,那麼編輯下/etc/docker/daemon.json
:
重啓Dokcer後,就可以不用帶--runtime=nvidia
這個啦。
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
3. 運行個能夠使用GPU的Docker容器
這是我們最終的目的,幸運的是,NVIDIA的工程師找到了一種從主機到容器共享GPU驅動程序的方法,而無需單獨在每個容器上安裝它們。在hub裏有一個Registry很好玩:tensorflow/tensorflow
- Start CPU only container(只有CPU計算能力)
docker run -it -p 8888:8888 tensorflow/tensorflow
會吐出來token,接着打開這個吧,jupyter!http://public_ip:8888/?token={your-token}
- Start GPU (CUDA) container
nvidia-docker run -it -p 8888:8888 tensorflow/tensorflow:latest-gpu
因爲Docker
的配置文件中已經指定了運行時,所有這個命令可以被docker命令替代:
docker run -it -p 8888:8888 tensorflow/tensorflow:latest-gpu
接着打開jupyter!http://public_ip:8888/?token={your-token}
跑跑看,TF So Cool!高效的開始你的AI之路吧!
後面會準備下,如何在kubernetes裏集成這些,然後我的最終目的是準備出一個合適的鏡像能夠和OpenFaaS結合起來,以極低的成本開放出去。如果您也感興趣,歡迎給我留言。