用于推理的预生成 Docker 映像故障排除
了解如何排查在通过 Azure 机器学习使用用于推理的预生成 Docker 映像时可能出现的问题。
重要
将预生成 Docker 映像的 Python 包可扩展性与 Azure 机器学习配合使用的功能目前以预览版提供。 预览功能按原样提供,不保证支持或服务级别协议。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款。
如果模型部署失败,你将不会在 Azure 机器学习工作室中看到日志,并且 service.get_logs()
将返回 None。
如果 score.py 的 init() 函数存在问题,service.get_logs()
将返回有关此问题的日志。
因此,需要使用下面所示的命令之一在本地运行容器,并将 <MCR-path>
替换为映像路径。 有关映像和路径的列表,请参阅用于推理的预生成 Docker 映像。
转到包含 score.py
的目录,并运行:
docker run -it -v $(pwd):/var/azureml-app -e AZUREML_EXTRA_PYTHON_LIB_PATH="myenv/lib/python3.7/site-packages" <mcr-path>
转到包含 score.py
的目录,并运行:
docker run -it -v $(pwd):/var/azureml-app -e AZUREML_EXTRA_REQUIREMENTS_TXT="requirements.txt" <mcr-path>
在本地推理服务器中可以快速调试入口脚本 (score.py
)。 如果基础评分脚本存在 bug,该服务器将无法初始化或者为模型提供服务。 相反,它会引发异常并指出发生问题的位置。 详细了解 Azure 机器学习推理 HTTP 服务器
对于将模型从 Azure 机器学习部署到 Azure 容器实例 (ACI) 或 Azure Kubernetes 服务 (AKS) 时出现的问题,请参阅排查模型部署问题。
预生成 Docker 映像中的 HTTP 服务器是以非 root 用户身份运行的,它不一定对所有目录都拥有访问权限。
请仅写入到你有权访问的目录。 例如,容器中的 /tmp
目录。
- 检查环境变量或文件名是否存在拼写错误。
- 检查容器日志以查看是否已安装
pip install -r <your_requirements.txt>
。 - 检查是否在推理配置构造函数中正确设置了源目录。
- 如果找不到安装并且日志指出“找不到文件”,请检查日志中显示的文件名是否正确。
- 如果安装已启动但失败或者超时,请尝试在干净的环境中本地安装具有相同 Python 和 pip 版本的同一个
requirements.txt
(即,不指定缓存目录;pip install --no-cache-dir -r requriements.txt
)。 确定是否可以在本地重现该问题。
- 检查环境变量或目录名是否存在拼写错误。
- 环境变量必须设置为
score.py
文件的相对路径。 - 检查是否在推理配置构造函数中正确设置了源目录。
- 该目录需是环境的“site-packages”目录。
- 如果
score.py
仍返回ModuleNotFound
,并且模块应该是在装载的目录中,请尝试输出init()
或run()
中的sys.path
,以查看是否缺少任何路径。
- 如果在安装 apt 包过程中失败,请检查在运行 apt 命令之前是否已将用户设置为 root。 (确保切换回到非 root 用户)
GPU 基础映像不能用于本地部署,除非本地部署位于 Azure 机器学习实例上。 GPU 基础映像仅在 Azure 服务上受支持,例如 Azure 机器学习计算群集和实例、Azure 容器实例 (ACI)、Azure VM 或 Azure Kubernetes 服务 (AKS)。
非 root 用户需是
dockeruser
。 否则,必须将以下目录的所有者设置为运行映像时要使用的用户名:/var/runit /var/log /var/lib/nginx /run /opt/miniconda /var/azureml-app
如果
ENTRYPOINT
在新生成的映像中已更改,则需要通过runsvdir /var/runit
加载 HTTP 服务器和相关组件