部署预训练PyTorch模型时GPU(CUDA)访问问题求助
问题解决方案:Azure ML部署PyTorch模型CUDA访问失败
核心问题诊断
你遇到的RuntimeError本质是部署时使用了CPU计算实例:这类实例无GPU硬件,也不会预装NVIDIA驱动及CUDA runtime,PyTorch无法检测到CUDA设备,强行将张量/模型加载到CUDA必然触发错误。
针对性解决方案
1. 切换至GPU计算实例部署
Azure ML部署时必须选择带GPU的实例类型(如Standard_NC6、Standard_NV6、Standard_NC12s_v3等),这类实例会自动配置NVIDIA驱动和CUDA环境:
- 若用Azure ML Studio界面部署:在「计算」步骤选择GPU实例SKU
- 若用CLI部署,添加实例类型参数:
az ml model deploy --name your-model-deployment --model your-model:1 --endpoint your-endpoint --instance-type Standard_NC6 --sku GPU
2. 修改score.py实现设备自动适配
不要硬编码CUDA设备,改为自动检测可用硬件,确保脚本兼容CPU/GPU环境:
import torch # 自动检测设备 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") def init(): global model # 加载模型并移至对应设备 model = torch.load("your-model-path.pt") model.to(device) model.eval() def run(raw_data): # 预处理输入并移至设备 input_data = preprocess(raw_data) input_tensor = torch.tensor(input_data).to(device) # 推理 with torch.no_grad(): output = model(input_tensor) # 后处理并返回结果 return postprocess(output)
3. 更新conda.yaml配置,确保PyTorch为CUDA版本
修改依赖配置,指定适配Azure ML GPU环境的PyTorch版本:
name: gpu-env channels: - conda-forge dependencies: - python=3.8 - pip: - torch==2.0.1+cu118 - torchvision==0.15.2+cu118 - azureml-core - azureml-defaults - numpy
4. 若必须使用CPU实例(参考官方要求)
如果因业务限制只能用CPU实例,需强制脚本使用CPU,删除所有CUDA相关代码:
# 强制指定CPU设备 device = torch.device("cpu") # 加载模型时直接映射到CPU model = torch.load("your-model-path.pt", map_location=device) model.eval() # 推理时无需移动张量到CUDA def run(raw_data): input_data = preprocess(raw_data) input_tensor = torch.tensor(input_data) with torch.no_grad(): output = model(input_tensor) return postprocess(output)
验证步骤
部署完成后,调用模型时检查日志:
- 若用GPU实例,日志应显示
CUDA is available: True - 若用CPU实例,日志应显示
CUDA is available: False,且无NVIDIA驱动相关错误
内容的提问来源于stack exchange,提问作者Rishav Raj
相关产品推荐
相关产品推荐

