发布时间:2025-06-24 08:23:00 作者:北方职教升学中心 阅读量:728
制作docker镜像,并通过vscode连接后进行开发
通过安装NVIDIA Container Toolkit在Docker中使用GPU
发布时间:2025-06-24 08:23:00 作者:北方职教升学中心 阅读量:728
制作docker镜像,并通过vscode连接后进行开发
通过安装NVIDIA Container Toolkit在Docker中使用GPU
网上有太多的教程,但是都没说如何下载官方的镜像,在这里记录一下,使用docker安装官方的镜像
Docker Hub的官方链接:https://www.docker.com/products/docker-hub/
点击Explore Docker Hub,在搜索框中输入:nvidia/cuda,转到tags,找到合适的镜像,复制链接即可
Docker镜像源
docker.chenby.cn/
为了更加快速的下载,一般会添加docker镜像源,提高下载速度,如果不适用docker镜像源,也可能下载失败,因此,完整的镜像下载命令如下:
docker pull docker.chenby.cn/nvidia/cuda:11.1.1-cudnn8-devel-ubuntu20.04
docker pull docker.chenby.cn/nvidia/cuda:12.2.0-devel-ubuntu22.04
等待下载完毕即可,这个命令使用的cuda版本不高,应该可以在大部分机器上直接使用
镜像重命名
docker tag 旧镜像名 新镜像名
docker rmi 旧镜像名
使用docker tag 其实会生成一个新镜像,我们可以使用docker rmi 删除旧的镜像
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
现在需要进入一个空的项目,并进入到Dockerfile的文件目录中,在本例中,则需要命令行切换到docker_test目录下,并根据自己的需求,编辑dockerfile
其中,重点关注FROM的镜像源是否一致,详细的dockerfile自行了解(正常情况下,github的项目都是配置好的,只需注意FROM的镜像源),dockerfile示例如下(YOLOv10):
# Ultralytics YOLO 🚀,AGPL-3.0license# Builds ultralytics/ultralytics:latest image onDockerHub https://hub.docker.com/r/ultralytics/ultralytics# Image isCUDA-optimized forYOLOv8 single/multi-GPU training and inference# Start FROM PyTorch image https://hub.docker.com/r/pytorch/pytorch or nvcr.io/nvidia/pytorch:23.03-py3FROM pytorch/pytorch:2.2.0-cuda12.1-cudnn8-runtimeRUN pip install --no-cache nvidia-tensorrt --index-url https://pypi.ngc.nvidia.com# Downloads to user config dirADD https://github.com/ultralytics/assets/releases/download/v0.0.0/Arial.ttf \ https://github.com/ultralytics/assets/releases/download/v0.0.0/Arial.Unicode.ttf \ /root/.config/Ultralytics/# Install linux packages# g++required to build 'tflite_support'and 'lap'packages,libusb-1.0-0required for'tflite_support'packageRUN apt update \ &&apt install --no-install-recommends -y gcc git zip curl htop libgl1 libglib2.0-0libpython3-dev gnupg g++libusb-1.0-0# Security updates# https://security.snyk.io/vuln/SNYK-UBUNTU1804-OPENSSL-3314796RUN apt upgrade --no-install-recommends -y openssl tar# Create working directoryWORKDIR /usr/src/ultralytics# Copy contents# COPY ./usr/src/ultralytics # git permission issues inside containerRUN git clone https://github.com/ultralytics/ultralytics -b main /usr/src/ultralyticsADD https://github.com/ultralytics/assets/releases/download/v8.1.0/yolov8n.pt /usr/src/ultralytics/# Install pip packagesRUN python3 -m pip install --upgrade pip wheelRUN pip install --no-cache -e ".[export]"albumentations comet pycocotools# Run exports to AutoInstall packages# Edge TPU exportfails the first time so isrun twice hereRUN yolo exportmodel=tmp/yolov8n.pt format=edgetpu imgsz=32||yolo exportmodel=tmp/yolov8n.pt format=edgetpu imgsz=32RUN yolo exportmodel=tmp/yolov8n.pt format=ncnn imgsz=32# Requires <=Python 3.10,bug withpaddlepaddle==2.5.0https://github.com/PaddlePaddle/X2Paddle/issues/991RUN pip install --no-cache paddlepaddle>=2.6.0x2paddle# Fix error:`np.bool` was a deprecated alias forthe builtin `bool` segmentation error inTestsRUN pip install --no-cache numpy==1.23.5# Remove exported modelsRUN rm -rf tmp# Set environment variablesENV OMP_NUM_THREADS=1# Avoid DDP error "MKL_THREADING_LAYER=INTEL is incompatible with libgomp.so.1 library"https://github.com/pytorch/pytorch/issues/37377ENV MKL_THREADING_LAYER=GNU# Usage Examples -------------------------------------------------------------------------------------------------------# Build and Push# t=ultralytics/ultralytics:latest &&sudo docker build -f docker/Dockerfile -t $t .&&sudo docker push $t# Pull and Run withaccess to all GPUs# t=ultralytics/ultralytics:latest &&sudo docker pull $t &&sudo docker run -it --ipc=host --gpus all $t# Pull and Run withaccess to GPUs 2and 3(inside container CUDA devices will appear as0and 1)# t=ultralytics/ultralytics:latest &&sudo docker pull $t &&sudo docker run -it --ipc=host --gpus '"device=2,3"'$t# Pull and Run withlocal directory access# t=ultralytics/ultralytics:latest &&sudo docker pull $t &&sudo docker run -it --ipc=host --gpus all -v "$(pwd)"/datasets:/usr/src/datasets $t# Kill all# sudo docker kill $(sudo docker ps -q)# Kill all image-based# sudo docker kill $(sudo docker ps -qa --filter ancestor=ultralytics/ultralytics:latest)# DockerHub tag update# t=ultralytics/ultralytics:latest tnew=ultralytics/ultralytics:v6.2&&sudo docker pull $t &&sudo docker tag $t $tnew &&sudo docker push $tnew# Clean up# sudo docker system prune -a --volumes# Update Ubuntu drivers# https://www.maketecheasier.com/install-nvidia-drivers-ubuntu/# DDP test# python -m torch.distributed.run --nproc_per_node 2--master_port 1train.py --epochs 3# GCP VM from Image# docker.io/ultralytics/ultralytics:latest
docker build -t docker_image .
其中,docker_image为自定义的镜像名称,根据 FROM的镜像源 和 dockerfile 进行构建
至此,项目镜像构建完成
运行容器
将docker的ssh端口22映射到物理机的2222
将docekr的 /usr/src/ultralytics 目录映射到物理机的 /local/path 目录
-name : 容器的名字,可以自定义
docker_image:自定义镜像的id,根据自己生成的镜像来改
sudo docker run --gpus all -it -p 2222:22 --name container_name -v /local/path:/usr/src/ultralytics docker_image:latest
这样,我们就建立好了docker images,同时创建了一个docker container,并将本地与docker建立了联系,我们就可以进入docker container内部,进行开发了
如果在执行过程中,出现问题,可以使用以下命令清楚缓存,重新执行
sudo docker builder prune -f
vscode+docker搭建迷你开发环境。