You need to enable JavaScript to run this app.
导航

多实例命令批量执行工具

最近更新时间2023.04.20 15:24:07

首次发布时间2022.04.19 21:18:03

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
场景二 为所有 worker 安装相同的软件包
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"
场景四 重定向多个 worker 的运行结果到本地文件
allrun hostname > all_hostname

使用 cat all_hostname 查看文件内容。

t-20220414214615-9rkhj-worker-0
t-20220414214615-9rkhj-worker-1
场景五 各 worker 通过重定向生成文件

使用各 worker 自身的环境变量

allrun bash -c 'echo "$MLP_HOST" > host'

在 worker0 上执行 cat host 查看文件内容。

172.16.64.131

在 worker1 上执行 cat host 查看文件内容。

172.16.66.155

使用执行命令所在 worker 的环境变量

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