求助:如何在Azure将神经机器翻译模型Checkpoints部署为端点与微服务
部署微调后的神经机器翻译(NMT)模型到Azure ML端点
一、先整理Checkpoints为可部署格式
微调后的Hugging Face NMT模型checkpoints包含多文件,但无需额外合并,直接通过transformers库即可加载。如果需要统一管理,可执行以下代码将其保存为标准部署格式:
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer # 从checkpoints文件夹加载模型和tokenizer model = AutoModelForSeq2SeqLM.from_pretrained("./your-checkpoint-folder") tokenizer = AutoTokenizer.from_pretrained("./your-checkpoint-folder") # 保存为统一的可部署模型文件夹(可选步骤) model.save_pretrained("./deployable-nmt-model") tokenizer.save_pretrained("./deployable-nmt-model")
二、编写评分脚本(score.py)
这是Azure ML处理请求的核心脚本,必须包含init()(加载模型)和run()(处理预测)两个函数:
import json import torch from transformers import AutoModelForSeq2SeqLM, AutoTokenizer model = None tokenizer = None def init(): global model, tokenizer # Azure ML默认的模型挂载路径:./azureml-models/模型名/版本号 model_path = "./azureml-models/your-nmt-model/1" model = AutoModelForSeq2SeqLM.from_pretrained(model_path) tokenizer = AutoTokenizer.from_pretrained(model_path) # 若使用GPU实例,添加:model.to("cuda") def run(raw_data): try: data = json.loads(raw_data)["input"] inputs = tokenizer(data, return_tensors="pt", padding=True, truncation=True) # 若使用GPU,添加:inputs = {k: v.to("cuda") for k, v in inputs.items()} outputs = model.generate(**inputs, max_length=128) translations = tokenizer.batch_decode(outputs, skip_special_tokens=True) return json.dumps({"translations": translations}) except Exception as e: return json.dumps({"error": str(e)})
三、配置环境依赖(conda.yml)
创建conda环境文件,指定模型运行所需的依赖包:
name: nmt-env channels: - conda-forge dependencies: - python=3.8 - pip: - torch==2.0.1 - transformers==4.30.2 - azureml-defaults
四、Azure ML部署实操步骤
1. 注册模型
通过Azure CLI将模型文件夹注册到工作区:
az ml model register --name your-nmt-model --path ./deployable-nmt-model --resource-group your-rg --workspace-name your-ws
2. 创建在线端点
az ml online-endpoint create --name nmt-endpoint --resource-group your-rg --workspace-name your-ws
3. 编写部署配置(deployment.yml)
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: nmt-deployment endpoint_name: nmt-endpoint model: azureml:your-nmt-model:1 environment: conda_file: conda.yml image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest code_configuration: code: ./ # 指向包含score.py的文件夹路径 scoring_script: score.py instance_type: Standard_DS3_v2 # 模型较大时可换GPU实例如Standard_NC6 instance_count: 1
4. 部署模型到端点
az ml online-deployment create --file deployment.yml --resource-group your-rg --workspace-name your-ws --all-traffic
五、测试端点
通过curl调用端点验证部署:
curl -X POST https://nmt-endpoint.your-region.inference.ml.azure.com/score \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(az ml online-endpoint get-credentials --name nmt-endpoint --resource-group your-rg --workspace-name your-ws --query primaryKey -o tsv)" \ -d '{"input": ["Hello world", "This is a test sentence"]}'
关键注意事项
- GPU加速:若使用GPU实例,需在score.py中添加模型和张量移至CUDA的代码,同时安装对应CUDA版本的PyTorch。
- Checkpoints兼容性:确保checkpoints文件夹包含
config.json、pytorch_model.bin(或分片文件)、tokenizer相关文件,from_pretrained会自动处理分片模型。 - 实例选型:根据模型大小选择合适的计算实例,避免因资源不足导致部署失败。
内容的提问来源于stack exchange,提问作者Sakayo Toadoum Sari VII
相关产品推荐
相关产品推荐

