如何使用docker配置深度學習開發環境

文章目錄

    • 1.底層驅動的安裝
      • 1.1 操作系統的安裝
      • 1.2 顯卡驅動的安裝
      • 1.3 cuda的安裝
    • 2.使用docker配置深度學習開發環境
      • 2.1 docker的安裝
      • 2.2 nvidia_docker的安裝
      • 2.3 安裝過程中的問題
        • 2.3.1 docker和nvidia_docker的版本不匹配的問題。
        • 2.3.2 解決每次運行docker命令的時候要加sudo.
        • 2.3.3 解決每次docker pull鏡像速度慢的問題。
        • 2.2.4 解決docker無法運行容器的問題。
    • 3.nvidia_docker的使用
      • 3.1 docker 的常用的命令
      • 3.2 docker使用過程中的注意事項
    • 4.dockerfile的使用
        • 4.1 dockerfile的例子
        • 4.2基于dockerfile創建鏡像

深度環境的搭建對于深度學習是非常重要的。其中深度學習開發環境中因為用到非常多的第三方庫,往往搭建起來非常費勁,如果有一個工具能夠往我們只需要搭建一次,以后換了開發環境后,直接copy過去就能用該多好!docker就是用于解決這個問題的好方法。下面將介紹一下如何使用docker配置深度學習開發環境。

在這里插入圖片描述

1.底層驅動的安裝

1.1 操作系統的安裝

參考文章:Linux操作系統的安裝

1.2 顯卡驅動的安裝

參考文章:英偉達顯卡驅動的安裝

1.3 cuda的安裝

參考文章:cuda的安裝

2.使用docker配置深度學習開發環境

2.1 docker的安裝

注意docker和nvidia_docker的版文好要對應
參考文章:docker的安裝

  • 運行sudo docker run hello-world 測試docker是否安裝和啟動成功

如果之前或者系統自帶的有docker,一定要卸載掉之前的docker,然后運行上面的命令安裝docker

2.2 nvidia_docker的安裝

注意docker和nvidia_docker的版文好要對應
參考文章:nvidia_docker的安裝

  • 運行docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi命令測試nvidia_docker是否安裝成功。

上面的測試命令需要你下載nvidia/cuda鏡像,這個鏡像比較大,下載非常耗時,所以一般查看是否擁有nvidia_docker命令即可,如果有這個命令說明安裝成功

2.3 安裝過程中的問題

2.3.1 docker和nvidia_docker的版本不匹配的問題。

  • 問題提示:
docker-ce (= 5:18.09.0~3-0~ubuntu-xenial) but 18.06.0~ce~3-0~ubuntu is to be installed
  • 解決方法:
    • 卸載掉原先安裝的docker(一定要注意卸載干凈,一般的卸載方法是無法卸載干凈的,請自行百度),然后運行上面給的命令,就可以不出現上面的錯誤了。
    • 一般如果系統沒有自帶docker或者后面沒有安裝docker,直接運行上面給出的命令是不會出問題的。

2.3.2 解決每次運行docker命令的時候要加sudo.

參考文章

其實就是常見一個docker用戶組,然后將用戶都加入進去即可。

2.3.3 解決每次docker pull鏡像速度慢的問題。

參考文章

我覺得這是比較好的方法,網上還有直接添加鏡像網站的方法,效果不是很好,此處建議使用上面的方法。

2.2.4 解決docker無法運行容器的問題。

  • 錯誤提示:
Error response from daemon: Unknown runtime specified nvidia.
  • 參考文章
  • 注意事項:
    • 一定要保證nvidia_docker安裝成功
    • 查看/usr/bin/nvidia-container-runtime執行文件是否存在
    • 按照上面的要求修改文件:/etc/systemd/system/docker.service.d/override.conf
    • 查看該/etc/docker/daemon.json是否出錯,記住一定只能有一個一級的大括號,不能出現并集的兩個。
## /etc/docker/daemon.json
{                                                                    "registry-mirrors": ["http://f136**2.m.daocloud.io"],       "runtimes": {                                                "nvidia": {                                          "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": []                            }                                            }                                                            
}
## /etc/systemd/system/docker.service.d/override.conf
[Service]
ExecStart= ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime                                                                    

3.nvidia_docker的使用

3.1 docker 的常用的命令

啟動容器命令示例:

通過運行命令“nvidia_docker run --rm --it --name=“myTorch” --volume=”/home/deep_wfy/project:/home/deep_wfy/workspace:rw" pytorch:latest /bin/bash",

  • "–rm"表示在退出(使用快捷鍵Ctrl+d)退出時,同時刪除該鏡像文件的緩存,如果不加該選項,則該鏡像的緩存會存在電腦中,通過運行命令“docker start myTorch”可以重新進入到該鏡像的環境中,可以使用命令“docker rm myTorch”將緩存刪除,此時使用命令“docker ps -a”查看發現沒有。
  • “–it”表示該鏡像運行在終端環境中,不加則無法進入到該鏡像中。
  • “–name”表示給該鏡像命名為"myTorch",同一個鏡像,可以在不同運行時起不同的名字,用于區分不同的環境。
  • “–volume”表示有鏡像創建的虛擬環境和物理環境中文件的共享映射,此處表示將物理環境中的“/home/deep_wfy/project”路徑下的文件和虛擬環境中的“/home/deep_wfy/workspace”文件相對應,而且具有讀寫的權限,即在虛擬環境中修改文件在物理環境中也會改變,這樣即使把鏡像創建的虛擬環境刪除,文件依然保存。
  • “pytorch:latest”是你要運行的鏡像的名稱
  • “/bin/bash”表示執行鏡像環境中的bin文件夾下的bash可執行文件(這個可以通過查看該鏡像的dockerFile看出)
  • 進行入到鏡像的虛擬環境中便可以完成相應的操作,可以直接使用該鏡像中環境了。與使用真實的環境并無差異。

只記錄docker命令在大部分情境下的使用,如果想了解每一個選項的細節,請參考官方文檔

在這里插入圖片描述

  • Docker環境信息 — docker [info|version]
  • 容器生命周期管理 — docker [create|exec|run|start|stop|restart|kill|rm|pause|unpause]
  • 容器操作運維 — docker [ps|inspect|top|attach|wait|export|port|rename|stat]
  • 容器rootfs命令 — docker [commit|cp|diff]
  • 鏡像倉庫 — docker [login|pull|push|search]
  • 本地鏡像管理 — docker [build|images|rmi|tag|save|import|load]
  • 容器資源管理 — docker [volume|network]
  • 系統日志信息 — docker [events|history|logs]
  • 退出某個鏡像的操作是:CTRL + D
  • 其實docker中的很多命令與Linux是非常相似的,所以用起來非常簡單
  • docker help [command]可以查看具體命令的一些詳細信息

3.2 docker使用過程中的注意事項

  • 鏡像查找網站,一般網站中會給出鏡像拉取和容器創建的命令
  • 如果要開啟GUI,聲音等權限,需要去查相關的命令
  • 如果要使用tensorboard,則需要指明容器與服務器的端口映射。

4.dockerfile的使用

4.1 dockerfile的例子

Ubuntu 16.04

FROM scratch
ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
# delete all the apt list files since they're big and get stale quickly
RUN rm -rf /var/lib/apt/lists/*
# this forces "apt-get update" in dependent images, which is also good
# (see also https://bugs.launchpad.net/cloud-images/+bug/1699913)# a few minor docker-specific tweaks
# see https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap
RUN set -xe \\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L40-L48&& echo '#!/bin/sh' > /usr/sbin/policy-rc.d \&& echo 'exit 101' >> /usr/sbin/policy-rc.d \&& chmod +x /usr/sbin/policy-rc.d \\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L54-L56&& dpkg-divert --local --rename --add /sbin/initctl \&& cp -a /usr/sbin/policy-rc.d /sbin/initctl \&& sed -i 's/^exit.*/exit 0/' /sbin/initctl \\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L71-L78&& echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L85-L105&& echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \&& echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \&& echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L109-L115&& echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L118-L130&& echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes \\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L134-L151&& echo 'Apt::AutoRemove::SuggestsImportant "false";' > /etc/apt/apt.conf.d/docker-autoremove-suggests# make systemd-detect-virt return "docker"
# See: https://github.com/systemd/systemd/blob/aa0c34279ee40bce2f9681b496922dedbadfca19/src/basic/virt.c#L434
RUN mkdir -p /run/systemd && echo 'docker' > /run/systemd/container# overwrite this with 'CMD []' in a dependent Dockerfile
CMD ["/bin/bash"]

ubuntu 18.04 + cuda10 + tensorflow1.13

# Copyright 2018 The TensorFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================
#
# THIS IS A GENERATED DOCKERFILE.
#
# This file was assembled from multiple pieces, whose use is documented
# throughout. Please refer to the TensorFlow dockerfiles documentation
# for more information.ARG UBUNTU_VERSION=18.04ARG ARCH=
ARG CUDA=10.0
FROM nvidia/cuda${ARCH:+-$ARCH}:${CUDA}-base-ubuntu${UBUNTU_VERSION} as base
# ARCH and CUDA are specified again because the FROM directive resets ARGs
# (but their default value is retained if set previously)
ARG ARCH
ARG CUDA
ARG CUDNN=7.4.1.5-1# Needed for string substitution 
SHELL ["/bin/bash", "-c"]
# Pick up some TF dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \build-essential \cuda-command-line-tools-${CUDA/./-} \cuda-cublas-${CUDA/./-} \cuda-cufft-${CUDA/./-} \cuda-curand-${CUDA/./-} \cuda-cusolver-${CUDA/./-} \cuda-cusparse-${CUDA/./-} \curl \libcudnn7=${CUDNN}+cuda${CUDA} \libfreetype6-dev \libhdf5-serial-dev \libzmq3-dev \pkg-config \software-properties-common \unzipRUN [ ${ARCH} = ppc64le ] || (apt-get update && \apt-get install nvinfer-runtime-trt-repo-ubuntu1804-5.0.2-ga-cuda${CUDA} \&& apt-get update \&& apt-get install -y --no-install-recommends libnvinfer5=5.0.2-1+cuda${CUDA} \&& apt-get clean \&& rm -rf /var/lib/apt/lists/*)# For CUDA profiling, TensorFlow requires CUPTI.
ENV LD_LIBRARY_PATH /usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATHARG USE_PYTHON_3_NOT_2
ARG _PY_SUFFIX=${USE_PYTHON_3_NOT_2:+3}
ARG PYTHON=python${_PY_SUFFIX}
ARG PIP=pip${_PY_SUFFIX}# See http://bugs.python.org/issue19846
ENV LANG C.UTF-8RUN apt-get update && apt-get install -y \${PYTHON} \${PYTHON}-pipRUN ${PIP} --no-cache-dir install --upgrade \pip \setuptools# Some TF tools expect a "python" binary
RUN ln -s $(which ${PYTHON}) /usr/local/bin/python # Options:
#   tensorflow
#   tensorflow-gpu
#   tf-nightly
#   tf-nightly-gpu
# Set --build-arg TF_PACKAGE_VERSION=1.11.0rc0 to install a specific version.
# Installs the latest version by default.
ARG TF_PACKAGE=tensorflow
ARG TF_PACKAGE_VERSION=
RUN ${PIP} install ${TF_PACKAGE}${TF_PACKAGE_VERSION:+==${TF_PACKAGE_VERSION}}COPY bashrc /etc/bash.bashrc
RUN chmod a+rwx /etc/bash.bashrc

4.2基于dockerfile創建鏡像

參考文章

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445127.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445127.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

反射全解

反射的概念 反射的引入: Object obj new Student(); 若程序運行時接收到外部傳入的一個對象,該對象的編譯類型是Object,但程序又需要調用該對象運行類型的方法: 1.若編譯和運行類型都知道,使用 instanceof判斷后&…

MachineLearning(4)-核函數與再生核希爾伯特空間

核函數與再生核希爾伯特空間1.支持向量積-核函數2.一個函數為核函數的條件3.核函數與希爾伯特空間3.1希爾伯特空間-Hilbert空間1.支持向量積-核函數 核(kernel)的概念由Aizenman et al.于1964年引入模式識別領域,原文介紹的是勢函數的方法。在那之后,核…

CRegKey 注冊表操作

1.簡介 CRegKey提供了對系統注冊表的操作方法,通過CRegKey類,可以方便的打開注冊表的某個分支或子鍵(CRegKey::Open),可以方便的修改一個鍵的鍵值(CRegKey::SetValue),也可以查詢某…

進程基礎

進程的基本概念 程序順序執行的特征: 1)順序性:處理機嚴格按照程序所規定的順序執行,每一步操作必須在下一步操作開始前執行 2)封閉性:程序在封閉的環境下運行,程序獨占資源,資源的狀…

用Docker容器自帶的tensorflow serving部署模型對外服務

相信很多人和我一樣,在試圖安裝tensorflow serving的時候,翻遍了網上的博客和官網文檔,安裝都是以失敗而告終,我也是一樣,這個問題折磨了我兩個星期之久,都快放棄了。幸運的是在同事的建議下,我…

C資源

云風最近寫了一篇博客《C語言的前世今生》。作為長期使用C語言開發網絡游戲服務器的程序員,云風是有理由寫這樣一篇文字,不過還是感覺談的不夠深入,C語言在業界使用的現狀沒有怎么描寫,有些意猶未盡。在這里想比較系統的談談個人對…

學點數學(2)-特征函數

特征函數1.數列特征方程2.矩陣特征方程3.微分方程特征方程4.積分方程特征方程特征方程是為研究相應的數學對象而引入的一些等式,這些等式描述了特定對象的特性。依據研究的對象不同,特征方程包括數列特征方程、矩陣特征方程、微分方程特征方程、積分方程…

GCC如何產生core dump

先決條件1.安裝apport(automatically generate crash reports for debugging)2.修改/etc/security/limits.conf文件,使允許core dump,或者用ulimit -c unlimited設置core dump文件的大小為unlimited3.C/C的編譯開關-g(…

經典的進程同步問題

經典的進程同步問題 普通版:一類進程作為生產者,生產產品,生產的產品放入一個緩沖區,消費者從緩沖區中取出產品,需要保證生產者不可以向滿的緩沖區中添加產品,消費者不可以從空的緩沖區中取出產品。同一時刻…

面試題匯總---深度學習(圖像識別,NLP內容)

文章目錄1.基本概念1.1 為什么神經網絡中深度網絡的表現比廣度網絡表現好?1.2 推導BP算法1.3 什么是梯度消失和梯度爆炸?1.4 常用的激活函數有哪些?1.5 常用的參數更新方法有哪些?1.6 解決過擬合的方法?數據層面模型層…

Linux-2.6.25 TCPIP函數調用大致流程

Linux-2.6.25 TCPIP函數調用大致流程學習目的,隨手筆記。函數和文字說明會不斷補充更新。Changelog2008.10.08 最近找工作忙。暫時緩緩插口層系統調用sendsys_sendsys_sendtosendtosys_sendtosock_sendmsgsendmsgsys_sendmsgsock_sendmsgwritesys_writevfs_write…

Python(28)-文件,os模塊

文件1. 文件2. 文件的基本操作3. 讀取文件open()3.1 文件指針: 標記從哪一個位置開始讀取數據.3.2 文件的打開方式mode3.3 文件按行讀取3.3.1 readline()3.3.2 readlines()4.文件輸出f.write(),print()5.文件復制5.1 小文件復制(搬家)5.2 大文件復制&…

IOCP的程序

C代碼 #include <winsock2.h> #include <mswsock.h> #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> #include "vld.h" #pragma message("automatic link to ws2_32.lib and…

PaperNotes(3)-圖像分割-RCNN-FCN-Boxsup

圖像分割算法對比小結1.{基本概念}2.{R-CNN}2.1R-CNN 網絡結構選擇性搜索算法為什么選擇SVM作分類器邊框回歸2.2{R-CNN 訓練}2.3{R-CNN實驗結果}2.4{R-CNN語義分割}2.5{補充材料}2.5.1{R-CNN建議區域放縮}2.5.2{IOU閾值設置不一樣的原因}2.5.3{Bounding-box回歸修正}2.6{R-CNN存…

Python模塊(3)--PIL 簡易使用教程

PIL模塊-用與記1.圖片導入Image.open()2.圖像顯示.show()4.查看圖片屬性.format,.size,.mode3.圖像格式轉換.convert()4.圖像模式“L”&#xff0c;“RGB”,"CYMK"5. 圖片旋轉.rotate()旋轉方式1&#xff1a;旋轉不擴展旋轉方式2&#xff1a;旋轉擴展旋轉方式3&#…

日志級別 debug info warn eirror fatal

日志級別 debug info warn eirror fatal 軟件中總免不了要使用諸如 Log4net, Log4j, Tracer 等東東來寫日志&#xff0c;不管用什么&#xff0c;這些東東大多是大同小異的&#xff0c;一般都提供了這樣5個日志級別&#xff1a; Debug Info Warn Error Fatal一個等級比一個高&…

輸入輸出系統

I/O設備&#xff1a;輸入輸出和存儲功能的設備 I/O設備的分類 按傳輸的速度&#xff1a; 低速設備&#xff08;如鍵盤、鼠標、語音輸入輸出設備&#xff09; 中速設備&#xff08;如行式打印機、激光打印機等&#xff09; 高速設備&#xff08;如磁帶機、磁盤機、光盤機等&…

vue2源碼解析---v-model雙向數據綁定

什么是v-model v-model 是 Vue 中的一個指令&#xff0c;用于實現表單元素與 Vue 實例中數據的雙向綁定。這意味著當表單元素的值發生變化時&#xff0c;Vue 實例中的數據也會隨之更新 工作原理 生成ast樹 本質上是語法糖 結合了v-bind和v-on兩個指令 示例代碼 new Vue({e…

php收集的精典代碼

1. οncοntextmenu"window.event.return&#xff06;#118aluefalse" 將徹底屏蔽鼠標右鍵 <table border οncοntextmenureturn(false)><td>no</table> 可用于Table 2. <body onselectstart"return false"> 取消選取、防止復制…

python外卷(7)--glob

glob模塊1.glob.glob()2.對比os.listdir()glob是python自帶的一個操作文件的模塊&#xff0c;可用于查找 指定路徑 中 匹配的 文件。1.glob.glob() 下面是一個測試文件路徑&#xff1a; (base) pppp-System-Product-Name:~/Desktop/test_glob$ tree . ├── a │ ├── 1…