如何低成本的在Docker中运行TensorFlow
摘要:运行深度学习算法的需要一些计算能力,这主要由GPU提供。 但是我想在云计算的时代几乎不会有人喜欢,从头搭建那么多复杂的技术栈,那些工具,而且一个Tesla还很贵,心血来潮买个大GPU,然后丢在那里让它生锈么?我们喜欢在在Docker容器中安装它们,以避免污染其他程序,并能够与其他人分享结果。 这意味着我必须配置Docker来使用GPU的计算能力。另外谈到低成本,我想你对阿里云或者腾...
摘要:
运行深度学习算法的需要一些计算能力,这主要由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结合起来,以极低的成本开放出去。如果您也感兴趣,欢迎给我留言。
更多推荐
所有评论(0)