GPU实例FAQ

本文介绍使用GPU实例过程中可能遇到的问题,并提供对应的解决方案。

函数计算GPU实例的驱动和CUDA版本是什么?

GPU实例涉及的组件版本主要分为以下两个部分:

  • 驱动版本:包含内核态驱动nvidia.ko、CUDA用户态驱动libcuda.so等。函数计算GPU实例所使用的驱动由NVIDIA提供,由函数计算平台负责部署。随着功能迭代、新卡型推出、BUG修复、驱动生命周期到期等原因,GPU实例所使用的驱动版本未来可能变化,请避免在容器镜像中添加驱动特定相关内容,更多内容,请参见镜像使用说明

  • CUDA Toolkit版本:包含CUDA Runtime、cuDNN、cuFFT等。CUDA Toolkit版本由您在构建容器镜像时决定。

GPU驱动和CUDA Toolkit由NVIDIA发布,两者有一定的对应关系,细节信息请参见对应版本的CUDA Toolkit Release Notes

函数计算GPU目前使用的驱动版本为550.54.15,其对应的CUDA用户态驱动版本为12.4。为了最佳的兼容性支持,建议您使用的CUDA Toolkit最低版本为11.8,最高不超过平台提供的CUDA用户态驱动版本。

执行时遇到CUFFT_INTERNAL_ERROR怎么办?

目前已知CUDA 11.7中的cuFFT库存在前向兼容性问题,在Ampere架构之后较新的卡型中可能遇到上述错误,建议至少升级至CUDA 11.8版本。关于GPU卡型介绍,请参见实例规格

以PyTorch为例,升级后,可以用以下代码片段来验证,无报错说明升级有效。

import torch
out = torch.fft.rfft(torch.randn(1000).cuda())

构建镜像时报错CUDA GPG Error如何解决?

构建镜像时报错GPG error,具体信息如下。

W: GPG error: https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu2004/x86_64  InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A4B469963BF863CC
E: The repository 'https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64  InRelease' is not signed.

此时,您可以在Dockerfile文件的RUN rm命令行后面增加如下脚本,然后重新构建镜像。

RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A4B469963BF863CC

为什么我的GPU实例规格显示的是g1?

实例规格设置为g1等同于设置为fc.gpu.tesla.1。更多信息,请参见实例规格

为什么我的预留GPU实例预留不成功?

预留实例失败可能有以下原因:

  • 预留实例启动超时

    • 错误码:"FunctionNotStarted"

    • 错误信息:"Function instance health check failed on port XXX in 120 seconds"

    • 解决方案:检查应用启动逻辑,是否存在公网模型下载、10 GB以上大模型加载逻辑。建议优先完成Web Server启动,再执行模型加载逻辑。

  • 已达到函数或地域级别的实例数量上限

    • 错误码:"ResourceThrottled"

    • 错误信息:"Reserve resource exceeded limit"

    • 解决方案:如您有更高的物理卡需求,请加入钉钉用户群(钉钉群号:64970014484)申请。

GPU镜像大小限制是多少?

镜像大小限制是针对压缩后的镜像,非压缩前的镜像。您可以在阿里云容器镜像服务控制台查看压缩后镜像尺寸,也可以在本地执行命令docker images查询压缩前镜像尺寸。

通常情况下,压缩前尺寸小于20 GB的镜像可以正常部署到函数计算并使用。

GPU镜像加速转换失败怎么办?

随着您的镜像尺寸增长,镜像加速转换耗时会同步的增长,可能会因为超时导致镜像加速转换失败。您可以通过在函数计算控制台编辑和保存函数配置的方式(无需实际调整参数),重新触发加速镜像的转换。

模型应该打在镜像里,还是与镜像分离?

如果您的模型文件较大、迭代频繁或随镜像发布时超过平台镜像大小限制,建议模型与镜像分离。如果模型尺寸较小,例如百兆字节左右,变更也不频繁,可以考虑模型文件随镜像分发。关于平台镜像大小限制,请参见GPU镜像大小限制是多少?

如果选择模型与镜像分离的部署方式,可以将模型存储在NAS文件系统或OSS文件系统,应用启动时从挂载点加载模型。具体操作,请参见配置NAS文件系统配置OSS文件系统

  • 建议优先将模型存储到NAS文件系统,并选择通用型NAS的性能型,一方面NAS对POSIX文件系统接口的兼容性较完善,另一方面通用型NAS的性能型相对较高的初始读带宽有利于降低加载模型的耗时。更多信息,请参见通用型NAS

  • 也可以将模型存储到OSS Bucket中,您可以使用OSS加速器获得更低的延迟和更高的吞吐能力。需要注意的是,OSS挂载的原理是工作在用户态,占用函数实例的内存和临时存储空间,建议在较大规格的GPU实例下使用。

如何做模型预热,有没有最佳实践?

建议在/initialize方法中进行模型预热,仅当/initialize方法完成后,模型才会真正接入生产流量。更多信息,请参见以下文档:

GPU镜像启动报错:[FunctionNotStarted] Function Instance health check failed on port xxx in 120 seconds.

  • 问题原因:AI/GPU应用启动耗时过长,导致函数计算FC平台健康检查失败。其中导致AI/GPU应用启动耗时过长的常见原因是加载模型耗时过长,导致WebServer启动超时。

  • 解决方案:

    • 不要在应用启动时从公网动态加载模型,建议将模型放置在镜像中,或者文件存储NAS中,就近加载模型。

    • 将模型初始化放置在/initialize方法中,优先完成应用启动。即WebServer启动后,再加载模型。

      说明

      关于函数实例生命周期的详细信息,请参见函数实例生命周期

我的函数端到端延迟较大,并且波动很大,需要怎么处理?

  1. 首先需要确认环境信息中镜像加速准备状态为可用。

  2. 确认NAS文件系统的类型。如果您的函数需要从NAS文件系统中读取数据,如读取模型,为了保证性能,强烈建议使用通用型NAS的性能型,不推荐使用容量型。更多信息,请参见通用型NAS

无法找到NVIDIA驱动程序怎么办?

通过docker run --gpus all命令指定容器,并使用docker commit方式构建应用镜像时,构建的镜像会携带本地NVIDIA驱动程序信息,这将导致镜像部署到函数计算后驱动程序无法正常挂载。此时,系统无法找到NVIDIA驱动程序。

为了解决以上问题,函数计算建议您使用Dockerfile的方式构建应用镜像。更多信息,请参见dockerfile

请您避免在容器镜像中添加特定驱动版本相关的内容,更多信息,请参见镜像使用说明

使用Ada系列卡型,报错On-demand invocation of current GPU type is disabled...如何处理?

遇到报错ResourceExhausted:On-demand invocation of current GPU type is disabled, please provision instances instead通常是由于实际请求数超过函数当前预留实例可以承载的最大请求数量,由于Ada卡型仅支持预留模式,建议您根据实际请求数增加函数预留实例个数。