1. 更新最新的Nvidia驱动
# 检查机器驱动建议
ubuntu-drivers devices
# 装12.0驱动
sudo apt install nvidia-driver-525
# 重启
sudo reboot
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.105.17 Driver Version: 525.105.17 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 On | 00000000:00:08.0 Off | 0 |
| N/A 38C P8 9W / 70W | 2MiB / 15360MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
2. Docker的安装官方版本
https://docs.docker.com/engine/install/ubuntu/
Set Up
# 删掉之前的docker
sudo apt-get remove docker docker-engine docker.io containerd runc
# Update the apt package index and install packages to allow apt to use a repository over HTTPS:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
# Add Docker’s official GPG key:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Use the following command to set up the repository:
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Install Docker Engine
# Update the apt package index:
sudo apt-get update
# To install the latest version, run:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Verify that the Docker Engine installation is successful by running the hello-world image.
sudo docker run hello-world
安装nvidia cuda tookit
# 安装nvidia tookit
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
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
# 安装完toolkit要重启
sudo systemctl restart docker
4. 把docker加入User Group(选做)
sudo usermod -aG docker $USER
加入了之后重启了才能使用
sudo reboot
5. 查看docker 挂载路径的目录
docker info | grep 'Docker Root Dir'
Docker Root Dir: /data/docker
我的docker数据的挂载就是在/data/docker下面的
6. 更改挂载的目录(选做)
# 查看路径
docker info | grep 'Docker Root Dir'
# 更改文件
sudo mkdir /data/docker
sudo vim /etc/docker/daemon.json
# 添加
{
"data-root": "/data/docker"
}
# 重启docker
sudo systemctl restart docker
7. 拉取Pytorch训练的镜像
https://catalog.ngc.nvidia.com/containers
全部镜像都是在NVIDIA官方找的
docker run --gpus all -it --name env_pyt_1.12 -v $(pwd):/app nvcr.io/nvidia/pytorch:22.03-py3
8. 拉取TensorRT的镜像
docker run --gpus all -it --name env_trt -v $(pwd):/app nvcr.io/nvidia/tensorrt:22.08-py3
9. 拉取DeepStream的镜像
docker run --gpus all -v `pwd`:/app -p 8556:8554 --name deepstream_env -it nvcr.io/nvidia/deepstream:6.1.1-devel bash
10. 打包镜像上传到DockerHub
登陆自己的账号
docker login --username easonbob
标记自己的镜像
docker tag nvcr.io/nvidia/pytorch:22.03-py3 easonbob/my_torch1-pytorch:22.03-py3
docker tag nvcr.io/nvidia/tensorrt:22.08-py3 easonbob/my_trt-tensorrt:22.08-py3
在这里面22.03和22.08分别是Nvidia容器对于镜像的标签, 在后面自己的仓库中沿用了这个标签,也告诉自己这个就是跟官方一样的容器,一个仓库中可以有很多个镜像,这些镜像用标签来做区分。
推送自己的镜像
docker push easonbob/my_torch1-pytorch:22.03-py3
docker push easonbob/my_trt-tensorrt:22.08-py3
11. 拉取并且运行自己的镜像
拉取自己的pytorch镜像
docker run --gpus all -it --name my_torch -v $(pwd):/app easonbob/my_torch1-pytorch:22.03-py3
拉取自己的TensorRT镜像
docker run --gpus all -it --name my_trt -v $(pwd):/app easonbob/my_trt-tensorrt:22.08-py3
12. pytorch镜像的使用方法(yolov5为例子)
找到conda在哪里
root@46f879adf741:/app/yolo_train/yolov5# whereis conda
conda: /opt/conda/bin/conda
使用conda init
/opt/conda/bin/conda init
克隆yolov5并且安装依赖项
# 克隆地址
git clone https://github.com/ultralytics/yolov5.git
# 进入目录
cd yolov5
# 选择分支,这里使用了特定版本的yolov5,主要是避免出现兼容问题
git checkout a80dd66efe0bc7fe3772f259260d5b7278aab42f
# 安装依赖(如果是docker环境,要进入容器环境后再安装)
pip3 install -r requirements.txt
有的时候opencv怎么装都会出问题,这个时候使用特定版本
pip3 install "opencv-python-headless<4.3"
测试yolov5
python detect.py --source ./data/images/ --weights weights/yolov5s.pt --conf-thres 0.4
13. 更改自己的镜像(以yolov5为例子)
-
提交容器更改:首先,您需要使用 docker commit 命令将更改后的容器提交为新的镜像。将 container-id 替换为您要提交的容器 ID,将 new-image-name 替换为新的镜像名称。
-
标记新的镜像:使用 docker tag 命令为新的镜像添加标签,以便将其推送到 Docker Hub。将 new-image-name 替换为您在上一步中使用的名称,将 your-username 和 your-repo-name 替换为您的 Docker Hub 用户名和仓库名称。
-
推送新的镜像:使用 docker push 命令将新的镜像推送到 Docker Hub。这将覆盖之前的镜像。
实操
# 提交容器更改
docker commit 46f879adf741 torch_yolov5
# 标记新的容器
docker tag torch_yolov5 easonbob/my_torch1-pytorch:22.03-py3-yolov5-6.0
# 推送新的容器
docker push easonbob/my_torch1-pytorch:22.03-py3-yolov5-6.0
使用推送上去的新的镜像
docker run --gpus all -it --name my_yolo -v $(pwd):/app easonbob/my_torch1-pytorch:22.03-py3-yolov5-6.0
测试这个镜像是否能用
python detect.py --source ./data/images/ --weights weights/yolov5s.pt --conf-thres 0.4
跑出结果了就说明我们使用的确实是自己之前安装了requirment.txt和headless版本opencv的镜像
14. 最新操作
# deepstream
docker run --gpus all -v $(pwd):/app -p 8556:8554 --name my_deepstream_env -it easonbob/my-deepstream6.1:01 bash
# pytorch
docker run --gpus all -it --name my_torch1-pytorch_env -v $(pwd):/app easonbob/my_torch1-pytorch:yolov5-6.0-onnx
# tensorrt
docker run --gpus all -it --name my_trt_tensorrt_env -v $(pwd):/app easonbob/my_trt-tensorrt:01
15. wsl2的深坑
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/user-guide.html
从这个网址做,执行完步骤就可以了,后面的example都不用整理
注意的点是
sudo dockerd --add-runtime=nvidia=/usr/bin/nvidia-container-runtime [...]
后面的… 不用复制
sudo dockerd --add-runtime=nvidia=/usr/bin/nvidia-container-runtime
16. 如果已经有很多东西了怎么更改挂载路径
首先data-root要跟runtimes同级别
{
"data-root": "/data/docker",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"args": []
}
}
}
这样配置后,请按照以下步骤操作:
- 确保
/data/docker
这个目录确实存在,如果不存在,请先创建。 - 停止 Docker 服务:
sudo systemctl stop docker
- 移动当前的 Docker 数据到新的目录(如果您希望保留当前的容器和镜像数据):
sudo mv /var/lib/docker/* /data/docker/
- 重新启动 Docker 服务:
sudo systemctl start docker
然后,您应该可以看到 Docker 正确地使用新的存储目录 /data/docker
。文章来源:https://www.toymoban.com/news/detail-644220.html
docker info | grep 'Docker Root Dir'
注意:在操作过程中,最好备份您的数据,以防万一出现意外情况。文章来源地址https://www.toymoban.com/news/detail-644220.html
到了这里,关于深度学习Docker使用, (Pytorch/TensorRT/DeepStream),标记上传制作自己的DockerHub的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!