您可以通過Function Compute控制台來體驗GPU執行個體的最佳實務。本文以Python語言為例,說明如何通過控制台將原始視頻經過函數代碼的轉碼處理,從.mp4轉換為.flv格式。
應用情境和優勢
隨著越來越多的強互動應用情境的出現,例如社交直播、線上課堂以及遠程醫學等,互連網流量正在向即時、准即時的趨勢演化。視頻平台通常要將原始視頻內容根據碼率、解析度、渠道貼片、播放平台等維度,以1∶N的方式轉碼輸出多種分發視頻格式,以服務不同網路品質、各種播放平台的觀看者。視頻轉碼是視頻生產分發中的關鍵一環,理想的視頻轉碼解決方案需要在成本(人民幣/流)和功率效率(瓦/流)方面具有成本效益。
在不同的應用情境下,Function Compute提供的GPU執行個體與CPU相比所具備的優勢如下。
即時、准即時的應用情境
提供數倍於CPU的轉碼效率,從而快速將生產內容推向終端使用者。
成本優先的GPU應用情境
提供彈性預留模式,從而按需為您保留工作GPU執行個體,對比自購VM擁有較大成本優勢。
效率優先的GPU應用情境
屏蔽營運GPU叢集的繁重負擔(驅動/CUDA版本管理、機器運行管理、GPU壞卡管理),使得開發人員專註於代碼開發、聚焦營運目標的達成。
GPU執行個體的更多資訊,請參見執行個體類型及使用模式。
效能對比
Function ComputeGPU執行個體基於的Turing架構支援以下編碼和解碼格式:
編碼格式
H.264 (AVCHD) YUV 4:2:0
H.264 (AVCHD) YUV 4:4:4
H.264 (AVCHD) Lossless
H.265 (HEVC) 4K YUV 4:2:0
H.265 (HEVC) 4K YUV 4:4:4
H.265 (HEVC) 4K Lossless
H.265 (HEVC) 8k
HEVC10-bitsupport
HEVCB Framesupport
解碼格式
MPEG-1
MPEG-2
VC-1
VP8
VP9
H.264 (AVCHD)
H.265 (HEVC) 4:2:0
*H.265 (HEVC) 4:4:4
8 bit
10 bit
12 bit
8 bit
10 bit
12 bit
8 bit
10 bit
12 bit
原始視頻資訊如下表所示。
視頻資訊 | 資料 |
時間長度 | 2分05秒 |
碼率 | 4085 Kb/s |
視頻流資訊 | h264 (High), yuv420p (progressive), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 50 tbc |
音視頻資訊 | aac (LC), 44100 Hz, stereo, fltp |
CPU和GPU的測試機器指標如下表所示。
對比項 | CPU機型 | GPU機型 |
CPU | CPU Xeon® Platinum 8163 4C | CPU Xeon® Platinum 8163 4C |
RAM | 16 GB | 16 GB |
GPU | N/A | T4 |
FFmpeg | git-2020-08-12-1201687 | git-2020-08-12-1201687 |
視頻轉碼(1∶1)
效能測試:1路輸入、1路輸出
解析度 | CPU轉碼耗時 | GPU轉碼耗時 |
H264∶1920x1080 (1080p) (Full HD) | 3分19.331秒 | 0分9.399秒 |
H264∶1280x720 (720p) (Half HD) | 2分3.708秒 | 0分5.791秒 |
H264∶640x480 (480p) | 1分1.018秒 | 0分5.753秒 |
H264∶480x360 (360p) | 44.376秒 | 0分5.749秒 |
視頻轉碼(1∶N)
效能測試:1路輸入、3路輸出
解析度 | CPU轉碼耗時 | GPU轉碼耗時 |
H264∶1920x1080 (1080p) (Full HD) | 5分58.696秒 | 0分45.268秒 |
H264∶1280x720 (720p) (Half HD) | ||
H264∶640x480 (480p) |
轉碼命令
CPU轉碼命令
單路轉碼(1∶1)
docker run --rm -it --volume $PWD:/workspace --runtime=nvidia willprice/nvidia-ffmpeg -y -i input.mp4 -c:v h264 -vf scale=1920:1080 -b:v 5M output.mp4
多路轉碼(1∶N)
docker run --rm -it --volume $PWD:/workspace --runtime=nvidia willprice/nvidia-ffmpeg \ -y -i input.mp4 \ -c:a copy -c:v h264 -vf scale=1920:1080 -b:v 5M output_1080.mp4 \ -c:a copy -c:v h264 -vf scale=1280:720 -b:v 5M output_720.mp4 \ -c:a copy -c:v h264 -vf scale=640:480 -b:v 5M output_480.mp4
表 1. 參數說明 參數
說明
-c:a copy
無需任何重新編碼即可複製音頻流。
-c:v h264
為輸出資料流選擇軟體H.264編碼器。
-b:v 5M
將輸出位元速率設定為5 Mb/s。
GPU轉碼命令
單路轉碼(1∶1)
docker run --rm -it --volume $PWD:/workspace --runtime=nvidia willprice/nvidia-ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -c:v h264_nvenc -vf scale_cuda=1920:1080:1:4 -b:v 5M output.mp4
多路轉碼(1∶N)
docker run --rm -it --volume $PWD:/workspace --runtime=nvidia willprice/nvidia-ffmpeg \ -y -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \ -c:a copy -c:v h264_nvenc -vf scale_npp=1920:1080 -b:v 5M output_1080.mp4 \ -c:a copy -c:v h264_nvenc -vf scale_npp=1280:720 -b:v 5M output_720.mp4 \ -c:a copy -c:v h264_nvenc -vf scale_npp=640:480 -b:v 5M output_480.mp4
表 2. 參數說明 參數
說明
-hwaccel cuda
選擇合適的硬體加速器。
-hwaccel_output_format cuda
將解碼的幀儲存在GPU記憶體中。
-c:v h264_nvenc
選擇NVIDIA硬體加速H.264編碼器。
準備工作
GPU執行個體僅支援通過容器鏡像方式部署。
在GPU執行個體所在地區,完成以下操作:
建立Container Registry的企業版執行個體或個人版執行個體,推薦您建立企業版執行個體。具體操作步驟,請參見建立企業版執行個體。
建立命名空間鏡像倉庫。具體操作步驟,請參見步驟二:建立命名空間和步驟三:建立鏡像倉庫。
將需處理的音視頻資源上傳至在GPU執行個體所在地區的OSS Bucket中,且您對該Bucket中的檔案有讀寫權限。具體步驟,請參見控制台上傳檔案。許可權相關說明,請參見修改儲存空間讀寫權限。
通過Function Compute控制台部署GPU應用
部署鏡像。
建Container Registry的企業版執行個體或個人版執行個體。
推薦您建立企業版執行個體。具體操作步驟,請參見建立企業版執行個體。
建立命名空間和鏡像倉庫。
具體操作步驟,請參見步驟二:建立命名空間和步驟三:建立鏡像倉庫。
在Container Registry控制台,根據介面提示完成Docker相關操作步驟。然後將上述樣本app.py和Dockerfile推送至執行個體鏡像倉庫,檔案資訊,請參見通過ServerlessDevs部署GPU應用時/code目錄中的app.py和Dockerfile。
建立GPU函數。具體操作步驟,請參見建立Custom Container函數。
修改函數的執行逾時時間。
在目標函數的配置頁簽,在左側導覽列,選擇運行時,然後單擊運行時右側的編輯。
在運行時面板,修改執行逾時時間,然後單擊確定。
說明CPU轉碼耗時會超過預設的60s,因此建議您修改執行逾時時間為較大的值。
配置GPU預留執行個體。關於配置預留執行個體的具體操作,請參見配置預留執行個體。
配置完成後,您可以在規則列表查看預留的GPU執行個體是否就緒。即當前預留執行個體數是否為設定的預留執行個體數。
使用cURL測試函數。
在函數詳情頁面,單擊觸發器管理頁簽,查看觸發器的配置資訊,擷取觸發器的訪問地址。
在命令列執行如下命令,調用GPU函數。
查看線上函數版本
curl -v "https://tgpu-ff-console-tgpu-ff-console-ajezot****.cn-shenzhen.fcapp.run" {"function": "trans_gpu"}
使用CPU進行轉碼
curl "https://tgpu-ff-console-tgpu-ff-console-ajezot****.cn-shenzhen.fcapp.run" -H 'TRANS-MODE: cpu' {"result": "ok", "upload_time": 8.75510573387146, "download_time": 4.910430669784546, "trans_time": 105.37688875198364}
使用GPU進行轉碼
curl "https://tgpu-ff-console-tgpu-ff-console-ajezotchpx.cn-shenzhen.fcapp.run" -H 'TRANS-MODE: gpu' {"result": "ok", "upload_time": 8.313958644866943, "download_time": 5.096682548522949, "trans_time": 8.72346019744873}
執行結果
您可通過在瀏覽器中訪問以下網域名稱,查看轉碼後的視頻:
https://cri-zbtsehbrr8******-registry.oss-cn-shenzhen.aliyuncs.com/output.flv
本網域名稱僅為樣本,需以實際情況為準。