一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Tensorflow Docker是我的深度學(xué)習(xí)開發(fā)環(huán)境,你的呢?

 田杰4 2017-06-23


在這篇文章中,研究員 KILLIAN 介紹了自己的深度學(xué)習(xí)開發(fā)環(huán)境:Tensorflow + Docker + PyCharm + OSX Fuse + Tensorboard。但根據(jù)自己的預(yù)算、語言習(xí)慣、開發(fā)需求,每個(gè)人都會(huì)配置不同的開發(fā)環(huán)境,也遇到過各種各樣的難題。因此,我們?cè)谖暮蟾缴狭艘环菡{(diào)查問卷,希望能了解眾多不同開發(fā)者的深度學(xué)習(xí)環(huán)境,最終匯集成一篇文章為大家提供不同的洞見。

Tensorflow+Docker是我的深度學(xué)習(xí)開發(fā)環(huán)境,你的呢?

Killian 的開發(fā)環(huán)境

在嘗試用不同的東西來配置深度學(xué)習(xí)環(huán)境這個(gè)過程中,我花費(fèi)了相當(dāng)多的時(shí)間。因此我想著把自己目前的工作流程整理成文檔,希望可以幫助到嘗試著做同樣事情的人。

目標(biāo)

在開始創(chuàng)建我的模型之前,我腦海中會(huì)有幾個(gè)清晰的目標(biāo),即理想中會(huì)使用的開發(fā)環(huán)境。下面是我會(huì)在這篇博文中詳細(xì)介紹的幾個(gè)高層次目標(biāo):

  • 在本地機(jī)器 (一個(gè)標(biāo)準(zhǔn)的 MacBookPro 筆記本電腦) 上用 Pycharm 編輯我的代碼

  • 用一個(gè)強(qiáng)大的遠(yuǎn)程機(jī)器來訓(xùn)練我的模型

  • 和我的同事們沒有任何沖突地使用這臺(tái)遠(yuǎn)程機(jī)器

  • 在本地和遠(yuǎn)程機(jī)器上的 docker 容器中以開發(fā)/產(chǎn)品的模式來運(yùn)行/調(diào)試我的 Tensorflow 代碼

  • 當(dāng)我的模型在遠(yuǎn)程機(jī)器上訓(xùn)練的時(shí)候,把模型的性能圖形化地實(shí)時(shí)顯示在本地機(jī)器上

致謝

我想感謝我的實(shí)驗(yàn)室同伴 Chris Saam,因?yàn)樗o我指明了幾個(gè)我會(huì)在本文中提到的有趣的工具。

一次安裝

遠(yuǎn)程機(jī)器上

因此,在做其他任何事情之前,你可能需要做這幾件事情。順便說一下,在這篇文章中我會(huì)提及在你的遠(yuǎn)程機(jī)器上 (帶有所有的 GPU 的附屬項(xiàng)目) 使用 super duper,在這臺(tái)遠(yuǎn)程機(jī)器上你計(jì)劃訓(xùn)練你的深度學(xué)習(xí)機(jī)器模型。

安裝 Nvidia-docker: 你需要做的第一件事情就是安裝 Nvidia-docker。Docker 確實(shí)是一個(gè)很酷的工具,但是它目前并不能讓你最有效地使用任何一個(gè) NVIDIA 的 GPU 硬件或者 CUDA 驅(qū)動(dòng)程序,所以你不可能拿 docker 來訓(xùn)練你的深度模型。Nvidia-docker 為你解決了這個(gè)問題,并且看上去更像一個(gè)普通的 docker。在常規(guī)的 Docker 命令之上,它還提供了一些選項(xiàng),可以讓你更有效地管理你的 NVIDIA GPU 硬件。

Tensorflow+Docker是我的深度學(xué)習(xí)開發(fā)環(huán)境,你的呢?

圖 1: NVIDIA-Docker (由 NVIDIA-Docker 提供)

安裝 Slurm:如果你計(jì)劃和你的同事共享那個(gè)深度學(xué)習(xí)機(jī)器,你也許會(huì)想著安裝像 SLURM 一樣的工具。通過限制默認(rèn)情況下可以使用的命令集,SLURM 讓您對(duì)團(tuán)隊(duì)同事在機(jī)器上的權(quán)限擁有更好的控制,并且強(qiáng)制每個(gè)成員使用特定的專用 GPU/CPU 資源在「作業(yè)」環(huán)境中運(yùn)行他們的代碼。如果您希望避免任何因團(tuán)隊(duì)同事同時(shí)訪問這臺(tái)機(jī)器而產(chǎn)生的資源爭(zhēng)奪,這確實(shí)是有用的。

把文件夾設(shè)置標(biāo)準(zhǔn)化:如果您計(jì)劃和同事共享機(jī)器,就可以讓成員之間的文件夾結(jié)構(gòu)標(biāo)準(zhǔn)化,這也是一個(gè)好主意。我的深度學(xué)習(xí)機(jī)器的設(shè)置方式如下:

  • /home/myusername 文件夾包含你自己的私有項(xiàng)目代碼。

  • /data 文件夾包含團(tuán)隊(duì)在項(xiàng)目過程中共享的數(shù)據(jù)集。

  • /work 文件夾包含當(dāng)前實(shí)驗(yàn)需要的特定數(shù)據(jù)集。這個(gè)文件夾比/data 文件夾更低一級(jí),但是它在訓(xùn)練過程中提供了更快的內(nèi)存訪問。

本地機(jī)器上

安裝 OS X Fuse: 如果你像我一樣正在使用最新版本的 OS X, 你可能會(huì)想著安裝 OS X Fuse。OS X Fuse 可以讓你用 SFTP/SSH 在本地 Finder 中從遠(yuǎn)程機(jī)器上掛載文件夾?;蛘呷绻悴幌牖ㄙM(fèi)時(shí)間去掛載你的遠(yuǎn)程/home 文件夾,你可以簡(jiǎn)單地使用 GIT PUSH/PULL 在本地機(jī)器和遠(yuǎn)程機(jī)器之間傳送代碼,但是這樣效率不高。所以在長(zhǎng)時(shí)間運(yùn)行的過程中掛載這些文件夾會(huì)替你節(jié)省大量時(shí)間。

設(shè)置一個(gè)遠(yuǎn)程的 python 解釋器:在本地機(jī)器和遠(yuǎn)程機(jī)器上使用同一個(gè) docker 映像是避免以后可能會(huì)發(fā)生的環(huán)境配置問題的另一個(gè)方法。Pycharm 有這個(gè)很酷的功能,可以讓你在 docker 容器中運(yùn)行代碼。在 Pycharm 中進(jìn)行任何設(shè)置之前,請(qǐng)保證你已經(jīng)獲取了正確 TensorFlow 的 docker 映像。在本地機(jī)器上,你可能僅僅需要以下步驟就可以獲取 TensorFlow 的 docker 映像:

# 啟動(dòng)你的 docker 虛擬機(jī)

docker-machine start default

# 獲取最新 TensorFlow CPU 版本的 docker 映像

docker pull gcr.io/tensorflow/tensorflow:latest

當(dāng)你獲取期望的 docker 映像之后,就去設(shè)置你的 Pycharm Project Interpreter。在 Pycharm 中,轉(zhuǎn)到 Preferences>Project Interpreter>Add Remote(如下圖)。當(dāng) docker 虛擬機(jī)的實(shí)例在你的本地機(jī)器上開始運(yùn)行時(shí),就需要選擇 docker 配置(Docker configuration)。一旦它連接到你的 docker 虛擬機(jī),你應(yīng)該會(huì)看到你剛才獲取的 TensorFlow 映像已經(jīng)在可用映像的列表中了。當(dāng)這個(gè)設(shè)置好之后,只要 pycharm 連接好了,你就可以開始了。

每日常規(guī)程序

本地機(jī)器上

掛載遠(yuǎn)程文件夾:你想做的第一件事情就是確保你可以訪問你要在本地機(jī)器上運(yùn)行的腳本。所以你要做的第一件事情就是在你的 Mac 上用 OS X Fuse 掛載 home/myusername 文件夾,并且選擇性地掛載深度學(xué)習(xí)數(shù)據(jù)。你可能希望為所有這些命令起一些別名,因?yàn)樗鼈兇_實(shí)有些長(zhǎng)。

# 掛載你的遠(yuǎn)程 home 文件夾

sshfs -o uid=$(id -u) -o gid=$(id -g) myusername@mydeeplearningmachine.com:/home/myusername/ /LocalDevFolder/MountedRemoteHomeFolder

# 掛載你的遠(yuǎn)程數(shù)據(jù)文件夾 (有選擇地)

sshfs -o uid=$(id -u) -o gid=$(id -g) myusername@mydeeplearningmachine.com:/data/myusername/ /LocalDevFolder/MountedRemoteDataFolder

這里使用 uid 和 gid 來映射本地和遠(yuǎn)程機(jī)器的用戶和組 ID,因?yàn)檫@些可能會(huì)有所不同。

在本地機(jī)器上啟動(dòng) docker:接下來,我們想保證 pycharm 會(huì)訪問正確的庫來在本地編譯我們的代碼。為了做到這個(gè),僅僅需要在本地啟動(dòng)一個(gè) docker 虛擬機(jī)。如果你在設(shè)置中沒有改變?nèi)魏蔚胤?,Tensorflow 的 CPU 映像應(yīng)該已經(jīng)在你的本地 docker 環(huán)境中了。

docker-machine start default

打開 pycharm,并選擇你剛才掛載的 home 文件夾中的項(xiàng)目。轉(zhuǎn)到 Project Interpreter 參數(shù)選擇中,在項(xiàng)目解釋器的可用列表中選擇你之前就創(chuàng)建好的遠(yuǎn)程 TensorFlow 解釋器,pycharm 應(yīng)該能夠正確地編譯你的代碼。這時(shí)候,你可以隨時(shí)隨地使用你的代碼,并且改變?nèi)魏文阆胍淖兊臇|西。

遠(yuǎn)程機(jī)器上

Ok,你已經(jīng)在 pycharm 中用一項(xiàng)新功能更新了你的代碼,然后你希望訓(xùn)練/測(cè)試你的模型。

用 SSH 遠(yuǎn)程登錄你的機(jī)器:你需要做的第一件事就是簡(jiǎn)單地遠(yuǎn)程登錄你的深度學(xué)習(xí)機(jī)器。

ssh myusername@mydeeplearningmachine.com

運(yùn)行一個(gè) SLURM 任務(wù): 在你進(jìn)行下一步之前,請(qǐng)確保你的團(tuán)隊(duì)中沒有其他成員正在運(yùn)行任務(wù)。這會(huì)阻止你的任務(wù)得到它所需要的資源,所以檢查一下目前有哪些任務(wù)正運(yùn)行在遠(yuǎn)程機(jī)器上總會(huì)是一個(gè)不錯(cuò)的做法。使用 SLURM 做到這件事,只需要運(yùn)行一下 squeue 命令即可,它會(huì)列出目前正運(yùn)行在機(jī)器上的任務(wù)。如果由于某些原因你之前的某個(gè)任務(wù)仍然在運(yùn)行,你可以使用 scancel 命令來取消它。在確定沒有其他任務(wù)在運(yùn)行之后,讓我們開始一個(gè)新任務(wù)吧。你可以通過以下的命令來開始一個(gè)新的任務(wù)。

srun --pty --share --ntasks=1 --cpus-per-task=9 --mem=300G --gres=gpu:15 bash

srun 命令給出了相當(dāng)多的選項(xiàng)來讓你指定一個(gè)特定的任務(wù)需要哪些資源。在這個(gè)例子中,cpus-per-task、 mem 以及 gres 選項(xiàng)讓你指定這個(gè)任務(wù)分別需要的 CPU 的數(shù)量、總體內(nèi)存以及 GPU 的數(shù)量。pty 選項(xiàng)只是提供一個(gè)漂亮的命令行界面。

啟動(dòng) Nvidia docker:既然你已經(jīng)得到了為你的任務(wù)所分配的資源,那么,啟動(dòng)一個(gè) docker 容器來在正確的環(huán)境中運(yùn)行你的代碼吧。與使用常規(guī)的 docker 有所不同,這里我們會(huì)使用 NVIDIA-Docker 來充分地利用我們的 GPU。另外,為了充分利用你的硬件,請(qǐng)保證你運(yùn)行的是 TensorFlow 的 GPU docker 映像而不是 docker CPU 映像。別忘了使用 - v 選項(xiàng)來在 docker 容器中掛載你的項(xiàng)目文件夾。當(dāng)你在那個(gè)容器中以后,你就可以簡(jiǎn)單地使用常規(guī)的 python 命令來運(yùn)行你的代碼了。

# 啟動(dòng)你的容器

nvidia-docker run -v /home/myusername/MyDeepLearningProject:/src -it -p 8888:8888 gcr.io/tensorflow/tensorflow:latest-gpu /bin/bash

# 別忘記切換到你的源碼文件夾

cd src

# 運(yùn)行你的模型

python myDLmodel.py

本地機(jī)器上

啟動(dòng) Tensorboard 可視化:你還差一點(diǎn)點(diǎn)就做完了。你的代碼現(xiàn)在正在順利地運(yùn)行,然后你想著使用 tensorboard 去實(shí)時(shí)地看一下你的模型中的變量是如何變化的。實(shí)際上這是最簡(jiǎn)單的一部分。首先,確保你知道自己本地 docker 機(jī)對(duì)應(yīng)的 IP 地址。你可以使用下面的命令來做這件事:

docker-machine ls

然后,切換到已經(jīng)掛載的遠(yuǎn)程 home 文件夾,并啟動(dòng)一個(gè) TensorFlow docker 容器。因?yàn)槟阋呀?jīng)在本地機(jī)器上啟動(dòng)了一個(gè) Tensorflow docker 容器,所以要確保你正在啟動(dòng)的是 CPU 版本的 docker 容器。如上面所述,不要忘記在 docker 容器中掛載你的項(xiàng)目文件夾。為了在本地機(jī)器可視化正在訓(xùn)練的模型,你還需要用 - p 選項(xiàng)將 Tensorboard 使用的端口號(hào)從容器映射到你的本地機(jī)器。

docker run -v /LocalDevFolder/MountedRemoteHomeFolder/MyDeepLearningProject:/src -p 6006:6006 -it gcr.io/tensorflow/tensorflow:latest /bin/bash

一旦你進(jìn)入 docker 容器,通過制定你的模型保存變量的路徑 (更可能是 checkpoint 文件夾的路徑) 來啟動(dòng) Tensorboard:

tensorboard—logdir=Checkpoints/LatestCheckpointFolder

如果一切進(jìn)展順利,你現(xiàn)在需要做的就是使用你最喜歡的瀏覽器轉(zhuǎn)到到 http://DOCKER_MACHINE_IP:6006,

這會(huì)顯示在 Tensorboard 中顯示你在模型中正在跟蹤的所有變量。

Tensorflow+Docker是我的深度學(xué)習(xí)開發(fā)環(huán)境,你的呢?

圖 2.Tensorboard 可視化 (由 Jimgoo 提供)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    熟妇久久人妻中文字幕| 免费在线播放一区二区| 夜夜躁狠狠躁日日躁视频黑人| 男人操女人下面国产剧情| 成人国产一区二区三区精品麻豆 | 国产精品十八禁亚洲黄污免费观看 | 日韩偷拍精品一区二区三区| 国产男女激情在线视频| 色婷婷久久五月中文字幕| 国产成人精品视频一二区| 亚洲视频一区二区久久久| 欧美乱码精品一区二区三| 激情综合网俺也狠狠地| 高清一区二区三区大伊香蕉| 久久老熟女一区二区三区福利| 国产一区在线免费国产一区| 亚洲一区二区三区四区| 中国美女偷拍福利视频| 欧美日韩精品视频在线| 九七人妻一区二区三区| 亚洲一区二区欧美激情| 天堂网中文字幕在线视频| 在线观看免费视频你懂的| 日韩精品你懂的在线观看| 男人大臿蕉香蕉大视频| 亚洲欧美日韩网友自拍| 国产亚洲不卡一区二区| 国内精品伊人久久久av高清| 丝袜av一区二区三区四区五区| 在线九月婷婷丁香伊人| 日本人妻精品中文字幕不卡乱码| 国产日韩欧美一区二区| 中文字幕一区二区三区中文| 日韩精品一区二区亚洲| 亚洲一区二区亚洲日本| 一区二区三区精品人妻| 欧美日韩精品综合一区| 丰满少妇高潮一区二区| 操白丝女孩在线观看免费高清| 91欧美激情在线视频| 激情爱爱一区二区三区|