【Docker】在容器中使用 NVIDIA GPU

解決容器 GPU 設備映射問題,實現 AI 應用加速
🔗 官方文檔:NVIDIA Container Toolkit GitHub


常見錯誤排查

若在運行測試容器時遇到以下錯誤:

docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
或
docker: Error response from daemon: unknown or invalid runtime name: nvidia

請按本教程完成 NVIDIA Container Toolkit 的安裝與配置。


一、環境準備

1.1 驗證 NVIDIA 驅動狀態

nvidia-smi

預期輸出(注意右上角顯示的 CUDA 版本):

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15    Driver Version: 550.54.15    CUDA Version: 12.4     |
|-------------------------------+----------------------+----------------------+

問題處理

  • 若命令未找到或提示驅動未安裝,請訪問 NVIDIA 驅動下載中心

  • Ubuntu 快速安裝驅動命令:

    sudo apt install nvidia-driver-550-server
    

二、安裝 NVIDIA Container Toolkit

2.1 添加官方軟件源

# 安裝必要工具
sudo apt-get update
sudo apt-get install -y curl gnupg# 導入 NVIDIA GPG 密鑰
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg# 添加軟件源(適配 Ubuntu 24.04)
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

2.2 安裝 Toolkit 組件

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

📘 官方安裝指南:NVIDIA Container Toolkit Installation Docs


三、配置 Docker 運行時

3.1 生成運行時配置

sudo nvidia-ctk runtime configure --runtime=docker

該命令會自動修改 Docker 配置文件 /etc/docker/daemon.json,添加以下內容:

{"runtimes": {"nvidia": {"path": "nvidia-container-runtime","runtimeArgs": []}}
}

3.2 重啟 Docker 服務

sudo systemctl restart docker

四、功能驗證

4.1 運行 GPU 測試容器

docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

關鍵驗證點

  1. 容器內輸出的 GPU 信息與宿主機 nvidia-smi 一致
  2. 無任何錯誤提示

成功輸出示例

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15    Driver Version: 550.54.15    CUDA Version: 12.4     |
|-------------------------------+----------------------+----------------------+

五、高級配置技巧

5.1 指定 GPU 數量

# 僅使用 2 塊 GPU
docker run --rm --gpus 2 nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi# 按設備序列號指定
docker run --rm --gpus '"device=0,1"' nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

5.2 持久化模式設置

# 啟用持久化模式(防止 GPU 休眠)
sudo nvidia-smi -pm 1

🔧 GPU 管理工具:nvidia-smi 官方文檔


六、使用場景

NVIDIA Container Toolkit 適用于以下典型容器化 AI 應用場景:

  • ? 大模型推理部署:如部署 LLaMA、ChatGLM、BERT 等模型,使用 GPU 顯著提升響應速度與并發處理能力。

  • ? 深度學習訓練任務:如使用 PyTorch、TensorFlow、JAX 等框架在容器中進行分布式訓練,便于復現實驗環境。

  • ? 多模型并行服務:結合 --gpus 參數可以精確分配 GPU 資源,實現在單機多服務并行部署,提升資源利用率。

  • ? 視頻處理與 AI 編解碼:結合 FFmpeg + CUDA / TensorRT 加速視頻轉碼、超分辨率、目標檢測等任務。

  • ? 開發調試環境隔離:避免主機污染、實現多人多項目的 GPU 環境解耦,提升研發效率與可維護性。


七、總結

  • Docker 原生不支持 GPU,需要借助 NVIDIA Container Toolkit 提供的運行時擴展 nvidia-container-runtime 實現 GPU 透傳。

  • 容器運行時可獲得 幾乎無性能損耗的 GPU 使用能力,適用于從研發到生產的多種場景。

  • 配置過程主要包括三步:安裝驅動 → 安裝 Toolkit → 配置 Docker,每一步都可通過 nvidia-smi 驗證效果。

  • 支持靈活的 GPU 指定方式,便于構建資源隔離的 AI 工作負載。

💡 提示:Toolkit 安裝后,docker run --gpus all 成為使用 GPU 容器的標準入口,請確保測試成功后再部署正式任務。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80199.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80199.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80199.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通過Quartus II實現Nios II編程

目錄 一、認識Nios II二、使用Quartus II 18.0Lite搭建Nios II硬件部分三、軟件部分四、運行項目 一、認識Nios II Nios II軟核處理器簡介 Nios II是Altera公司推出的一款32位RISC嵌入式處理器,專門設計用于在FPGA上運行。作為軟核處理器,Nios II可以通…

JAVA設計模式——(三)橋接模式

JAVA設計模式——(三)橋接模式(Bridge Pattern) 介紹理解實現武器抽象類武器實現類涂裝顏色的行為接口具體顏色的行為實現讓行為影響武器修改武器抽象類修改實現類 測試 適用性 介紹 將抽象和實現解耦,使兩者可以獨立…

k8s 證書相關問題

1.重新生成新證書 kubeadm init phase certs apiserver-etcd-client --config ~/kubeadm.yaml這個命令表示生成 kube-apiserver 連接 etcd 使用的證書,生成后如下 -rw------- 1 root root 1.7K Apr 23 16:35 apiserver-etcd-client.key -rw-r--r-- 1 root root 1.2K Apr 23 …

比較:AWS VPC peering與 AWS Transit Gateway

簡述: VPC 對等連接和 Transit Gateway 用于連接多個 VPC。VPC 對等連接提供全網狀架構,而 Transit Gateway 提供中心輻射型架構。Transit Gateway 提供大規模 VPC 連接,并簡化了 VPC 間通信管理,相比 VPC 對等連接,支持大量 VPC 的 VPC 間通信管理。 VPC 對等連接 AWS V…

制造企業PLM深度應用:2025年基于PDCA循環的7項持續改進指標

制造企業的產品生命周期管理(PLM)在數字化轉型的浪潮中扮演著至關重要的角色。PLM深度應用不僅能夠提升產品研發效率、保證產品質量,還能增強企業在市場中的競爭力。隨著2025年智能制造目標的推進,基于PDCA循環的持續改進對于PLM的…

極狐GitLab 的壓縮和合并是什么?

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有: 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 壓縮和合并 (BASIC ALL) 在你處理一個特性分支時,通常會創建一些小的、獨立的提交。這些小提交幫助描述構建特性…

解耦舊系統的利器:Java 中的適配器模式(Adapter Pattern)實戰解析

在現代軟件開發中,我們經常需要與舊系統、第三方庫或不一致接口打交道。這時候,如果能優雅地整合這些不兼容組件,又不破壞原有結構,就需要一位“翻譯官” —— 適配器模式。本文將通過 Java 實例,詳細講解適配器模式的…

03-谷粒商城筆記

一個插件的install和生命周期的報錯是不一樣的 Maven找不到ojdbc6和sqljdbc4依賴包 這時候我找到了jar包,然后我就先找到一個jar安裝到了本地倉庫。 在終端上進行命令了: mvn install:install-file -DfileD:\ojdbc6-11.2.0.4.jar -DgroupIdcom.oracle …

黑馬點評redis改 part 5

達人探店 發布探店筆記 那第一張表block表它里邊的結構呢是這個 首先呢第一個字段是i d,就是主鍵,第二個呢是shop id,就是商戶你發的這個比例啊,它是跟哪個商戶有關系的。第三個呢用戶id就是誰發的這篇筆記,第四個呢標…

【PCB工藝】運放電路中的負反饋機制

通過運算方法器電路設計詳細解釋負反饋機制(Negative Feedback) 負反饋 是控制系統、電子電路、神經系統等多個領域中非常核心的概念。特別在運算放大器(Op-Amp)電路中,負反饋是實現精確控制和高穩定性的關鍵機制。 …

聲紋振動傳感器在電力監測領域的應用

聲紋振動傳感器在電力監測領域有多種應用,主要包括以下幾個方面: 變壓器監測 故障診斷:變壓器在運行過程中會產生特定的聲紋和振動信號,當變壓器內部出現故障,如繞組短路、鐵芯松動、局部放電等,其聲紋和振…

7、sentinel

控制臺訪問地址&#xff1a;http://localhost:8080/ 依賴 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>配置文件 spring:cloud:sentinel:transpo…

線程封裝

目錄 makefile Thread.hpp main.cc 以面向對象的方式造輪子 #ifndef _THREAD_HPP__ // 如果沒有定義過 _THREAD_HPP__ #define _THREAD_HPP__ // 則定義 _THREAD_HPP__// 這里是頭文件的實際內容&#xff08;類、函數聲明等&#xff09;#endif // 結束條件…

【maven-7.1】POM文件中的屬性管理:提升構建靈活性與可維護性

在Maven項目中&#xff0c;POM (Project Object Model) 文件是核心配置文件&#xff0c;而屬性管理則是POM中一個強大但常被低估的特性。良好的屬性管理可以顯著提升項目的可維護性、減少重復配置&#xff0c;并使構建過程更加靈活。本文將深入探討Maven中的屬性管理機制。 1.…

極狐GitLab 的合并請求部件能干什么?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 合并請求部件 (BASIC ALL) 合并請求的 概述 頁面顯示了來自服務的狀態更新&#xff0c;這些服務會對您的合并請求執行操作。…

26、C# 中是否可以繼承String類?為什么?

在 C# 中&#xff0c;不能直接繼承 String 類&#xff08;System.String&#xff09;。這是由于以下幾個原因&#xff1a; 1、String 類是 sealed 的 String 類在 .NET 中被標記為 sealed&#xff0c;這意味著它是一個密封類&#xff0c;不能被繼承。 sealed 關鍵字的作用是防…

deeplab語義分割訓練自定數據集

鏈接&#xff1a;https://pan.baidu.com/s/1KkkM1rLfyiMPtYLycpnxmg?pwdj2rd 提取碼&#xff1a;j2rd --來自百度網盤超級會員V2的分享 采用數據集&#xff1a; https://aistudio.baidu.com/datasetdetail/130647 采用代碼&#xff1a; https://github.com/jfzhang95/pyt…

【Pandas】pandas DataFrame mod

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于執行 DataFrame 與另一個對象&#xff08;如 DataFrame、Series 或標量&#xff09;的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于執行 DataFrame 與另一個對象&…

12、高階組件:魔法增幅器——React 19 HOC模式

一、魔法增幅器的本質 "高階組件是魔法師用咒語疊加的煉金術&#xff0c;"霍格沃茨魔咒研究院院長凝視著發光的增幅器&#xff0c;"通過函數式能量場的嵌套&#xff0c;讓基礎組件獲得預言家日報式的邏輯繼承&#xff01;" ——以神秘事務司的「維度疊加理…

Qt creator 16.0.1 語言家失效解決方法

一、在菜單“工具-->外部”里面沒有語言家、更新翻譯、發布翻譯工具。 二、解決方法 手工添加 1、添加目錄 2、添加工具 更新翻譯 (lupdate) %{CurrentDocument:Project:QT_INSTALL_BINS}\lupdate %{CurrentDocument:Project:FilePath} %{CurrentDocument:Project:Path}…