成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

用Docker玩轉(zhuǎn)深度學習

ad6623 / 615人閱讀

摘要:你可以發(fā)布一個可再現(xiàn)的機器學習項目,它幾乎不需要用戶設(shè)置,不需要用戶花小時去下載依賴或者報錯相反,你可以這樣做這種方法可以直接運行你的腳本,所有的依賴包括支持都幫你準備好了。應(yīng)該怎么做針對機器學習的使用場景,你較好把你的代碼發(fā)布到上。

Docker提供了一種將Linux Kernel中需要的內(nèi)容靜態(tài)鏈接到你的應(yīng)用中的方法。Docker容器可以使用宿主機的GPUs,因此我們可以把TensorFlow或者機器學習代碼的任何依賴都鏈接到容器中,這樣其他小伙伴就可以使用你的工作成果了。

你可以發(fā)布一個可再現(xiàn)的機器學習項目,它幾乎不需要用戶設(shè)置,不需要用戶花6小時去下載依賴或者報錯:

# 6 hours of installing dependencies

python train.py

> ERROR: libobscure.so cannot open shared object

相反,你可以這樣做:

dockrun tensorflow/tensorflow:0.12.1-gpu python train.py

TRAINING SUCCESSFUL

這種方法可以直接運行你的train.py腳本,所有的依賴包括GPU支持都幫你準備好了。

Docker容器是短暫的,不需要持久化任何數(shù)據(jù),你可以把Docker容器想象成1G大的tensorflow.exe,它把你所有的依賴都編譯進去了。

Why

開源軟件因為有難以重現(xiàn)、復(fù)雜的依賴網(wǎng)絡(luò):不同版本的編譯器、丟失頭文件、錯誤的庫路徑等,所有這些導(dǎo)致在軟件的安裝配置階段浪費你大量的時間。

使用Docker時,理論上你只要要讓Docker正確工作,然后你所有的代碼就可以運行了。幸運的是,Docker已經(jīng)融資1.8億美元,并將一部分投入到docker開發(fā)中,轉(zhuǎn)換成可以工作的軟件。

我打算在Linux上用Docker,Mac上的用法應(yīng)該一樣,除了不支持GPU。

應(yīng)該怎么做

針對機器學習的使用場景,你較好把你的代碼發(fā)布到GitHub repo上。你的依賴通常表示成一系列Linux命令行,這些命令行能復(fù)制粘帖到終端中運行。(譯者注:即依賴放到Dockerfile中)。

Docker用一個命令替換第二部分(譯者注:第一部分是把代碼放到GitHub repo上,第二部分是在Docker鏡像中執(zhí)行命令行,配置你的依賴),該命令將拉取運行代碼所需的正確docker鏡像。你會把所有的依賴集成到3G大(壓縮后)的鏡像中,用戶可以直接下載使用你的鏡像。

我們看看Torch pix2pix的實現(xiàn)方式:

git clone https://github.com/phillipi/pix2pix.git

cd pix2pix

bash datasets/download_dataset.sh facades

# install dependencies for some time

...

# train

env

DATA_ROOT=datasets/facades

name=facades

niter=200

save_latest_freq=400

which_direction=BtoA

display=0

gpu=0

cudnn=0

th train.lua

盡管訓練腳本的依賴很少(做到這樣很偉大了),但是腳本使用的工具卻有很多依賴,而且這些依賴文檔不全面,組合在一個鏡像中非常復(fù)雜繁瑣。

如果你不小心弄亂了依賴,可能會遇到下面的錯誤:

luajit: symbol lookup error:

/root/torch/install/lib/lua/5.1/libTHNN.so: undefined symbol: TH_CONVERT_ACCREAL_TO_REAL

Docker提供了一種方法,通過Docker Hub分發(fā)二進制鏡像(譯者注:原文是artifact)。

Dockerized

在Linux server上直接安裝docker和nvidia-docker,Docker容器可以訪問GPU,沒有明顯的性能損失。

如果你在Mac上你需要安裝Docker for Mac(https://docs.docker.com/docker-for-mac/),在Mac上使用Docker我還是有很多經(jīng)驗的?,F(xiàn)在你還不能在GPU上運行任何東西,Mac幾乎不再支持CUDA。你可以在CPU模式下測試,它工作良好,只是有點慢。

我這里有一個在Ubuntu 16.04 LTS上安裝Docker的腳本,適用于云服務(wù)提供商:

curl -fsSL https://affinelayer.com/docker/setup-docker.py | sudo python3

裝好Docker后,運行pix2pix代碼:

sudo docker run --rm --volume /:/host --workdir /host$PWD affinelayer/pix2pix

下面是完整的腳本,多行顯示方便閱讀:

git clone https://github.com/phillipi/pix2pix.git

cd pix2pix

bash datasets/download_dataset.sh facades

sudo docker run

--rm

--volume /:/host

--workdir /host$PWD

affinelayer/pix2pix

env

DATA_ROOT=datasets/facades

name=facades

niter=200

save_latest_freq=400

which_direction=BtoA

display=0

gpu=0

cudnn=0

th train.lua

它會下載我構(gòu)建的鏡像(鏡像包含Torch,支持nvidia-docker),大小在3G。

運行后會打印debug信息,到這里已經(jīng)很棒了。但運行在GPU上更重要,因為pix2pix的架構(gòu)設(shè)計在GPU上可以獲得足夠的訓練速度。

GPU

在GPU上運行只需要把上面命令中的docker鏡像替換成nvidia-docker。

nvidia-docker不包含在標準Docker中,所以你需要額外的工作。下面的腳本可以在Ubuntu 16.04 LTS上配置nvidia-docker:

curl -fsSL https://affinelayer.com/docker/setup-nvidia-docker.py | sudo python3

大概花費5分鐘,而且我已經(jīng)在AWS和Azure上測試過了。兩者都是NVIDIA K80卡,額定值為2.9 FP32 TFLOPS。

nvidia-docker配置好運行:

sudo nvidia-docker run --rm nvidia/cuda nvidia-smi

假設(shè)上面的命令正常運行,重新運行pix2pix的腳本:

sudo nvidia-docker run

--rm

--volume /:/host

--workdir /host$PWD

affinelayer/pix2pix

env

DATA_ROOT=datasets/facades

name=facades

niter=200

save_latest_freq=400

which_direction=BtoA

display=0

th train.lua

它使用相同的Docker鏡像,但是支持GPU。

提示

使用Python和TensorFlow時,有許多有用的命令行選項:

--env PYTHONUNBUFFERED=x

這會讓python立即打印輸出,而不是先緩存起來。

--env CUDA_CACHE_PATH=/host/tmp/cuda-cache

這使得你每次啟動Tensorflow時都沒有1分鐘的延遲,它必須從頭重新編譯CUDA內(nèi)核。

這兩個選項集成到Docker命令行中后:

sudo nvidia-docker run

--rm

--volume /:/host

--workdir /host$PWD

--env PYTHONUNBUFFERED=x

--env CUDA_CACHE_PATH=/host/tmp/cuda-cache

這個命令很長,你可以定義命令別名:

alias dockrun="sudo nvidia-docker run --rm --volume /:/host --workdir /host$PWD --env PYTHONUNBUFFERED=x --env CUDA_CACHE_PATH=/host/tmp/cuda-cache"

定義別名后運行pix2pix-tensorflow(https://github.com/affinelayer/pix2pix-tensorflow):

git clone https://github.com/affinelayer/pix2pix-tensorflow.git

cd pix2pix-tensorflow

python tools/download-dataset.py facades

dockrun affinelayer/pix2pix-tensorflow python pix2pix.py

--mode train

--output_dir facades_train

--max_epochs 200

--input_dir facades/train

--which_direction BtoA

pix2pix-tensorflow除了Tensorflow 0.12.1(當時當前發(fā)布的版本)之外沒有別的依賴關(guān)系。但是即使如此,第一個GitHub issue是一個用戶使用錯誤版本的Tensorflow導(dǎo)致的。

如何集成

幸運地是,集成到你自己的項目中非常簡單。

你先新建空目錄,新建文件Dockerfile。然后構(gòu)建鏡像:

mkdir docker-build

cd docker-build

curl -O https://affinelayer.com/docker/Dockerfile

sudo docker build --rm --no-cache --tag pix2pix .

構(gòu)建結(jié)束后你就可以查看鏡像了:

sudo docker images pix2pix

REPOSITORY ? ? ? ? ?TAG ? ? ? ? ? ? ? ? IMAGE ID ? ? ? ? ? ?CREATED ? ? ? ? ? ? SIZE

pix2pix ? ? ? ? ? ? latest ? ? ? ? ? ? ?bf5bd6bb35f8 ? ? ? ?3 seconds ago ? ? ? 11.38 GB

通過docker push把你的鏡像推送到Docker Hub上:

sudo docker tag pix2pix /pix2pix

sudo docker push /pix2pix

Docker新用戶可以先使用我的鏡像。docker提供了不依賴Docker Hub分發(fā)鏡像的機制,但是他用起來不是很方便:

# save image to disk, this took about 18 minutes

sudo docker save pix2pix | gzip > pix2pix.image.gz

# load image from disk, this took about 4 minutes

gunzip --stdout pix2pix.image.gz | sudo docker load

再現(xiàn)性

雖然Docker鏡像容易復(fù)制,但是從Dockerfile到鏡像的轉(zhuǎn)換不一定是可復(fù)制的。你可以使用下面的命令檢查鏡像的構(gòu)建歷史記錄:

sudo docker history --no-trunc pix2pix

它不會顯示被添加到鏡像中的所有文件。比如,如果你的Dockerfile包含git clone或者apt-get update,很可能在兩個不同的日子里構(gòu)建產(chǎn)生不同的鏡像。

另外,如果docker構(gòu)建時指定了cpu版本,那么鏡像在其它機器上很可能不工作。

只要我們分發(fā)的是Docker鏡像,那么它就是可再現(xiàn)的。如果你想通過Dockerfile再現(xiàn)鏡像,如果你不非常小心編寫構(gòu)建Dockerfile的話,很可能失敗。(譯者注:鏡像構(gòu)建好后不會變,可再現(xiàn),但是從Dockerfile構(gòu)建,很可能因為cpu版本、git clone倉庫更新而不可再現(xiàn)鏡像)

目前還不清楚這些優(yōu)勢是否值得付出努力,但是如果你的Dockerfile是從頭開始構(gòu)建的,并且使用--network none選項,大多數(shù)情形鏡像是可重現(xiàn)的。

如果鏡像再現(xiàn)很容易,這項技術(shù)將會很酷?,F(xiàn)在Docker已經(jīng)取得實質(zhì)性進展,讓依賴再現(xiàn)成為可能,這是偉大的進步。

譯者說

這篇文章介紹了Docker與深度學習結(jié)合的例子。Docker的優(yōu)勢是解決了依賴的問題,方便分發(fā)個人工作成果;缺點是不直接支持GPU,需要開發(fā)者自己安裝nvidia-docker。

文章最后作者論述了Docker鏡像的可再現(xiàn)問題,總結(jié)如下:

分發(fā)的是Docker鏡像,那么基本可以保證鏡像的一致性(可再現(xiàn))。

分發(fā)的是Dockerfile,Dockerfile中存在git clone或者apt update,會因為時間因素導(dǎo)致clone的repo更新導(dǎo)致鏡像不一致。

歡迎加入本站公開興趣群

商業(yè)智能與數(shù)據(jù)分析群

興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價值的辦法,實際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉庫,數(shù)據(jù)挖掘工具,報表系統(tǒng)等全方位知識

QQ群:81035754

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/4473.html

相關(guān)文章

  • 玩轉(zhuǎn) Dcoker:Hello World, 開發(fā)環(huán)境和你的應(yīng)

    摘要:關(guān)于本文是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的機器上。比如說,通過堆棧來開發(fā)應(yīng)用的每個部分。開發(fā)環(huán)境之前提到的,能夠很容易的引入文件并且使用它們。 關(guān)于本文Docker 是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的 Linux 機器上。幾乎沒有性能開銷,可以很容...

    SillyMonkey 評論0 收藏0
  • 玩轉(zhuǎn) React(一)- 前言

    摘要:本人計劃編寫一個針對中初級前端開發(fā)者學習的系列教程玩轉(zhuǎn)。使用的原因是新的語言規(guī)范開發(fā)效率更高代碼更優(yōu)雅,尤其是基于開發(fā)的項目。其次也是目前特別流行的一個前端框架,截止目前,上有將近萬,國內(nèi)一二線互聯(lián)網(wǎng)公司都有深度依賴開發(fā)的項目。 本人計劃編寫一個針對中初級前端開發(fā)者學習 React 的系列教程 - 《玩轉(zhuǎn) React》。 文章更新頻率:每周 1 ~ 2 篇。 目錄 玩轉(zhuǎn) React(...

    waltr 評論0 收藏0
  • 如何玩轉(zhuǎn)網(wǎng)絡(luò)安全下的深度學習?最全的學習資料清單看這里

    摘要:近日,外媒刊登了一篇機器學習與網(wǎng)絡(luò)安全相關(guān)的資料大匯總,文中列出了相關(guān)數(shù)據(jù)源的獲取途徑,優(yōu)秀的論文和書籍,以及豐富的教程。這個視頻介紹了如何將機器學習應(yīng)用于網(wǎng)絡(luò)安全探測,時長約小時。 近日,外媒 KDnuggets 刊登了一篇機器學習與網(wǎng)絡(luò)安全相關(guān)的資料大匯總,文中列出了相關(guān)數(shù)據(jù)源的獲取途徑,優(yōu)秀的論文和書籍,以及豐富的教程。大部分都是作者在日常工作和學習中親自使用并認為值得安利的純干貨。數(shù)...

    leanote 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<