nvidia-docker run --rm -d -it --ipc=host -p ${SSH_PORT}:${SSH_PORT} -p ${DEEPSPEED_PORT}:${DEEPSPEED_PORT} --net=host --device=/dev/infiniband/ --gpus=all --ulimit memlock=-1:-1 --security-opt seccomp=unconfined --name $CONTAINER_NAME -v /cpfs:/cpfs -v /etc/hosts:/etc/hosts $IMAGE_NAME
--ipc=host:可理解为docker容器复用host主机的内存空间,即进程间IPC通信可在容器和主机进程之间进行。
--net=host: 复用主机的网络栈(IP、端口等),容器不再创建自己的网络栈;(不加这个选项的话,默认为每个容器创建一个自己的虚拟IP)。
--device=/dev/infiniband/:允许容器访问/dev/infiniband/这个外部设备。
--gpus=all:容器可以用到所有的GPU。
--ulimit memlock=-1:-1:允许容器内的进程,lock住任意大小的memory;
--security-opt seccomp=unconfined:容器默认会处在Secure computing mode下,即出于安全考虑,容器有几十个系统调用被禁用。设置该选项,可以使该安全策略失效,即不再禁用。
-v /etc/hosts:/etc/hosts:允许容器访问这个文件,该文件记录了很多IP和主机名的映射。用主机名访问其他机器的时候,系统会优先查这个文件,有的话就得到了相应的IP。(集群里如果没有配置域名服务器,那这个文件的作用就更大了)