畢設(shè)做微課資源網(wǎng)站設(shè)計(jì)可以嗎產(chǎn)品推廣建議
前言
在此記錄一下docker的鏡像和容器的相關(guān)注意事項(xiàng)
前提條件:已安裝Docker、顯卡驅(qū)動(dòng)等基礎(chǔ)配置
1. 安裝鏡像
網(wǎng)上有太多的教程,但是都沒(méi)說(shuō)如何下載官方的鏡像,在這里記錄一下,使用docker安裝官方的鏡像
Docker Hub的官方鏈接:https://www.docker.com/products/docker-hub/
點(diǎn)擊Explore Docker Hub,在搜索框中輸入:nvidia/cuda,轉(zhuǎn)到tags,找到合適的鏡像,復(fù)制鏈接即可
Docker鏡像源
docker.chenby.cn/
為了更加快速的下載,一般會(huì)添加docker鏡像源,提高下載速度,如果不適用docker鏡像源,也可能下載失敗,因此,完整的鏡像下載命令如下:
docker pull docker.chenby.cn/nvidia/cuda:11.1.1-cudnn8-devel-ubuntu20.04
等待下載完畢即可,這個(gè)命令使用的cuda版本不高,應(yīng)該可以在大部分機(jī)器上直接使用
-
鏡像重命名
docker tag 舊鏡像名 新鏡像名
docker rmi 舊鏡像名
使用docker tag 其實(shí)會(huì)生成一個(gè)新鏡像,我們可以使用docker rmi 刪除舊的鏡像
2. NVIDIA Container Toolkit (Docker使用GPU)
- 設(shè)置NVIDIA Container Toolkit的stable版本存儲(chǔ)庫(kù)的GPG key:
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
- 安裝toolkit:
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
3. 創(chuàng)建容器
- 生成dockerfile
現(xiàn)在需要進(jìn)入一個(gè)空的項(xiàng)目,并進(jìn)入到Dockerfile的文件目錄中,在本例中,則需要命令行切換到docker_test目錄下,并根據(jù)自己的需求,編輯dockerfile
其中,重點(diǎn)關(guān)注FROM的鏡像源是否一致,詳細(xì)的dockerfile自行了解(正常情況下,github的項(xiàng)目都是配置好的,只需注意FROM的鏡像源),dockerfile示例如下(YOLOv10):
# Ultralytics YOLO 🚀, AGPL-3.0 license
# Builds ultralytics/ultralytics:latest image on DockerHub https://hub.docker.com/r/ultralytics/ultralytics
# Image is CUDA-optimized for YOLOv8 single/multi-GPU training and inference# Start FROM PyTorch image https://hub.docker.com/r/pytorch/pytorch or nvcr.io/nvidia/pytorch:23.03-py3
FROM pytorch/pytorch:2.2.0-cuda12.1-cudnn8-runtime
RUN pip install --no-cache nvidia-tensorrt --index-url https://pypi.ngc.nvidia.com# Downloads to user config dir
ADD 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-0 required for 'tflite_support' package
RUN apt update \&& apt install --no-install-recommends -y gcc git zip curl htop libgl1 libglib2.0-0 libpython3-dev gnupg g++ libusb-1.0-0# Security updates
# https://security.snyk.io/vuln/SNYK-UBUNTU1804-OPENSSL-3314796
RUN apt upgrade --no-install-recommends -y openssl tar# Create working directory
WORKDIR /usr/src/ultralytics# Copy contents
# COPY . /usr/src/ultralytics # git permission issues inside container
RUN git clone https://github.com/ultralytics/ultralytics -b main /usr/src/ultralytics
ADD https://github.com/ultralytics/assets/releases/download/v8.1.0/yolov8n.pt /usr/src/ultralytics/# Install pip packages
RUN python3 -m pip install --upgrade pip wheel
RUN pip install --no-cache -e ".[export]" albumentations comet pycocotools# Run exports to AutoInstall packages
# Edge TPU export fails the first time so is run twice here
RUN yolo export model=tmp/yolov8n.pt format=edgetpu imgsz=32 || yolo export model=tmp/yolov8n.pt format=edgetpu imgsz=32
RUN yolo export model=tmp/yolov8n.pt format=ncnn imgsz=32
# Requires <= Python 3.10, bug with paddlepaddle==2.5.0 https://github.com/PaddlePaddle/X2Paddle/issues/991
RUN pip install --no-cache paddlepaddle>=2.6.0 x2paddle
# Fix error: `np.bool` was a deprecated alias for the builtin `bool` segmentation error in Tests
RUN pip install --no-cache numpy==1.23.5
# Remove exported models
RUN rm -rf tmp# Set environment variables
ENV OMP_NUM_THREADS=1
# Avoid DDP error "MKL_THREADING_LAYER=INTEL is incompatible with libgomp.so.1 library" https://github.com/pytorch/pytorch/issues/37377
ENV 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 with access to all GPUs
# t=ultralytics/ultralytics:latest && sudo docker pull $t && sudo docker run -it --ipc=host --gpus all $t# Pull and Run with access to GPUs 2 and 3 (inside container CUDA devices will appear as 0 and 1)
# t=ultralytics/ultralytics:latest && sudo docker pull $t && sudo docker run -it --ipc=host --gpus '"device=2,3"' $t# Pull and Run with local 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 1 train.py --epochs 3# GCP VM from Image
# docker.io/ultralytics/ultralytics:latest
- 根據(jù)dockerfile構(gòu)建項(xiàng)目鏡像
docker build -t docker_image .
其中,docker_image為自定義的鏡像名稱(chēng),根據(jù) FROM的鏡像源 和 dockerfile 進(jìn)行構(gòu)建
至此,項(xiàng)目鏡像構(gòu)建完成
-
運(yùn)行容器
將docker的ssh端口22映射到物理機(jī)的2222
將docekr的 /usr/src/ultralytics 目錄映射到物理機(jī)的 /local/path 目錄
-name : 容器的名字,可以自定義
docker_image:自定義鏡像的id,根據(jù)自己生成的鏡像來(lái)改
sudo docker run --gpus all -it -p 2222:22 --name container_name -v /local/path:/usr/src/ultralytics docker_image:latest
這樣,我們就建立好了docker images,同時(shí)創(chuàng)建了一個(gè)docker container,并將本地與docker建立了聯(lián)系,我們就可以進(jìn)入docker container內(nèi)部,進(jìn)行開(kāi)發(fā)了
備注
如果在執(zhí)行過(guò)程中,出現(xiàn)問(wèn)題,可以使用以下命令清楚緩存,重新執(zhí)行
sudo docker builder prune -f
參考
vscode+docker搭建迷你開(kāi)發(fā)環(huán)境。制作docker鏡像,并通過(guò)vscode連接后進(jìn)行開(kāi)發(fā)
通過(guò)安裝NVIDIA Container Toolkit在Docker中使用GPU