CUDA、PyTorch本地环境与线上服务Docker的问题

一、环境相关

一般来说,环境最重要,尤其是本地和线上环境的差异。
可能会存在线上显卡算力太高,与本地显卡相关框架不匹配;
比如:线上显卡:NVIDIA A10,算力8.6,则需要CUDA版本:建议CUDA11.4或更高,CUDA11以下(CUDA10)的都会报错

基础镜像选择:选择对应的镜像即可

PyTorch版本选择:https://pytorch.org/get-started/locally/

【其他软件包】

transformers,一般python3.6只支持4.18.0(好像),想用新的特性可能需要更新Python版本

二、模型相关

由于线上服务是实时且持续进行的,需要对显存进行控制。

一般情况下使用

model.to(device)
model.eval()
with torch.no_grad():
    inputs = {k: v.to(device) for k, v in inputs.items()}
    outputs = model(**inputs).logits
    output_softmax = torch.softmax(outputs, -1)[:,1].item()

但显存占用仍然会一直上涨,查询资料了解到是因为后续的计算依旧在cuda上计算,因此需要在模型预测完成后,就将数据全转到cpu。

model.to(device)
model.eval()
with torch.no_grad():
    inputs = {k: v.to(device) for k, v in inputs.items()}
    outputs = model(**inputs).logits.cpu()  # 转到cpu
    output_softmax = torch.softmax(outputs, -1)[:,1].item()

经测试,显卡可以保持占用不变。

【参考】https://www.pudn.com/news/6228c8f89ddf223e1ad09dc5.html

【注意】最好在容器中确认一下调用显卡是否成功,最好测试整个推理过程。因为即使torch.cuda.is_available() == True 也不一定模型正常。

三、可能的报错与解决

1、安装opencv-python时候的错误

【错误】ImportError: libGL.so.1: cannot open shared object file: No such file or directory

【解决】在镜像Dockerfile中加入sudo apt-get install libgl1

2、使用显卡进行运算时候报错

【错误】GeForce *** *** with CUDA capability sm_86 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_61 sm_70 sm_75 compute_37

【解决】使用CUDA11.4或更高版本以及对应的深度学习框架,CUDA11以下(CUDA10)的都会报错

posted @ 2023-01-04 16:12  AlsoRan  阅读(213)  评论(0编辑  收藏  举报