色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何創建 Docker 鏡像的能力

NVIDIA英偉達企業解決方案 ? 來源:NVIDIA英偉達企業解決方案 ? 作者:NVIDIA英偉達企業解 ? 2022-09-16 09:39 ? 次閱讀

前一篇文章已經對 Jetson-containers 的容器創建腳本進行較為深入的說明,主要是為了更廣泛地適用于不同 JetPack 版本的環境,因此使用嵌套式腳本的處理方式,初看之下會覺得相當繁瑣,不過只要將腳本之間負責傳遞信息的變量內容理清,就會有種豁然開朗的感覺,并不難懂。

本文將帶大家繼續深入了解 Dockerfile 鏡像創建過程中最重要的配置文件內容,更加透徹地了解整個容器鏡像的創建過程。

3、使用 docker_build.sh 腳本創建容器:

在 scripst/docker_build_ml.sh 里有三處調用 scripst/docker_build.sh 腳本的部分,才是真正創建個別容器的環節。

以創建 l4t-pytorch 的 build_pytorch() 函數為例,在第 26 行調用 docker_build.sh 腳本并提供所有需要的相關參數

sh ./scripts/docker_build.sh $pytorch_tag Dockerfile.pytorch     --build-arg BASE_IMAGE=$BASE_IMAGE     --build-arg PYTORCH_URL=$pytorch_url     --build-arg PYTORCH_WHL=$pytorch_whl     --build-arg TORCHVISION_VERSION=$vision_version     --build-arg TORCHAUDIO_VERSION=$audio_version     --build-arg TORCH_CUDA_ARCH_LIST=$cuda_arch_list     --build-arg OPENCV_URL=$OPENCV_URL --build-argOPENCV_DEB=$OPENCV_DEB

再看看 docker_build.sh 內容,里面里其實只有 “docker build -t $CONTAINER -f $DOCKERFILE "$@" .” 這一道創建鏡像的指令,而相關所需要的參數都在上圖中做好完整的配置。

這里調用了主目錄下的 Dockerfile.pytorch,并且以 “--build-arg” 方式將相關參數去對應 Dockerfile.pytorch 配置文件里的變量,這些變量在 Dockerfile 里可能會提供預設值,但是這些新的設定值就會覆蓋掉配置文件的預設值。

創建 l4t-tensorflow 鏡像的方式也是一樣的,在第 172 行 buidl_tensorflow() 函數里第 181~187 行內容(如下),也是調用 docker_build.sh 腳本去執行,不過配置文件改成 Dockerfile.tensorflow,其他需要的參數也有所調整。

sh ./scripts/docker_build.sh $tensorflow_tag Dockerfile.tensorflow   --build-arg BASE_IMAGE=$BASE_IMAGE   --build-arg TENSORFLOW_URL=$tensorflow_url   --build-arg TENSORFLOW_WHL=$tensorflow_whl   --build-arg PROTOBUF_VERSION=$protobuf_version   --build-arg OPENCV_URL=$OPENCV_URL --build-argOPENCV_DEB=$OPENCV_DEB

在第 275~281 行用同樣的模式去創建 l4t-ml 鏡像,同樣調用 docker_build.sh 腳本,不過配置文件換成 Dockerfile.ml,相關配套參數也要根據配置文件內的實際狀況進行調整,這里就不重復說明。

4、分析 Dockerfile 內容:

這個項目所提供的腳本,主要功能是為將對應的 Dockerfile 進行變量配置的工作,現在以創建 l4t-ml 鏡像會使用到的 Dockerfile.pytorch、Dockerfile.tensorflow 與 Dockerfile.ml 為例,簡單說明一下幾個環節:

1)檢查 Dockerfile 的變量

可以用文字編輯器打開這些文件,使用 “搜索” 功能查找關鍵字 “ARG”,就能輕松找到里面的各項變量與預設值。

下面列出 Dockerfile.pytorch 的 6 個變量與預設值:

ARG BASE_IMAGE=nvcr.io/nvidia/l4t-base:r32.4.4ARG PYTORCH_URL=https://nvidia.box.com/shared/static/xxx.whlARG PYTORCH_WHL=torch-1.2.0-cp36-cp36m-linux_aarch64.whlARG TORCHVISION_VERSION=v0.4.0ARG TORCH_CUDA_ARCH_LIST="5.3;6.2;7.2;8.7"ARGTORCHAUDIO_VERSION

下面列出 Dockerfile.tensorflow 的 9 個變量與預設值:

ARG BASE_IMAGEARG HDF5_DIR="/usr/lib/aarch64-linux-gnu/hdf5/serial/"ARG MAKEFLAGS=-j$(nproc)ARG PROTOBUF_VERSION=3.19.4ARG PROTOBUF_URL=https://。。。/v${PROTOBUF_VERSION}ARG PROTOBUF_DIR=protobuf-python-${PROTOBUF_VERSION}ARG PROTOC_DIR=protoc-${PROTOBUF_VERSION}-linux-aarch_64ARG TENSORFLOW_URL=https://。。。/。。。-linux_aarch64.whlARGTENSORFLOW_WHL=tensorflow-1.15.3+nv20.9-cp36-cp36m-linux_aarch64.whl

下面列出 Dockerfile.ml 的 10 個變量與預設值:

ARG BASE_IMAGE=nvcr.io/nvidia/l4t-base:r32.4.4ARG PYTORCH_IMAGEARG TENSORFLOW_IMAGEARG MAKEFLAGS=-j$(nproc) ARG PYTHON3_VERSION=3.8ARG CUPY_VERSION=v10.2.0ARG CUPY_NVCC_GENERATE_CODE="arch=compute_53。。。"ARG OPENCV_URL=https://nvidia.box.com/shared/static/。。。.gzARGOPENCV_DEB=OpenCV-4.5.0-aarch64.tar.gz

對照一下前面腳本所提供的參數,這樣就能很輕松地了解前面腳本的任務與目的,如果前面腳本中有使用 “--build-arg” 設定的參數值,就會覆蓋配置文件內的預設值。

2)導入所需要的基礎鏡像

這種 docker build 創建容器的方式,是必須基于某個(些)已經存在的基礎容器之上,添加的相關依賴庫與軟件,因此首要工作就是從 “FROM ${BASE_IMAGE}” 導入指定的基礎鏡像開始,在 Dockerfile.pytorch 與 Dockerfile.tensorflow 就是如此,不過在 Dockerfile.ml 文件中還多了以下兩行內容:

FROM ${PYTORCH_IMAGE} as pytorchFROM${TENSORFLOW_IMAGE}astensorflow

就是要從這兩個鏡像里提取 PyTorch 與 Tensorflow 的配套資源,如下所列的指令:

COPY --from=tensorflow /usr/local/bin/protoc /usr/local/binCOPY --from=tensorflow /usr/local/lib/libproto* /usr/local/lib/COPY --from=tensorflow /usr/local/include/google /usr/local/include/googleCOPY --from=pytorch /usr/local/lib/python2.7/dist-packages/ /usr/local/lib/python2.7/dist-packages/COPY --from=pytorch /usr/local/lib/python${PYTHON3_VERSION}/dist-packages/ /usr/local/lib/python${PYTHON3_VERSION}/dist-packages/COPY --from=tensorflow /usr/local/lib/python2.7/dist-packages/ /usr/local/lib/python2.7/dist-packages/COPY--from=tensorflow/usr/local/lib/python${PYTHON3_VERSION}/dist-packages//usr/local/lib/python${PYTHON3_VERSION}/dist-packages/

這是比較有技巧的安排,然后使用者可以獨立創建 l4t-pytorch 與 l4t-tensorflow 鏡像,也可以將這兩個框架合并在 l4t-ml 鏡像內,此時只要將前面兩個鏡像已經編譯安裝好的部分復制到新鏡像里面里就可以。

我們當然也可以將 Dockerfile.pytorch 與 Dockerfile.tensorflow 里的安裝步驟全部放入 Dockerfile.ml 里面,不過這樣會讓整個配置文件變得非常冗長,估計要超過 400 行的內容,其最大的麻煩之處是會導致除錯工作變得相當復雜與冗長,因此這里將處理過程進行分割再做合并。

3)安裝依賴庫

在 Dockerfile 配置文件內使用 “RUN” 指定后面要執行的指令,后面加上 Ubuntu 使用的 apt-get install、pip install 等方式安裝依賴庫或軟件。由于鏡像的操作是設定為 root 用戶,因此不需要使用 "sudo" 去取得執行權限。

這個環節的最大困難點是 “要安裝哪些內容”?這就需要整理出軟件原廠所提供的依賴庫列表,這個過程是相對繁瑣的,而 Jetson-containers 項目所提供的 12 個 Dockerfile 參考內容,能讓我們節省很多摸索的時間。

4)需要編譯的部分:

例如在 Dockerfile.pytorch 里面執行 torchvision 的編譯安裝步驟,如下內容:

RUN git clone https://github.com/pytorch/vision torchvision &&     cd torchvision &&     git checkout ${TORCHVISION_VERSION} &&     python3 setup.py install &&     cd ../ && rm-rftorchvision

在 Dockerfile.tensorflow 文件里有執行 protobuf 與 protoc 的編譯安裝步驟,如下內容:

RUN cd /tmp &&     wget --quiet --show-progress --progress=barnoscroll --no-check-certificate ${PROTOBUF_URL}/$PROTOBUF_DIR.zip &&     wget --quiet --show-progress --progress=barnoscroll --no-check-certificate ${PROTOBUF_URL}/$PROTOC_DIR.zip &&     unzip ${PROTOBUF_DIR}.zip -d ${PROTOBUF_DIR} &&     unzip ${PROTOC_DIR}.zip -d ${PROTOC_DIR} &&     cp ${PROTOC_DIR}/bin/protoc /usr/local/bin/protoc &&     cd ${PROTOBUF_DIR}/protobuf-${PROTOBUF_VERSION} &&     ./autogen.sh &&     ./configure --prefix=/usr/local &&     make -j$(nproc) &&     make check -j4 &&     make install &&     ldconfig &&     cd python &&     python3 setup.py build --cpp_implementation &&     python3 setup.py test --cpp_implementation &&     python3 setup.py bdist_wheel --cpp_implementation &&     cp dist/*.whl /opt &&     pip3 install dist/*.whl &&     cd ../../../ &&     rm ${PROTOBUF_DIR}.zip &&     rm ${PROTOC_DIR}.zip &&     rm -rf ${PROTOBUF_DIR} && rm-rf${PROTOC_DIR}

在 Dockerfile.ml 里面執行 OpenCV 的編譯安裝步驟,如下內容:

ARG OPENCV_URL=https://nvidia.box.com/shared/static/5v89u6g5rb62fpz4lh0rz531ajo2t5ef.gzARG OPENCV_DEB=OpenCV-4.5.0-aarch64.tar.gz
COPY scripts/opencv_install.sh /tmp/opencv_install.shRUNcd/tmp&&./opencv_install.sh${OPENCV_URL}${OPENCV_DEB}

上面這三個部分是大部分創建深度學習相關應用的 Docker 鏡像所需要的步驟,現在可以直接從 Jetson-containers 這些配置文件中,復制相關步驟到自己的配置文件中,節省大量的嘗試與摸索的時間。

5、小結:

智能邊緣設備創建 Docker 版本鏡像,對應用工程師是一項非常重要的技能,因為這個關系到將來的大量部署與長期維護的問題,因此學習使用 “docker build” 指令配合 Dockerfile 配置文件的方式,是一項必備的能力。

這個 Jetson-containers項目作者為了廣泛滿足各種狀況,特別是 JetPack 的 L4T 版本變化以及對應的 TensorFlow、PyTorch、OpenCV 版本,因此使用多個變量進行調節,但這種方法會讓配置文件內容變得相當復雜。

本系列文章的目的就是為大家解開這些變量的意義,讓讀者能清楚識別出這些變量之間的關系,提升對 Dockerfile 配置文件的了解,最終協助讀者進一步簡化出自己所需要的特定腳本與配置內容,以自己創建 Docker 鏡像的能力。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • OpenCV
    +關注

    關注

    31

    文章

    634

    瀏覽量

    41337
  • 英偉達
    +關注

    關注

    22

    文章

    3770

    瀏覽量

    90984
  • 鏡像
    +關注

    關注

    0

    文章

    164

    瀏覽量

    10707
  • Docker
    +關注

    關注

    0

    文章

    457

    瀏覽量

    11846

原文標題:NVIDIA Jetson 系列文章(11):從頭創建Jetson的容器(2)

文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    怎么構建docker鏡像倉庫軟件

    Docker Registry】用docker registry 鏡像搭建私有測試倉庫
    發表于 08-13 11:03

    如何判斷是否在docker鏡像中?

    反饋bash: docker: command not found 4. 算能云主機使用的是 ubuntu 18.04,而 docker 鏡像則是 ubuntu 16.04。執行 cat /etc
    發表于 09-20 07:42

    Docker上的Alpine Linux鏡像建立

    的,也就是說Alpine Linux是面向安全應用的輕量級 Linux 發行版。 你喜歡存錢嗎?我喜歡存錢。更好地資源利用就像擁有幸福的銀行賬戶。 讓我們對Docker上的Alpine Linux一探究竟。在Alpine Linux上可以建立屬于我們自己的鏡像。
    發表于 10-12 11:52 ?0次下載

    淺析Docker鏡像本地存儲機制及容器啟動原理

    Docker 鏡像不是一個單一的文件,而是有多層構成。我們可通過 docker images 獲取本地的鏡像列表及對應的元信息, 接著可通過dock
    發表于 10-19 14:17 ?2528次閱讀

    Docker—簡介與鏡像用法

    阿里云官方鏡像站: ??https://developer.aliyun.com/mirror/?utm_content=g_1000303593?? ? 一、容器簡介 Docker是管理容器的引擎
    發表于 11-25 16:28 ?515次閱讀
    <b class='flag-5'>Docker</b>—簡介與<b class='flag-5'>鏡像</b>用法

    go項目怎么讓docker鏡像體積減小

    【導讀】go 項目怎么讓 docker 鏡像體積減???本文做了詳細介紹。
    的頭像 發表于 06-12 15:07 ?1408次閱讀

    go項目怎么讓docker鏡像體積減小

    go 項目怎么讓 docker 鏡像體積減???本文做了詳細介紹。
    的頭像 發表于 06-23 10:49 ?1189次閱讀

    Docker鏡像的詳細講解

    本文是對 Docker 鏡像的詳細講解,講解了如何安裝 Docker、配置 Docker 鏡像加速以及操作
    的頭像 發表于 08-02 10:00 ?2171次閱讀

    從零開始學習制作、以及使用Tina的Docker編譯鏡像

    學習制作、以及使用Tina的Docker編譯鏡像
    的頭像 發表于 08-28 11:45 ?2306次閱讀
    從零開始學習制作、以及使用Tina的<b class='flag-5'>Docker</b>編譯<b class='flag-5'>鏡像</b>

    減少docker鏡像大小的方法

    Docker 是一種容器引擎,可以在容器內運行一段代碼。Docker 鏡像是在任何地方運行您的應用程序而無需擔心應用程序依賴性的方式。
    的頭像 發表于 05-15 11:13 ?935次閱讀
    減少<b class='flag-5'>docker</b><b class='flag-5'>鏡像</b>大小的方法

    Docker 教程:如何將Helix QAC作為容器創建并運行

    在此 Docker 教程中,你將學習如何創建 Helix QAC 并將其作為容器化鏡像運行。 Docker 的基本定義是一種開源和流行的操作系統級虛擬化(通常稱為“容器化”)技術,它是
    的頭像 發表于 10-31 09:36 ?965次閱讀
    <b class='flag-5'>Docker</b> 教程:如何將Helix QAC作為容器<b class='flag-5'>創建</b>并運行

    docker 搜索鏡像,docker查看鏡像詳細信息(docker下載鏡像命令)

    Docker Hub是集中管理的Docker鏡像注冊中心。通過Docker 用戶可以在注冊中心搜索、下載和使用CLI命令行工具中的鏡像。以下
    的頭像 發表于 07-19 09:46 ?1848次閱讀

    如何在Windows系統上設置Docker鏡像

    在使用 Docker 進行鏡像下載和構建時,由于眾所周知的原因,國內用戶可能會遇到下載速度慢或者無法連接的問題。為了解決這個問題,我們可以使用國內的鏡像源來加速下載速度。本文將介紹如何在 Windows 系統上設置
    的頭像 發表于 10-24 16:55 ?5955次閱讀

    如何使用dockerfile創建鏡像

    如何使用Dockerfile創建鏡像,包括Dockerfile的語法和常用指令,以及具體操作步驟。 編寫Dockerfile Dockerfile是構建Docker鏡像的必需文件,可以
    的頭像 發表于 11-23 09:52 ?736次閱讀

    手動構建Docker鏡像的方法

    不推薦使用docker commit命令,而應該使用更靈活、更強大的dockerfile來構建docker鏡像。
    的頭像 發表于 08-05 15:30 ?515次閱讀
    手動構建<b class='flag-5'>Docker</b><b class='flag-5'>鏡像</b>的方法
    主站蜘蛛池模板: 青青青国产依人精品视频| 色淫阁色九九| 双腿被绑成M型调教PLAY照片| 亚洲国产日韩欧美在线a乱码| 51精品国产AV无码久久久| 第四色男人天堂| 久久久97人妻无码精品蜜桃| 欧美最猛黑人AAAAA片| 亚洲spank男男实践网站| 99热视频这里只有久久精品| 国产午夜精品一区二区三区 | 国产乱码卡二卡三卡4W| 久久综合狠狠综合久久综合88| 色四房播播| 18美女腿打开无遮软件| 国产精品-区区久久久狼| 嗯啊好爽视频| 亚洲熟女乱色一区二区三区| 纯h超级大尺度小黄文| 久久无码人妻中文国产| 午夜伦理 第1页| seyeye高清视频在线| 久久久久久久尹人综合网亚洲| 少妇性饥渴BBBBBBBBB| 99re热精品视频国产免费| 國産麻豆AVMDMD0179| 日日射日日操| 99精品视频免费在线观看| 极品少妇粉嫩小泬啪啪AV| 沙发上小泬12P| av天堂电影网在线观看| 久久秋霞理论电影| 亚洲AV电影天堂男人的天堂| 超碰97人人做人人爱网站| 麻豆一区二区三区蜜桃免费| 亚洲精品在线看| 国产精品人妻午夜福利| 肉动漫3D卡通无修在线播放| 99久久精品国产亚洲AV| 久久久无码精品亚洲欧美| 亚洲精品动漫免费二区|