用于推理的预生成 Docker 映像故障排除

重要

本文提供有关使用 Azure 机器学习 SDK v1 的信息。 SDK v1 自 2025 年 3 月 31 日起弃用。 对它的支持将于 2026 年 6 月 30 日结束。 可以在该日期之前安装和使用 SDK v1。 使用 SDK v1 的现有工作流将在支持结束日期后继续运行。 但是,在产品发生体系结构更改时,可能会面临安全风险或中断性变更。

建议在 2026 年 6 月 30 日之前过渡到 SDK v2。 有关 SDK v2 的详细信息,请参阅 什么是 Azure 机器学习 CLI 和 Python SDK v2? 以及 SDK v2 参考

了解如何排查在使用预生成的 Docker 映像进行 Azure 机器学习推理时可能遇到的问题。

重要

预生成 Docker 映像的 Python 包可扩展性与 Azure 机器学习配合使用的功能目前以预览版提供。 预览功能以“as-is”形式提供,不保证任何支持或服务级别协议。 有关详细信息,请参阅 Azure 预览版的补充使用条款

模型部署失败

如果模型部署失败, 则 Azure 机器学习工作室 中没有创建日志,并且 service.get_logs() 不返回任何日志。 如果 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>

requirements.txt 扩展性解决方案

转到包含 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) 时出现的问题,请参阅排查模型部署问题

init() 或 run() 无法写入文件

预生成的 Docker 映像中的 HTTP 服务器作为 非根用户运行,它可能无权访问所有目录。 请仅写入到你有权访问的目录。 例如,容器中的 /tmp 目录。

未安装额外的 Python 包

  • 检查环境变量或文件名是否存在拼写错误。
  • 检查容器日志以查看是否已安装 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,并且模块应该是在装载的目录中,请尝试输出 sys.pathinit() 中的 run(),以查看是否缺少任何路径。

基于预生成的 Docker 映像生成映像失败

  • 如果在 apt 包安装过程中失败,请在运行 apt 命令之前检查用户是否已设置为 root? (确保切换回到非 root 用户)

运行不会在 GPU 本地部署上完成

GPU 基础映像不能用于本地部署,除非本地部署位于 Azure 机器学习实例上。 GPU 基础映像仅在 Azure 服务上受支持,例如 Azure 机器学习计算群集和实例、Azure 容器实例 (ACI)、Azure VM 或 Azure Kubernetes 服务 (AKS)。

基于预生成的 Docker 映像生成的映像无法启动

  • 非 root 用户需是 dockeruser。 否则,必须将以下目录的所有者设置为运行映像时要使用的用户名:

    /var/runit
    /var/log
    /var/lib/nginx
    /run
    /opt/miniconda
    /var/azureml-app
    
  • 如果在新的生成映像中更改了ENTRYPOINT,则需要通过runsvdir /var/runit加载HTTP服务器和相关组件。

后续步骤