欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

從零開始制作PyTorch的Singularity容器鏡像的解決方案

 更新時間:2024年05月09日 10:20:21   作者:DECHIN  
本文主要介紹Facebook所主導(dǎo)的機器學(xué)習(xí)框架PyTorch的容器化安裝方法,基于HPC環(huán)境常用的Singularity高性能容器,并且兼容與結(jié)合了Docker容器鏡像的生態(tài),感興趣的朋友跟隨小編一起看看吧

這篇文章主要介紹Facebook所主導(dǎo)的機器學(xué)習(xí)框架PyTorch的容器化安裝方法,基于HPC環(huán)境常用的Singularity高性能容器,并且兼容與結(jié)合了Docker容器鏡像的生態(tài),非常的友好。在容器化的編程環(huán)境中,我們不僅可以避免不同框架對于python庫或者系統(tǒng)軟件版本的依賴沖突,還可以很大程度上解決因為沒有root權(quán)限以及網(wǎng)絡(luò)外訪權(quán)限的環(huán)境下所帶來的極大的麻煩,故推薦使用這種方案進行安裝和運行。

技術(shù)背景

在前面的博客中,我們大篇幅的使用到了Docker和Singularity這兩種常見的容器化編程環(huán)境解決方案,使得我們的各個編程環(huán)境能夠更好的隔離。如果要展開講解容器化編程環(huán)境的重要性的話,我們有可能會發(fā)現(xiàn)容器并不是那么的必須:比如解決python庫的依賴沖突問題,我們可以選擇使用python的virtualenv或者conda的虛擬環(huán)境;比如解決gcc的版本依賴沖突,我們可以手動配置和選擇對應(yīng)的版本;比如對于我們沒有root權(quán)限和對外網(wǎng)絡(luò)的環(huán)境,想要安裝一些工具可以采用源碼編譯安裝。那么,這些種種的問題,如果我們采用Singularity的方案,就可以一次性的解決。而且容器化是一個趨勢,比如各種的機器學(xué)習(xí)框架都會提供容器版本的安裝方案,像MindSpore和Tensorflow等等。這里我們嘗試使用Singularity的容器def文件(類似于Docker的Dockerfile,而且兼容Docker的鏡像),去構(gòu)造一個Pytorch專屬的編程環(huán)境。

環(huán)境準(zhǔn)備

這里我們假設(shè)本地的容器環(huán)境是已經(jīng)安裝完畢的,可以通過如下指令進行檢驗:

dechin@ubuntu2004:~/projects/pytorch$ singularity --version
singularity version 3.8.0-rc.1

建議至少使用3.5以上版本的Singularity,否則會有編譯不兼容的問題。關(guān)于Singularity的安裝與基本使用,可以參考這篇在Manjaro Linux上安裝Singularity的方法、以及在CentOS上安裝Singularity的方法,還有這篇Manjaro Linux安裝singularity-container的解決方案。

制作def文件

Singularity的def文件類似于Docker的Dockerfile,用于定義一個容器鏡像,而在這個文件中我們除了指定基礎(chǔ)鏡像之外,還可以指定下載基礎(chǔ)鏡像之后要執(zhí)行的配置項目。我們先看一個簡單例子:

dechin@ubuntu2004:~/projects/pytorch$ cat pytorch.def 
Bootstrap: docker
From: ubuntu
%post
    cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
    sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
    sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
    apt-get -y update
    apt -y install python
    apt -y install python3-pip
    pip3 install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

這個例子就實現(xiàn)了pytorch整個的容器化安裝流程,但是這里不建議大家直接使用我寫的這個def文件來制作鏡像,這里面最后一步安裝pytorch的指令,需要適配自己本地的環(huán)境進行調(diào)整。下面解釋一下這些指令的含義:

  • Bootstrap用于指定下載的倉庫類型,建議是選取docker,因為這里面的鏡像是最多的。
  • From用于指定一個基礎(chǔ)鏡像的版本,因為ubuntu是一個使用比較廣泛的發(fā)行版,因此我們指定ubuntu的時候,腳本會自動從dockerhub上面尋找最新版本的ubuntu鏡像進行下載。當(dāng)然我們也可以指定一個特殊的版本,比如可以指定為ubuntu:16.04。
  • %post是在容器鏡像中執(zhí)行的系統(tǒng)指令,這些指令執(zhí)行完成后生成的文件等會被打包保存到我們的鏡像sif文件中。
  • 類似的指令還有%environment,可用于配置export環(huán)境變量,還有%runscript可用于執(zhí)行一些腳本命令。
  • cpapt-get update這4個步驟,是在容器內(nèi)更新系統(tǒng)鏡像源,我們采用的是華為云的鏡像源https://mirrors.huaweicloud.com/,一般國內(nèi)的鏡像源在使用apt下載東西的時候會有比較明顯的加速效果,當(dāng)然這個鏡像源倉庫還有很多其他的源,比如pip源等等。
  • 在這個鏡像文件中我們可以直接使用apt來安裝python和pip,但是注意安裝的時候要加上-y的選項,這個選項可以幫助我們默認跳過需要手動確認的項目,我們知道在apt安裝的過程經(jīng)常會暫停下來,要求輸入一個y之后才能繼續(xù)往下安裝,但是這個在使用鏡像的時候是沒辦法支持手動的輸入的。
  • 最后我們按照參考鏈接1中給出的安裝指令進行安裝,注意要匹配好自己的環(huán)境,本文采用的配置項目如下截圖所示:

構(gòu)建sif文件

在完成上述步驟的鏡像配置文件后,可以用如下的指令進行鏡像的構(gòu)建:

sudo singularity build pytorch.sif pytorch.def

在執(zhí)行的過程中會有大量的信息彈出,我們只關(guān)注下開頭和結(jié)尾即可:

INFO:    Starting build...
Getting image source signatures
Copying blob 345e3491a907 skipped: already exists  
Copying blob 57671312ef6f skipped: already exists  
Copying blob 5e9250ddb7d0 [--------------------------------------] 0.0b / 0.0b
Copying config 7c6bc52068 done  
Writing manifest to image destination
Storing signatures
2021/06/15 09:44:57  info unpack layer: sha256:345e3491a907bb7c6f1bdddcf4a94284b8b6ddd77eb7d93f09432b17b20f2bbe
2021/06/15 09:44:58  info unpack layer: sha256:57671312ef6fdbecf340e5fed0fb0863350cd806c92b1fdd7978adbd02afc5c3
2021/06/15 09:44:58  info unpack layer: sha256:5e9250ddb7d0fa6d13302c7c3e6a0aa40390e42424caed1e5289077ee4054709
INFO:    Running post scriptlet
+ cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
...
Successfully installed numpy-1.20.3 pillow-8.2.0 torch-1.8.1+cu111 torchaudio-0.8.1 torchvision-0.9.1+cu111 typing-extensions-3.10.0.0
INFO:    Creating SIF file...
INFO:    Build complete: pytorch.sif

一般如果有報錯的話中途就會停下來,如果看到上面的這個指令,基本就構(gòu)建成功了,并且可以在當(dāng)前目錄下看到一個新生成的sif文件:

dechin@ubuntu2004:~/projects/pytorch$ ll
總用量 4086900
drwxrwxr-x 2 dechin dechin       4096 6月  15 09:53 ./
drwxrwxr-x 8 dechin dechin       4096 6月  15 09:34 ../
-rw-rw-r-- 1 dechin dechin        498 6月  15 09:44 pytorch.def
-rwxr-xr-x 1 dechin dechin 4184969216 6月  15 09:53 pytorch.sif*

這個就是我們構(gòu)建好的pytorch的鏡像了。

PyTorch鏡像測試

首先我們看一下鏡像中python的版本:

dechin@ubuntu2004:~/projects/pytorch$ singularity exec pytorch.sif python3 --version
Python 3.8.5

因為pytorch對python的版本沒有比較特殊的要求,所以這里3.7或3.8或3.9都是可以的。接下來執(zhí)行一個pytorch官方給出的測試示例,生成一個隨機數(shù)矩陣:

dechin@ubuntu2004:~/projects/pytorch$ singularity exec pytorch.sif python3 -c "import torch;x = torch.rand(5, 3);print(x)"
tensor([[0.2045, 0.2268, 0.2132],
        [0.4473, 0.3536, 0.8075],
        [0.0951, 0.0261, 0.5950],
        [0.7112, 0.0449, 0.4564],
        [0.8697, 0.7536, 0.7823]])

上述運行的方式是采用了python3 -c的方式,省去了再寫一個py文件的繁瑣,只是需要注意的地方,在于我們要將正常py文件中的換行符替換成這里的分號,這里執(zhí)行成功了,那么就代表我們的容器化安裝是成功了。但是我們需要進一步的確認下,torch能否正常的使用cuda環(huán)境,因為這是GPU加速的重點配置。測試可以使用官方給出的這個運行指令:

dechin@ubuntu2004:~/projects/pytorch$ singularity exec pytorch.sif python3 -c "import torch;print(torch.cuda.is_available())"
False

第一次看到這個結(jié)果的時候,我優(yōu)先考慮的是,是否cudatoolkits沒有安裝的原因?因為在MindSpore中對于這個cudatoolkits是有依賴的,并且使用的是conda來安裝,但是這里我們直接裝的python沒有采取conda的方法。但是轉(zhuǎn)念一想,這里的Singularity運行指令上沒有指定GPU環(huán)境,更有可能是這個問題。因此加上了--nv的選項,運行結(jié)果如下:

dechin@ubuntu2004:~/projects/pytorch$ singularity exec --nv pytorch.sif python3 -c "import torch;print(torch.cuda.is_available())"
True

可以看到pytorch的GPU版本是運行成功了的,或者應(yīng)該說成功調(diào)用到了GPU。

Tricky的配置

使用容器化的方案來運行的話,在運行環(huán)境的隔離上面是做的非常好的,但是有一個缺點就是運行的指令太長了,雖然容器鏡像的位置是固定不變的,但是每次執(zhí)行這么一大串指令總覺得麻煩,因此就想到了在環(huán)境變量配置文件.bashrc中加上一個聲明,用更加簡短的語句來替代長指令:

alias mindspore='singularity exec --nv /home/dechin/tools/singularity/mindspore-gpu_1.2.0.sif python'
alias pytorch='singularity exec --nv /home/dechin/projects/pytorch/pytorch.sif python3'

寫入到.bashrc文件后,需要source ~/.bashrc指令來使得配置生效,然后我們就可以使用pytorch這樣的指令來運行一些pytorch的代碼或者命令:

dechin@ubuntu2004:~/projects/pytorch$ pytorch -c "import torch;print('import success')"
import success

總結(jié)概要

這篇文章主要介紹Facebook所主導(dǎo)的機器學(xué)習(xí)框架PyTorch的容器化安裝方法,基于HPC環(huán)境常用的Singularity高性能容器,并且兼容與結(jié)合了Docker容器鏡像的生態(tài),非常的友好。在容器化的編程環(huán)境中,我們不僅可以避免不同框架對于python庫或者系統(tǒng)軟件版本的依賴沖突,還可以很大程度上解決因為沒有root權(quán)限以及網(wǎng)絡(luò)外訪權(quán)限的環(huán)境下所帶來的極大的麻煩,故推薦使用這種方案進行安裝和運行。

版權(quán)聲明

本文首發(fā)鏈接為:https://www.cnblogs.com/dechinphy/p/pytorch.html

作者ID:DechinPhy

更多原著文章請參考:https://www.cnblogs.com/dechinphy/

打賞專用鏈接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

騰訊云專欄同步:https://cloud.tencent.com/developer/column/91958

參考鏈接

https://pytorch.org/get-started/locally/

到此這篇關(guān)于從零開始制作PyTorch的Singularity容器鏡像的文章就介紹到這了,更多相關(guān)PyTorch Singularity鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 基礎(chǔ)教程之str和repr的詳解

    Python 基礎(chǔ)教程之str和repr的詳解

    這篇文章主要介紹了Python 基礎(chǔ)教程之str和repr的詳解的相關(guān)資料,主要說明他們之家的區(qū)別,通過此文希望能幫助到大家,幫助大家理解這部分內(nèi)容,需要的可以參考下
    2017-08-08
  • python排序算法的簡單實現(xiàn)方法

    python排序算法的簡單實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于python排序算法的簡單實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Python對中國500強排行榜數(shù)據(jù)進行可視化分析實戰(zhàn)

    Python對中國500強排行榜數(shù)據(jù)進行可視化分析實戰(zhàn)

    這篇文章主要介紹了Python對中國500強排行榜數(shù)據(jù)進行可視化分析實戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 淺談numpy中函數(shù)resize與reshape,ravel與flatten的區(qū)別

    淺談numpy中函數(shù)resize與reshape,ravel與flatten的區(qū)別

    這篇文章主要介紹了淺談numpy中函數(shù)resize與reshape,ravel與flatten的區(qū)別介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • pytorch實現(xiàn)特殊的Module--Sqeuential三種寫法

    pytorch實現(xiàn)特殊的Module--Sqeuential三種寫法

    今天小編就為大家分享一篇pytorch實現(xiàn)特殊的Module--Sqeuential三種寫法。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 解決DataFrame排序sort的問題

    解決DataFrame排序sort的問題

    今天小編就為的大家分享一篇解決DataFrame排序sort的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • django+js+ajax實現(xiàn)刷新頁面的方法

    django+js+ajax實現(xiàn)刷新頁面的方法

    這篇文章主要介紹了django+js+ajax實現(xiàn)刷新頁面的方法,結(jié)合實例形式分析了django實現(xiàn)ajax刷新頁面功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • selenium+headless chrome爬蟲的實現(xiàn)示例

    selenium+headless chrome爬蟲的實現(xiàn)示例

    這篇文章主要介紹了selenium+headless chrome爬蟲的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • flask實現(xiàn)python方法轉(zhuǎn)換服務(wù)的方法

    flask實現(xiàn)python方法轉(zhuǎn)換服務(wù)的方法

    flask是一個web框架,可以通過提供的裝飾器@server.route()將普通函數(shù)轉(zhuǎn)換為服務(wù),這篇文章主要介紹了flask實現(xiàn)python方法轉(zhuǎn)換服務(wù),需要的朋友可以參考下
    2022-05-05
  • Python爬蟲包BeautifulSoup異常處理(二)

    Python爬蟲包BeautifulSoup異常處理(二)

    這篇文章主要為大家詳細介紹了Python爬蟲包BeautifulSoup的異常處理,具有一定的參考價值,感興趣的朋友可以參考一下
    2018-06-06

最新評論