---
# System prepended metadata

title: NVIDIA Container Toolkit 安裝筆記
tags: [Jetson, System Setup, container, Nvidia, nvidia-container, Edge AI]

---

# NVIDIA Container Toolkit 安裝筆記
###### tags:  `Edge AI`　`Nvidia` `Jetson` `System Setup` `container` `nvidia-container`

![](https://i.imgur.com/S5QFcnE.png =800x)
## NVIDIA Jetson 平台佈署相關筆記
### 基本環境設定
- [Jetson AGX Xavier 系統環境設定1_在windows10環境連接與安裝](https://hackmd.io/@YungHuiHsu/HJ2lcU4Rj)
- [Jetson AGX Xavier 系統環境設定2_Docker安裝或從源程式碼編譯](https://hackmd.io/k-lnDTxVQDWo_V13WEnfOg)
 - [NVIDIA Container Toolkit 安裝筆記](https://hackmd.io/wADvyemZRDOeEduJXA9X7g)
- [Jetson 邊緣裝置查詢系統性能指令jtop](https://hackmd.io/VXXV3T5GRIKi6ap8SkR-tg)
- [Jetson Network Setup 網路設定](https://hackmd.io/WiqAB7pLSpm2863N2ISGXQ)
- [OpenCV turns on cuda acceleration in Nvidia Jetson platform<br>OpenCV在Nvidia Jetson平台開啟cuda加速](https://hackmd.io/6IloyiWMQ_qbIpIE_c_1GA)

### 模型佈署與加速
- [[Object Detection_YOLO] YOLOv7 論文筆記](https://hackmd.io/xhLeIsoSToW0jL61QRWDcQ)
- [Deploy YOLOv7 on Nvidia Jetson](https://hackmd.io/kZftj6AgQmWJsbXsswIwEQ)
- [Convert PyTorch model to TensorRT for 3-8x speedup<br>將PyTorch模型轉換為TensorRT，實現3-8倍加速](https://hackmd.io/_oaJhYNqTvyL_h01X1Fdmw?both)
- [Accelerate multi-streaming cameras with DeepStream and deploy custom (YOLO) models<br>使用DeepStream加速多串流攝影機並佈署客製(YOLO)模型](https://hackmd.io/@YungHuiHsu/rJKx-tv4h)
- [Model Quantization Note 模型量化筆記](https://hackmd.io/riYLcrp1RuKHpVI22oEAXA)
---
## NVIDIA Docker安裝
在執行此操作前需要先安裝好NVIDIA Docker
說明與安裝指引見[nvidia-docker](https://github.com/NVIDIA/nvidia-docker)
最主要目的是讓你能在container內啟用GPU

在啟用docker時，用這個指令`--runtime=nvidia`啟用nvidia的 gpu

![](https://i.imgur.com/kRYpDoi.png)
![](https://i.imgur.com/BX7KksP.png)
(source : https://developer.nvidia.com/zh-cn/blog/gpu-containers-runtime/)


服務架構如圖所示
需要先在Linux環境先確認/安裝 NVIDIA driver 然後再安裝Docker engine
- [NVIDIA Driver Installation Quickstart Guide](https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html)
- [NVIDIA CUDA Installation Guide for Linux](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/)


### NVIDIA Container Toolkit [Installation Guide](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker)


### 前提條件
#### NVIDIA Drivers
:::info
由於採用Jetpack整包安裝，CUDA Driver等都已經安裝好了，這部分可略過
:::

在開始之前，請確保你已經為你的Linux發行版安裝了NVIDIA驅動程序。建議使用發行版的軟件包管理器來安裝驅動程序，但也可以使用其他安裝機制（例如，從NVIDIA驅動程序下載中心下載.run安裝程序）。

有關使用軟件包管理器從官方CUDA網絡倉庫安裝驅動程序的說明，請按照本指南中的步驟進行。

#### Platform Requirements
運行NVIDIA Container Toolkit的先決條件列表如下。

* GNU/Linux x86_64，內核版本>3.10
* Docker >= 19.03（推薦使用，但某些發行版可能包含舊版的Docker。最低支持版本為1.12)
* 架構>=  Kepler (or compute capability 3.0)

* NVIDIA Linux 驅動程序 >= 418.81.07 (請注意，舊版驅動程序或分支不受支持
:::warning
驅動版本可能會限制你的CUDA能力。較新的英偉達驅動程序可以向後兼容CUDA工具包版本，但每個新版本的CUDA都需要一個最低的驅動程序版本。運行一個CUDA容器需要一台至少有一個CUDA功能的GPU的機器，以及與你所使用的CUDA工具包版本兼容的驅動程序。運行CUDA容器的機器只需要NVIDIA驅動程序，不需要安裝CUDA工具包。CUDA發行說明中包含了一個最小驅動程序和CUDA工具包版本的表格。
:::

### Container Device Interface (CDI) Support
從V1.12.0版本開始，NVIDIA Container Toolkit支持生成容器設備接口<https://github.com/container-orchestrated-devices/container-device-interface>_（CDI），以便與支持CDI的容器引擎和CLI一起使用。 

詳見Container Device Interface (CDI) Suppor 一節

ps: 我在安裝時跳過CDI設定，因為後面操作是直接使用原始碼進行編譯，暫時未使用到docker，所以還沒看到問題出現

### Docker安裝
以下步驟可用於在Ubuntu LTS（18.04、20.04和22.04）和Debian（Stretch、Buster）發行版上設置NVIDIA Container Toolkit。
#### Setting up Docker

Ubuntu上的Docker-CE可以使用Docker的官方便利腳本進行設置。

```
curl https://get.docker.com | sh \
  && sudo systemctl --now enable docker
```

:::info
Follow the official [instructions](https://docs.docker.com/engine/install/ubuntu/) for more details and [post-install actions](https://docs.docker.com/engine/install/linux-postinstall/).
:::

 
#### Setting up NVIDIA Container Toolkit 
Setup the package repository and the GPG key:
```
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.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
```

在更新軟件包列表後，安裝 nvidia-container-toolkit 包（以及依賴項）。
```
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
```

配置Docker守護程序，使其能夠識別NVIDIA Container Runtime
```
sudo nvidia-ctk runtime configure --runtime=docker
```

完成設定後重啟Docker常駐程式
```
sudo systemctl restart docker
```


測試基本的CUDA container是否運作順利
```
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
```

:::warning
如果使用的機器是Jetson的話，並沒有nvidia-smi指令可以使用，引此要改安裝jetson-stats 以jtop檢視系統運作狀態。 詳見[Jetson 邊緣裝置查詢系統性能指令jtop](https://hackmd.io/@YungHuiHsu/H1kx5WdJn)
:::