You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AzureML中使用已有model.pth与cfg.yaml部署Detectron2模型

问题解决方案

部署错误修复步骤

  • 先修改cfg.yaml配置,删除硬编码的WEIGHTS字段,或者将该字段值设为空,避免加载配置时自动访问不存在的固定路径。
  • 调整scoring.py的代码结构,按照AzureML的规范将模型初始化逻辑放到init()函数中,加载配置后手动覆盖权重路径,示例代码如下:
import os
import logging
from detectron2.config import get_cfg
from detectron2.engine import DefaultPredictor

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
predictor = None

def init():
    global predictor
    cfg = get_cfg()
    cfg.merge_from_file("cfg.yaml")
    # 手动指定权重路径
    cfg.MODEL.WEIGHTS = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'model.pth')
    # 如果使用CPU部署,添加这行配置,避免GPU环境缺失报错
    cfg.MODEL.DEVICE = "cpu"
    predictor = DefaultPredictor(cfg)
    logger.info("模型加载完成")

def run(raw_data):
    # 原有推理逻辑保持不变即可
    pass
  • 确认模型注册规则:你在AzureML工作区注册模型时,如果是同时上传model.pth和cfg.yaml两个文件作为同一个模型的资产,部署后两个文件都会直接出现在AZUREML_MODEL_DIR对应的目录下;如果上传的是压缩包,需要确认解压后的文件层级,调整路径读取逻辑匹配实际结构。
  • 检查推理环境依赖:确保部署用的环境安装了和训练环境版本一致的Detectron2、PyTorch、opencv-python等依赖包,依赖缺失或版本不兼容也会触发无明确日志的服务启动失败。

AzureML部署服务内部文件结构说明

部署生成的容器内部文件结构规则如下:

  • 所有注册的模型都会挂载到/var/azureml-app/azureml-models/目录下,单模型的完整路径格式为/var/azureml-app/azureml-models/<模型名称>/<模型版本>/<模型文件路径>
  • 环境变量AZUREML_MODEL_DIR默认指向你部署时指定的主模型的根目录,也就是上述路径中的/var/azureml-app/azureml-models/<模型名称>/<模型版本>/
  • 你上传的部署脚本(包括scoring.py、conda依赖配置文件等)会放在/var/azureml-app/目录下,在scoring.py中可以直接用相对路径读取同目录下的配置文件。
  • 如需确认实际路径结构,可以在init()函数中添加日志打印代码,输出对应目录的文件列表,部署后查看服务日志就能获取准确路径信息,示例代码如下:
def init():
    logger.info(f"当前工作目录: {os.getcwd()}")
    logger.info(f"工作目录文件列表: {os.listdir('.')}")
    model_dir = os.getenv('AZUREML_MODEL_DIR')
    logger.info(f"模型目录路径: {model_dir}")
    if model_dir:
        logger.info(f"模型目录下的文件: {os.listdir(model_dir)}")
    # 后续初始化逻辑

内容的提问来源于stack exchange,提问作者Mountassir EL MOUSTAAID

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:27:04