本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
最大限度减少GPU驱动程序升级期间中断的最佳实践
SageMaker 随着时间的推移,模型部署会升级 ML 实例上的 “实时”、“批处理” 和 “异步推理” 选项的GPU驱动程序,让客户可以从驱动程序提供商那里获得改进。您可以在下面看到每个推理选项支持的GPU版本。不同的驱动程序版本可能会改变您的模型与的交互方式。GPUs以下这些策略可帮助您了解应用程序在不同驱动程序版本下是如何工作的。
当前版本和支持的实例系列
Amazon SageMaker Inference 支持以下驱动程序和实例系列:
服务 | GPU | 驱动程序版本 | 实例类型 |
---|---|---|---|
实时 | NVIDIA | 470.57.02 | ml.p2.*,ml.p3.*,ml.p4d.*,ml.p4de.*,ml.g4dn.*,ml.g5.* |
535.54.03 | ml.p5.*,ml.g6。 * | ||
批处理 | NVIDIA | 470.57.02 | ml.p2.*,ml.p3.*,ml.p4d.*,ml.p4de.*,ml.g4dn.*,ml.g5* |
异步推理 | NVIDIA | 470.57.02 | ml.p2.*,ml.p3.*,ml.p4d.*,ml.p4de.*,ml.g4dn.*,ml.g5* |
535.54.03 | ml.p5.*,ml.g6。 * |
使用GPU功能对模型容器进行故障排除
如果您在运行GPU工作负载时遇到问题,请参阅以下指南:
从 Docker 容器中运行nvidia-smi
(NVIDIA系统管理接口)命令。如果NVIDIA系统管理接口检测到GPU检测错误或NVIDIA初始化错误,它将返回以下错误消息:
Failed to initialize NVML: Driver/library version mismatch
根据您的使用案例,请遵循以下最佳实践来解决故障或错误:
按照如果你自带 (BYO) 模型容器下拉列表中描述的最佳实践建议进行操作。
按照如果你使用CUDA兼容层下拉列表中描述的最佳实践建议进行操作。
有关更多信息,请参阅NVIDIA网站上的NVIDIA系统管理界面页面
如果您的GPU实例使用的NVIDIA驱动程序版本与 Docker 容器中的CUDA版本不兼容,则部署终端节点将失败并显示以下错误消息:
Failure reason CannotStartContainerError. Please ensure the model container for variant <variant_name> starts correctly when invoked with 'docker run <image> serve'
根据您的使用案例,请遵循以下最佳实践来解决故障或错误:
按照我的容器所依赖的驱动程序大于 ML GPU 实例上的版本下拉列表中描述的最佳实践建议进行操作。
按照如果你使用CUDA兼容层下拉列表中描述的最佳实践建议进行操作。
使用不匹配驱动程序版本的最佳实践
以下内容提供了有关如何更新GPU驱动程序的信息:
无需采取行动。NVIDIA提供向后兼容性。
如果版本差异较小,则无需执行任何操作。NVIDIA提供次要版本向前兼容性。
如果版本存在重大差异,则需要安装 Comp CUDA ational Package。请参阅NVIDIA文档中的 Comp CUDAation
重要
CUDA兼容包不向后兼容,因此,如果实例上的驱动程序版本高于CUDA兼容包版本,则需要将其禁用。
确保映像中没有NVIDIA捆绑可能导致与主机NVIDIA驱动程序版本冲突的驱动程序包。
要验证平台 Nvidia 驱动程序版本是否支持模型容器中安装的 Compational Package 版本,请参阅CUDA文档ENTRYPOINT
。
该脚本演示了如何根据模型CUDA容器已部署的主机上检测到的 Nvidia 驱动程序版本动态切换 Compatibility Package 的使用。在 SageMaker 发布较新的 Nvidia 驱动程序版本时,如果新驱动程序原生支持该CUDA应用程序,则可以自动关闭已安装CUDA的 Compational Package。
#!/bin/bash verlte() { [ "$1" = "$2" ] && return 1 || [ "$2" = "`echo -e "$1\n$2" | sort -V | head -n1`" ] } if [ -f /usr/local/cuda/compat/libcuda.so.1 ]; then cat /usr/local/cuda/version.txt CUDA_COMPAT_MAX_DRIVER_VERSION=$(readlink /usr/local/cuda/compat/libcuda.so.1 |cut -d'.' -f 3-) echo "CUDA compat package requires Nvidia driver ⩽${CUDA_COMPAT_MAX_DRIVER_VERSION}" NVIDIA_DRIVER_VERSION=$(sed -n 's/^NVRM.*Kernel Module *\([0-9.]*\).*$/\1/p' /proc/driver/nvidia/version 2>/dev/null || true) echo "Current installed Nvidia driver version is ${NVIDIA_DRIVER_VERSION}" if [ $(verlte $CUDA_COMPAT_MAX_DRIVER_VERSION $NVIDIA_DRIVER_VERSION) ]; then echo "Setup CUDA compatibility libs path to LD_LIBRARY_PATH" export LD_LIBRARY_PATH=/usr/local/cuda/compat:$LD_LIBRARY_PATH echo $LD_LIBRARY_PATH else echo "Skip CUDA compat libs setup as newer Nvidia driver is installed" fi else echo "Skip CUDA compat libs setup as package not found" fi