以非root用户运行SageMaker ProcessingJob并写入相关文件夹的方法
SageMaker ProcessingJob非root用户写入权限解决方案
方案1:通过启动脚本动态修改权限
SageMaker会在容器启动后挂载/opt/ml/processing目录,因此可以编写一个入口脚本,先以root身份修改目录权限,再切换到nonroot用户执行任务:
- 创建
entrypoint.sh脚本:
#!/bin/bash # 递归修改目录所属用户组为nonroot chown -R nonroot:nonroot /opt/ml/processing # 切换到nonroot用户执行处理脚本 su nonroot -c "python your_processing_script.py"
- 在Dockerfile中配置该脚本为入口,并赋予执行权限:
COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh # 以root身份启动入口脚本,确保有权限修改目录 USER root ENTRYPOINT ["/entrypoint.sh"]
方案2:预创建目录并设置权限
在Dockerfile中提前创建/opt/ml/processing及其子目录,并将权限赋予nonroot用户,部分场景下可解决挂载后权限被覆盖的问题:
# 创建SageMaker所需的目录结构 RUN mkdir -p /opt/ml/processing/data /opt/ml/processing/output # 修改目录权限给nonroot用户 RUN chown -R nonroot:nonroot /opt/ml/processing # 切换到nonroot用户 USER nonroot
方案3:利用EC2实例的卷配置(可选)
如果ProcessingJob使用托管EC2实例,可在创建Job时通过volume_configuration配置挂载目录的权限,但该方法不如前两种直接,仅适用于特定场景。
原问题中的权限示例:
2022-11-30T10:20:13.567+01:00 + ls -la /opt/ml/processing 2022-11-30T10:20:13.567+01:00 total 24 2022-11-30T10:20:13.567+01:00 drwxr-xr-x 6 root root 4096 Nov 30 09:20 . 2022-11-30T10:20:13.567+01:00 drwxr-xr-x 5 root root 4096 Nov 30 09:20 .. 2022-11-30T10:20:13.567+01:00 drwxr-xr-x 2 root root 4096 Nov 30 09:20 data 2022-11-30T10:20:13.568+01:00 drwxr-xr-x 2 root root 4096 Nov 30 09:20 output
内容的提问来源于stack exchange,提问作者Michal R.
相关产品推荐
相关产品推荐

