# 如果已存在 gid = 100 用户组,则删除 groupadd 命令。
RUN groupadd ma-group -g 100
# 如果已存在 uid = 1000 用户,则删除 useradd 命令。
RUN useradd -m -d /home/ma-user -s /bin/bash -g 100 -u 1000 ma-user
# 修改镜像中相关文件权限,使得 ma-user, uid = 1000 用户可读写。
RUN chown -R ma-user:100 {Python软件包路径}
# 设置容器镜像预置环境变量。
# 请务必设置 PYTHONUNBUFFERED=1, 以免日志丢失。
ENV PYTHONUNBUFFERED=1
# 设置容器镜像默认用户与工作目录。
USER ma-user
WORKDIR /home/ma-user
Dockerfile需要重点关注以下几点:
为镜像增加模型训练的默认用户组ma-group,
“gid = 100”
。
如果已存在
“gid = 100”
用户组,可能会报错“groupadd: GID '100' already exists”。可通过命令“cat /etc/group | grep 100”查询是否已存在gid = 100用户组。
如果已存在
“gid = 100”
用户组,则该步骤跳过,下文Dockerfile中删除“RUN groupadd ma-group -g 100”命令。
为镜像增加模型训练的默认用户ma-user,
“uid = 1000”
。
如果已存在
“uid = 1000”
用户,可能会报错“useradd: UID 1000 is not unique”。可通过命令“cat /etc/passwd | grep 1000”查询是否已存在uid = 1000用户。
如果已存在
“uid = 1000”
用户,则该步骤跳过,下文Dockerfile中删除“RUN useradd -d /home/ma-user -m -u 1000 -g 100 -s /bin/bash ma-user”命令。
修改镜像中相关文件权限,使得ma-user,
“uid = 1000”
用户可读写。
编写好Dockerfile后,通过执行如下所示命令进行新镜像构建。
docker build -f Dockerfile . -t {新镜像}
构建成功后将新镜像上传至SWR(参考
6
)。
在ModelArts上创建训练作业。
登录ModelArts管理控制台。
在左侧导航栏中,选择
进入训练作业列表。
单击
“创建训练作业”
,进入创建训练作业页面,填写作业信息,创建方式参考
表1
,其他参数填写请参考
创建训练作业
。
表1
创建训练作业的创建方式(使用自定义镜像)
选择训练代码文件所在的OBS目录。如果自定义镜像中不含训练代码则需要配置该参数,如果自定义镜像中已包含训练代码则不需要配置。
需要提前将代码上传至OBS桶中,目录内文件总大小要小于或等于5GB,文件数要小于或等于1000个,文件深度要小于或等于32。
训练代码文件会在训练作业启动的时候被系统自动下载到训练容器的
“${MA_JOB_DIR}/demo-code”
目录中,
“demo-code”
为存放代码目录的最后一级OBS目录。例如,
“代码目录”
选择的是
“/test/code”
,则训练代码文件会被下载到训练容器的
“${MA_JOB_DIR}/code”
目录中。
如果训练启动脚本用的是py文件,例如
“train.py”
,则启动命令如下所示。
python ${MA_JOB_DIR}/demo-code/train.py
如果训练启动脚本用的是sh文件,例如
“main.sh”
,则启动命令如下所示。
bash ${MA_JOB_DIR}/demo-code/main.sh
启动命令支持使用
“;”
和
“&&”
拼接多条命令,命令中的
“demo-code”
为存放代码目录的最后一级OBS目录,以实际情况为准。
本地代码目录
指定训练容器的本地目录,启动训练时系统会将代码目录下载至此目录。
此参数可选,默认本地代码目录为
“/home/ma-user/modelarts/user-job-dir”
。
训练时,系统会自动cd到此目录下执行启动文件。