最近有深度学习的大量需求,需要搭建一个 gpu 集群方便大家一起使用。(在 docker 节点下创建,上一个创建错节点了)
我的初步想法就是:
1.自己购买显卡,cpu,主板等组装多台主机(这个就后续慢慢看用些什么显卡了)
2.通过 docker swarm 的方式将这些电脑连接在一起,使用 docker 的目的就是为了隔离开每个用户,同时也保证了每个人的 root 权限, 大家可以通过 ssh 服务登录到自己创建的容器内。除此之外,通过 swarm 这样子每个人可以使用不同主机的显卡进行训练,不用在每台机器上反复配置。
3. docker swarm 会有一个管理节点和计算节点,我网上调研的结果就是通过 Infiniband 网络连接存储节点来完成运算数据的读取和存储。其实在这里我有个问题,这样子的话能否保证一个读写的速度,还想来请教一下过来人。另外,是否可以各台主机有自己的系统存储外,一起共用一个数据盘,不知道如何实现这个。
资金有限,也是在慢慢摸索不断进步,网上搜索到的教程都是些零零碎碎的。谢谢大家听我啰啰嗦嗦到这,如果有过来人搭建过愿意分享的那真的是万分感谢的。如果大家看到些什么好的教程也可以丢给我,有什么好的想法也可以告诉我,谢谢大家了。
1
songjf OP 好像都没什么人有兴趣的样子哈哈哈哈
|
2
Herobs 2019-11-07 18:21:20 +08:00 via Android
资金有限就不要考虑 IB 了,docker 显卡要直通才行,并不能同时使用。
|
3
Philippa 2019-11-07 18:28:52 +08:00
这个去参考 Nvidia 的方案吧,用 k8s 来搭集群的,Nvidia 云的镜像拉下来就可以了。
1. gpu 集群当然是多卡,买要买工业级的,比如说 T4 之类的,里面有单独的解码器,一秒接近一百帧,只会耗费一点点的显存。主机买现有的方案整机。不要用消费级的显卡 2080Ti 之类的就算以后你愿意给钱 Nvidia 也不会给支持( Nvidia 的文档非常糟糕),一些框架如 Nvidia TensorRT 官方只支持工业级显卡。 2. docker swarm 好像不留行了?但我觉得很好用。其实不一定要 docker swarm,你把 host 的 driver 装好,上 docker 装好 nvidia-docker 就可以了,docker-swarm 还是 k8s 都是业务驱动的。什么叫做每个人使用不同主机的显卡?显卡在同一台机器上是可以共享的,docker 里面可以选择开放哪一块显卡。我喜欢在上面搭个 jupyter 开放出来这样大家可以直接 web 写代码。 3. 网速限制方式就多种多样了,我做开发的一般在 Dockerfile 的镜像系统里面配。 4. 资金不够就用云服务吧。 |
4
hdsky 2019-11-07 18:40:06 +08:00 via iPhone
IB 的话需要加专用的交换机和网卡,价格比较昂贵,并不推荐。
针对深度学习集群建议采用 k8s+docker 的形式,具体我不太了解。 关于存储方面,常规的 HPC 是一台主节点+备用节点+计算节点+存储节点。其中存储节点就是你说的集中存放的地方,通过 NFS 挂载在各个节点上,当然还需要一台交换机作为联通。 |
5
songjf OP @Philippa 好像我没有很好的表达自己的想法, 我的一个想法就是有一个控制节点,然后每台主机就是一个计算节点(譬如主机A装了2块 1080ti,主机B装了2块 TITAN V), 然后对于每个用户都创建一个容器,然后每个用户 ssh 过来之后,可以自由切换到主机A,主机B上使用不同的显卡进行训练。难道 swarm 无法完成这个功能吗,我搜了半天好像都没搜到自己想要的答案。也是愿意听闻一下您专业的解答。云服务大公司租下来几年也不便宜,也就自己折腾一下。
|
7
anubu 2019-11-07 20:01:02 +08:00
明确存储需求比较重要,IB 的话整体方案应该是比较贵的。纯粹做实验的话一般的共享存储就可以了,NFS\CIFS\iSCSI 什么的,加个万兆交换机差不多了。没钱的话,千兆又不是不能用。
不太了解深度学习 GPU 集群,一般来说应该不能启动容器后 ssh 到容器里面去选择主机 A 或主机 B 的显卡。正常的业务逻辑是在容器创建之前就确定使用哪个显卡,管理平台根据需求调度容器到指定的主机上。 |
8
hdsky 2019-11-07 20:22:31 +08:00 via iPhone
@songjf 后排提醒一下,我比较支持前面那位老哥说的如果是多卡计算的话尽量采用专业卡的做法。我们这边做过八卡并行的测试,其中八块 1080Ti 的计算效果只能达到大概 5.6 ~ 5.7 倍于一张卡的情况;而八块 V100 的效果能达到大概 7 倍左右于单张 V100 的效果。
由此建议消费卡并行不应大于 4 张,如需 4 张以上的显卡并行计算,请采用专业卡。 |
10
hdsky 2019-11-07 21:12:44 +08:00 via iPhone
@songjf 没记错的话 IB 网卡几千一个,交换机几万到十几万,线材也要单独购买。具体价格跟具体情况不同,请咨询代理商,在此仅作参考。
|
11
mritd 2019-11-08 07:28:13 +08:00 via iPhone
Swarm 目前已经快凉了,k8s 才是应该考虑的,还有在很早以前我折腾 cuda 啥的发现 k8s 当时只支持 pod 锁定单显卡资源,不支持对一个显卡按比例分配,完全独占,不过现在不清楚了
|
12
Philippa 2019-11-08 10:40:32 +08:00
@songjf 我不清楚 swarm 和 k8s 是怎么配的,我的理解是,如果只是 ssh 到目标机器上来操作,而且需要切换机器,就算只装了 docker 就能跑了。相反,你说你可以在单独一台机器上,同时从这台机器上 access 多台机器的显卡,同时数据集能够自动地传输到目标机器上,这才是需要集群的场景。直接 k8s,swarm 更简单但 k8s 有现成方案。
|
13
songjf OP @mritd 有个想法是,假如不同主机上都创建一个人的例如 ubuntu 容器,然后不同主机上的 ubuntu 上容器共用一个系统文件,是不是就能实现在一台主机上的容器内配置环境,多台主机上都能用的效果,并且能随时随地切换主机使用(例如 ssh )
|
14
tfdetang 2019-11-10 15:22:16 +08:00
这类需求总结下来不就是 kubeflow 吗?
|