allrun 是机器学习平台提供的一个 alias 工具,帮助用户快速在所有 worker 上执行相同的操作。
该命令主要用于快速、灵活地配置任务运行环境,如软件包编译、安装。
切勿使用该命令启动训练任务。若使用 deepspeed / horovodrun / mpirun 启动训练任务时,启动命令不应使用 allrun 执行。
每个 allrun 命令都在单独进程中执行,所以 allrun export 并不会有预期效果。执行的命令如需临时指定环境变量,应使用 -x
参数,具体可见场景七。
因为 allrun 是 mpirun 的一个 alias,所以使用方式可以参考 mpirun 官方帮助文档,本文提供了部分常见场景的最佳实践。示例中如无特殊说明,默认操作系统为 Ubuntu / Debian,执行命令的是 worker0,在所有 worker 上生效。
说明
推荐将初始化脚本和训练脚本分开,然后使用此方式运行初始化脚本,这样不需要考虑余下场景中涉及的 Shell 语法问题。
因为 Shell 语法较为复杂,部分场景下还需要在同一个 session 内执行多条命令,所以建议将待执行的命令全部写入脚本中,例如:init.sh
allrun bash init.sh
allrun apt-get install -y pdsh # or allrun pip install touch
使用 &&
或 ||
分隔。
allrun bash -c "cd /workspace && touch testfile"
使用 ;
分隔。
allrun bash -c "cd /workspace; touch testfile"
allrun hostname > all_hostname
使用 cat all_hostname
查看文件内容。
t-20220414214615-9rkhj-worker-0 t-20220414214615-9rkhj-worker-1
allrun bash -c 'echo "$MLP_HOST" > host'
在 worker0 上执行 cat host
查看文件内容。
172.16.64.131
在 worker1 上执行 cat host
查看文件内容。
172.16.66.155
allrun bash -c "echo $MLP_HOST > host"
在 worker0 上执行 cat host
查看文件内容。
172.16.64.131
在 worker1 上执行 cat host
查看文件内容,其内容也为 worker0 的 ip。
172.16.64.131
allrun bash -c "echo '{\"key\": \"value\"}' > test"
在 worker0 和 worker1 上执行 cat test
查看文件内容,均为:
{"key": "value"}
allrun -x TEST_ENV=test_env bash -c 'echo "$TEST_ENV"'
因分别在 worker0 和 worker1 上执行一次 echo,所以会打印:
test_env test_env