GPU實(shí)例FAQ
本文介紹使用GPU實(shí)例過(guò)程中可能遇到的問(wèn)題,并提供對(duì)應(yīng)的解決方案。
函數(shù)計(jì)算GPU實(shí)例的驅(qū)動(dòng)和CUDA版本是什么?
GPU實(shí)例涉及的組件版本主要分為以下兩個(gè)部分:
驅(qū)動(dòng)版本:包含內(nèi)核態(tài)驅(qū)動(dòng)
nvidia.ko
、CUDA用戶態(tài)驅(qū)動(dòng)libcuda.so
等。函數(shù)計(jì)算GPU實(shí)例所使用的驅(qū)動(dòng)由NVIDIA提供,由函數(shù)計(jì)算平臺(tái)負(fù)責(zé)部署。隨著功能迭代、新卡型推出、BUG修復(fù)、驅(qū)動(dòng)生命周期到期等原因,GPU實(shí)例所使用的驅(qū)動(dòng)版本未來(lái)可能變化,請(qǐng)避免在容器鏡像中添加驅(qū)動(dòng)特定相關(guān)內(nèi)容,更多內(nèi)容,請(qǐng)參見鏡像使用說(shuō)明。CUDA Toolkit版本:包含CUDA Runtime、cuDNN、cuFFT等。CUDA Toolkit版本由您在構(gòu)建容器鏡像時(shí)決定。
GPU驅(qū)動(dòng)和CUDA Toolkit由NVIDIA發(fā)布,兩者有一定的對(duì)應(yīng)關(guān)系,細(xì)節(jié)信息請(qǐng)參見對(duì)應(yīng)版本的CUDA Toolkit Release Notes。
函數(shù)計(jì)算GPU目前使用的驅(qū)動(dòng)版本為550.54.15,其對(duì)應(yīng)的CUDA用戶態(tài)驅(qū)動(dòng)版本為12.4。為了最佳的兼容性支持,建議您使用的CUDA Toolkit最低版本為11.8,最高不超過(guò)平臺(tái)提供的CUDA用戶態(tài)驅(qū)動(dòng)版本。
執(zhí)行時(shí)遇到CUFFT_INTERNAL_ERROR怎么辦?
目前已知CUDA 11.7中的cuFFT庫(kù)存在前向兼容性問(wèn)題,在較新的卡型中可能遇到上述錯(cuò)誤,建議至少升級(jí)至CUDA 11.8版本。關(guān)于GPU卡型介紹,請(qǐng)參見實(shí)例規(guī)格。
以PyTorch為例,升級(jí)后,可以用以下代碼片段來(lái)驗(yàn)證,無(wú)報(bào)錯(cuò)說(shuō)明升級(jí)有效。
import torch
out = torch.fft.rfft(torch.randn(1000).cuda())
構(gòu)建鏡像時(shí)報(bào)錯(cuò)CUDA GPG Error如何解決?
構(gòu)建鏡像時(shí)報(bào)錯(cuò)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.
此時(shí),您可以在Dockerfile文件的RUN rm
命令行后面增加如下腳本,然后重新構(gòu)建鏡像。
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A4B469963BF863CC
為什么我的GPU實(shí)例規(guī)格顯示的是g1?
實(shí)例規(guī)格設(shè)置為g1等同于設(shè)置為fc.gpu.tesla.1。更多信息,請(qǐng)參見實(shí)例規(guī)格。
為什么我的預(yù)留GPU實(shí)例預(yù)留不成功?
預(yù)留實(shí)例失敗可能有以下原因:
預(yù)留實(shí)例啟動(dòng)超時(shí)
錯(cuò)誤碼:"FunctionNotStarted"
錯(cuò)誤信息:"Function instance health check failed on port XXX in 120 seconds"
解決方案:檢查應(yīng)用啟動(dòng)邏輯,是否存在公網(wǎng)模型下載、10 GB以上大模型加載邏輯。建議優(yōu)先完成Web Server啟動(dòng),再執(zhí)行模型加載邏輯。
已達(dá)到函數(shù)或地域級(jí)別的實(shí)例數(shù)量上限
GPU鏡像大小限制是多少?
鏡像大小限制是針對(duì)壓縮后的鏡像,非壓縮前的鏡像。您可以在阿里云容器鏡像服務(wù)控制臺(tái)查看壓縮后鏡像尺寸,也可以在本地執(zhí)行命令docker images
查詢壓縮前鏡像尺寸。
通常情況下,壓縮前尺寸小于20 GB的鏡像可以正常部署到函數(shù)計(jì)算并使用。
GPU鏡像加速轉(zhuǎn)換失敗怎么辦?
隨著您的鏡像尺寸增長(zhǎng),鏡像加速轉(zhuǎn)換耗時(shí)會(huì)同步的增長(zhǎng),可能會(huì)因?yàn)槌瑫r(shí)導(dǎo)致鏡像加速轉(zhuǎn)換失敗。您可以通過(guò)在函數(shù)計(jì)算控制臺(tái)編輯和保存函數(shù)配置的方式(無(wú)需實(shí)際調(diào)整參數(shù)),重新觸發(fā)加速鏡像的轉(zhuǎn)換。
模型應(yīng)該打在鏡像里,還是與鏡像分離?
如果您的模型文件較大、迭代頻繁或隨鏡像發(fā)布時(shí)超過(guò)平臺(tái)鏡像大小限制,建議模型與鏡像分離。如果模型尺寸較小,例如百兆字節(jié)左右,變更也不頻繁,可以考慮模型文件隨鏡像分發(fā)。關(guān)于平臺(tái)鏡像大小限制,請(qǐng)參見GPU鏡像大小限制是多少?。
如果選擇模型與鏡像分離的部署方式,可以將模型存儲(chǔ)在NAS文件系統(tǒng)或OSS文件系統(tǒng),應(yīng)用啟動(dòng)時(shí)從掛載點(diǎn)加載模型。具體操作,請(qǐng)參見配置NAS文件系統(tǒng)和配置OSS對(duì)象存儲(chǔ)。
建議優(yōu)先將模型存儲(chǔ)到NAS文件系統(tǒng),并選擇通用型NAS的性能型,一方面NAS對(duì)POSIX文件系統(tǒng)接口的兼容性較完善,另一方面通用型NAS的性能型相對(duì)較高的初始讀帶寬有利于降低加載模型的耗時(shí)。更多信息,請(qǐng)參見通用型NAS。
也可以將模型存儲(chǔ)到OSS Bucket中,您可以使用OSS加速器獲得更低的延遲和更高的吞吐能力。需要注意的是,OSS掛載的原理是工作在用戶態(tài),占用函數(shù)實(shí)例的內(nèi)存和臨時(shí)存儲(chǔ)空間,建議在較大規(guī)格的GPU實(shí)例下使用。
如何做模型預(yù)熱,有沒(méi)有最佳實(shí)踐?
建議在/initialize
方法中進(jìn)行模型預(yù)熱,僅當(dāng)/initialize
方法完成后,模型才會(huì)真正接入生產(chǎn)流量。更多信息,請(qǐng)參見以下文檔:
GPU鏡像啟動(dòng)報(bào)錯(cuò):[FunctionNotStarted] Function Instance health check failed on port xxx in 120 seconds.
問(wèn)題原因:AI/GPU應(yīng)用啟動(dòng)耗時(shí)過(guò)長(zhǎng),導(dǎo)致函數(shù)計(jì)算FC平臺(tái)健康檢查失敗。其中導(dǎo)致AI/GPU應(yīng)用啟動(dòng)耗時(shí)過(guò)長(zhǎng)的常見原因是加載模型耗時(shí)過(guò)長(zhǎng),導(dǎo)致WebServer啟動(dòng)超時(shí)。
解決方案:
不要在應(yīng)用啟動(dòng)時(shí)從公網(wǎng)動(dòng)態(tài)加載模型,建議將模型放置在鏡像中,或者文件存儲(chǔ)NAS中,就近加載模型。
將模型初始化放置在
/initialize
方法中,優(yōu)先完成應(yīng)用啟動(dòng)。即WebServer啟動(dòng)后,再加載模型。說(shuō)明關(guān)于函數(shù)實(shí)例生命周期的詳細(xì)信息,請(qǐng)參見配置實(shí)例生命周期。
我的函數(shù)端到端延遲較大,并且波動(dòng)很大,需要怎么處理?
首先需要確認(rèn)環(huán)境信息中鏡像加速準(zhǔn)備狀態(tài)為可用。
確認(rèn)NAS文件系統(tǒng)的類型。如果您的函數(shù)需要從NAS文件系統(tǒng)中讀取數(shù)據(jù),如讀取模型,為了保證性能,強(qiáng)烈建議使用通用型NAS的性能型,不推薦使用容量型。更多信息,請(qǐng)參見通用型NAS。
無(wú)法找到NVIDIA驅(qū)動(dòng)程序怎么辦?
通過(guò)docker run --gpus all
命令指定容器,并使用docker commit
方式構(gòu)建應(yīng)用鏡像時(shí),構(gòu)建的鏡像會(huì)攜帶本地NVIDIA驅(qū)動(dòng)程序信息,這將導(dǎo)致鏡像部署到函數(shù)計(jì)算后驅(qū)動(dòng)程序無(wú)法正常掛載。此時(shí),系統(tǒng)無(wú)法找到NVIDIA驅(qū)動(dòng)程序。
為了解決以上問(wèn)題,函數(shù)計(jì)算建議您使用Dockerfile的方式構(gòu)建應(yīng)用鏡像。更多信息,請(qǐng)參見dockerfile。
請(qǐng)您避免在容器鏡像中添加特定驅(qū)動(dòng)版本相關(guān)的內(nèi)容,更多信息,請(qǐng)參見鏡像使用說(shuō)明。
使用Ada系列卡型,報(bào)錯(cuò)On-demand invocation of current GPU type is disabled...如何處理?
遇到報(bào)錯(cuò)ResourceExhausted:On-demand invocation of current GPU type is disabled, please provision instances instead通常是由于實(shí)際請(qǐng)求數(shù)超過(guò)函數(shù)當(dāng)前預(yù)留實(shí)例可以承載的最大請(qǐng)求數(shù)量,由于Ada卡型僅支持預(yù)留模式,建議您根據(jù)實(shí)際請(qǐng)求數(shù)增加函數(shù)預(yù)留實(shí)例個(gè)數(shù)。
使用閑置GPU實(shí)例有哪些注意事項(xiàng)?
CUDA版本
推薦使用CUDA 12.2以及更早的版本。
鏡像權(quán)限
推薦在容器鏡像中以默認(rèn)的root用戶權(quán)限運(yùn)行。
實(shí)例登錄
閑置GPU實(shí)例中,由于GPU凍結(jié)等原因,暫不支持登錄實(shí)例。
模型預(yù)熱/預(yù)推理
閑置GPU實(shí)例中,為保證實(shí)例的首次喚醒延遲符合預(yù)期,建議您在業(yè)務(wù)代碼中使用
initialize
生命周期回調(diào)功能來(lái)進(jìn)行模型預(yù)熱/預(yù)推理,詳情請(qǐng)參見模型服務(wù)預(yù)熱。預(yù)留配置
切換閑置模式開關(guān)時(shí)會(huì)使該函數(shù)現(xiàn)有的GPU預(yù)留實(shí)例優(yōu)雅下線,預(yù)留實(shí)例數(shù)短暫歸零,直到新的預(yù)留實(shí)例出現(xiàn)。