最大限度减少GPU驱动程序升级期间中断的最佳实践 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

最大限度减少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*
535.54.03 ml.p5.*,ml.g6。 *

使用GPU功能对模型容器进行故障排除

如果您在运行GPU工作负载时遇到问题,请参阅以下指南:

从 Docker 容器中运行nvidia-smi(NVIDIA系统管理接口)命令。如果NVIDIA系统管理接口检测到GPU检测错误或NVIDIA初始化错误,它将返回以下错误消息:

Failed to initialize NVML: Driver/library version mismatch

根据您的使用案例,请遵循以下最佳实践来解决故障或错误:

有关更多信息,请参阅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'

根据您的使用案例,请遵循以下最佳实践来解决故障或错误:

使用不匹配驱动程序版本的最佳实践

以下内容提供了有关如何更新GPU驱动程序的信息:

无需采取行动。NVIDIA提供向后兼容性。

如果版本差异较小,则无需执行任何操作。NVIDIA提供次要版本向前兼容性。

如果版本存在重大差异,则需要安装 Comp CUDA ational Package。请参阅NVIDIA文档中的 Comp CUDAation al Package。

重要

CUDA兼容包不向后兼容,因此,如果实例上的驱动程序版本高于CUDA兼容包版本,则需要将其禁用。

确保映像中没有NVIDIA捆绑可能导致与主机NVIDIA驱动程序版本冲突的驱动程序包。

要验证平台 Nvidia 驱动程序版本是否支持模型容器中安装的 Compational Package 版本,请参阅CUDA文档。CUDA如果平台 Nvidia 驱动程序版本不支持CUDA兼容包版本,则可以从模型容器映像中禁用或删除CUDA兼容包。如果最新的 Nvidia 驱动程序版本支持CUDA兼容库版本,我们建议您根据检测到的 Nvidia 驱动程序版本启用CUDA兼容包,以实现将来的兼容性,方法是将以下代码片段添加到容器启动 shell 脚本(脚本中)中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