日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker $PWD路径_使用docker炼丹

發(fā)布時(shí)間:2023/12/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker $PWD路径_使用docker炼丹 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

https://hijiangtao.github.io/2018/04/17/Docker-in-Action/?hijiangtao.github.ioDocker 入門教程 - 阮一峰的網(wǎng)絡(luò)日志?www.ruanyifeng.com

多人服務(wù)器上煉丹,環(huán)境管理是個(gè)超級(jí)麻煩的事。使用python虛擬環(huán)境很大程度可以解決這個(gè)問題,但是不同cuda版本還是沒法解決,遷移到別的機(jī)器又要重來一次。此時(shí)Docker就是超級(jí)便利的虛擬化環(huán)境管理工具,不同容器分開,版本切換極其方便。

Docker 將應(yīng)用程序與該程序的依賴,打包在一個(gè)文件里面。運(yùn)行這個(gè)文件,就會(huì)生成一個(gè)虛擬容器。程序在這個(gè)虛擬容器里運(yùn)行,就好像在真實(shí)的物理機(jī)上運(yùn)行一樣。有了 Docker,就不用擔(dān)心環(huán)境問題。
總體來說,Docker 的接口相當(dāng)簡(jiǎn)單,用戶可以方便地創(chuàng)建和使用容器,把自己的應(yīng)用放入容器。容器還可以進(jìn)行版本管理、復(fù)制、分享、修改,就像管理普通的代碼一樣。
阮一峰Docker入門

鏡像獲取

第一步便是拉取合適的鏡像。這里區(qū)分一下鏡像與容器。

  • 鏡像: 是特殊的文件,相當(dāng)于虛擬機(jī),包含了運(yùn)行時(shí)所需的環(huán)境配置,相關(guān)庫等文件。鏡像不應(yīng)該包含用戶自己的個(gè)人數(shù)據(jù)。
  • 容器: 可以理解為鏡像的實(shí)例化進(jìn)程。一個(gè)服務(wù)器中可以有一個(gè)(或若干個(gè))用戶們常用的鏡像,每個(gè)人根據(jù)這個(gè)鏡像來啟動(dòng)屬于自己的容器。容器的生命周期根據(jù)用戶使用情況而定,執(zhí)行完相應(yīng)程序便會(huì)被銷毀。

安裝docker不再贅述,這里已經(jīng)介紹的非常詳細(xì)了。

安裝完成后,啟動(dòng)docker

sudo service docker start # service 啟動(dòng)docker sudo systemctl start docker # systemctl 啟動(dòng)docker

hello-world

國內(nèi)Docker拉取非常慢,這里我們改為國內(nèi)鏡像站:

sudo vi /etc/default/docker # 在文件底部加上 DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com" # 重啟docker sudo service docker restart

還是最簡(jiǎn)單的“hello-world”,我們運(yùn)行

docker image pull library/hello-world

既可以拉取hello-world鏡像了,我們運(yùn)行:

docker run -it --rm hello-world # 顯示如下內(nèi)容,即為OK Hello from Docker!

拉取nvidia-docker

上面僅是小示例,我們主要為了應(yīng)用NVIDIA-Docker。首先需要安裝 NVIDIA driver, docker 版本為19.03。這里直接按照 nvidia-docker官方安裝教程來,以centos7為例:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo ? sudo yum install -y nvidia-container-toolkit sudo systemctl restart docker

Nvidia-docker即可安裝成功,拉取nvidia/cuda鏡像。

docker pull nvidia/cuda:10.0-base

測(cè)試一下是否能夠使用你的GPU吧。

#### 測(cè)試是否可以看到所有顯卡,如果沒有 nvidia/cuda:10.0-base,則會(huì)先下載該鏡像 docker run --gpus all nvidia/cuda:10.0-base nvidia-smi ? # 在一個(gè)容器上使用兩塊GPU docker run --gpus 2 nvidia/cuda:10.0-base nvidia-smi ? # 指定使用的GPU docker run --gpus '"device=1,2"' nvidia/cuda:10.0-base nvidia-smi docker run --gpus '"device=UUID-ABCDEF,1"' nvidia/cuda:10.0-base nvidia-smi ? # Specifying a capability (graphics, compute, ...) for my container # 沒用過這種方式 docker run --gpus all,capabilities=utility nvidia/cuda:10.0-base nvidia-smi

tips

網(wǎng)速不好的時(shí)候鏡像拉取會(huì)很耗時(shí),這里我們可以在網(wǎng)速較好的機(jī)器上先 docker pull XXX_Image,然后 docker save 鏡像名 > my_docker.tar.gz 保存需要的鏡像為一個(gè)壓縮包,拷貝進(jìn)需要的機(jī)器中,然后 docker load < my_docker.tar.gz 來導(dǎo)入鏡像。

使用容器

我拉取鏡像是: pytorch/pytorch:1.4-cuda10.1-cudnn7-devel。從鏡像中運(yùn)行容器:

docker run -it -v [主機(jī)代碼目錄]:[容器內(nèi)代碼映射目錄] --gpus all --name [創(chuàng)建的容器名稱] [鏡像名稱]:[鏡像tag] /bin/bash -c "sh trainer/train.sh" # 以我的容器為例,nnunet是我想創(chuàng)建的容器名,以后在這個(gè)容器內(nèi)使用 docker run -it -v "$PWD:/workspace" --gpus all --name nnunet nnunet_pytorch14:v1.0 /bin/bash

這就創(chuàng)建好了需要運(yùn)行的容器。我們介紹若干運(yùn)行容器時(shí)的參數(shù):

-d: 容器啟動(dòng)后,在后臺(tái)運(yùn)行;
--rm: 容器終止運(yùn)行后,自動(dòng)刪除容器文件
--name: 指定容器名字
-v "[主機(jī)工作目錄]:[容器內(nèi)工作映射目錄]" : 指定容器內(nèi)文件的掛載路徑
-c "XXX.sh": 啟動(dòng)容器后運(yùn)行的腳本

假設(shè)本地目錄為:

workspace │ ├── bin │ ├── app.py - 入口文件

那么我們?cè)趙orkspace下編寫 train.sh

cd bin && python app.py --args....

然后進(jìn)入workspace運(yùn)行以下命令:

docker run -it -e export RESULTS_FOLDER="/workspace/RESULTS_MODEL/Task003_Liver/" -d -v "$PWD:/WORKSPCE" --gpus all --name nnunet nnunet_pytorch14:v1.0 /bin/bash -c "sh train.sh" # $PWD是本機(jī)的當(dāng)前目錄,/WORKSPACE是指定的docker容器內(nèi)目錄這里需要注意:-e 設(shè)置環(huán)境變量非常的重要!可以改變?nèi)萜髦械南到y(tǒng)環(huán)境變量。

即可開始訓(xùn)練。這里列出我的nnUNet訓(xùn)練腳本

export RESULTS_FOLDER="/workspace/RESULTS_MODEL/Task003_Liver/"export CUDA_VISIBLE_DEVICES=$1 && nohup nnUNet_predict -i /workspace/datasets/ -o /workspace/all_organ_results/ -t Task003_Liver -tr nnUNetTrainerV2 -m 3d_fullres --num_threads_preprocessing 12 --num_threads_nifti_save 4 > nohup_docker.out 2>&1 &

定制自己的鏡像

從官方拉取的鏡像往往不能直接使用,還需要根據(jù)自己的需求安裝需要的包。這時(shí)候就需要定制自己的鏡像了。

Dockerfile

在項(xiàng)目根目錄下(我這里是在nnUNet下,目錄下有requirements.txt, 并且執(zhí)行 pip install -e . 會(huì)安裝相應(yīng)依賴,請(qǐng)根據(jù)自己情況自行對(duì)應(yīng)),新建Dockerfile:

# 基礎(chǔ)鏡像 FROM pytorch/pytorch:1.4-cuda10.1-cudnn7-devel # 將本目錄拷貝進(jìn)入 workspace COPY . /workspace # 設(shè)置工作目錄為 workspace WORKDIR /workspace # RUN chmod +x ./Anaconda3-5.2.0-Linux-x86_64.sh && ./Anaconda3-5.2.0-Linux-x86_64.sh -b -p # /anaconda3 && rm ./Anaconda3-5.2.0-Linux-x86_64.sh # 定義環(huán)境變量,我這里用自己新安裝的anaconda3中的python # ENV PATH=/anaconda3/bin:$PATH # 安裝ipython,以及nnunet中的requirements.txt RUN conda install -y ipython RUN pip install -r requirements.txt RUN pip install -e . # sudo yum install libXext libSM libXrender 解決opencv libsm.so.6

本地目錄下文件如果很大,有些用不到,可以寫入.dockerignore:

.git datasets node_modules

表示不會(huì)打包進(jìn)入鏡像文件。

構(gòu)建鏡像

docker image build -t MY_DOCKER_IMAGE:1.0

構(gòu)建完成。

實(shí)用命令

這里已經(jīng)把最為常見的使用命令介紹了,其中還有一些可能用到的,稍微介紹:

# 刪除無用的容器 docker rm 容器名稱 # 刪除無用的鏡像 docker rmi -f 鏡像名稱 # 列出所有鏡像 docker image ls # 列出所有容器 docker ps -a # 普通用戶加入docker組 sudo usermod -aG docker $USER sudo systemctl restart docker

寫的稍微匆忙,還有很多命令沒有詳解,望大家指出。

總結(jié)

以上是生活随笔為你收集整理的docker $PWD路径_使用docker炼丹的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。