無論是第一次設(shè)置TensorFlow的新手?jǐn)?shù)據(jù)科學(xué)愛好者,還是使用TB級數(shù)據(jù)的經(jīng)驗豐富的AI工程師,安裝庫、軟件包或者框架總是一個困難又繁瑣的過程。但是像Docker這樣的集裝箱化工具正在徹底改變著軟件的可重復(fù)性,只不過它們還沒有在數(shù)據(jù)科學(xué)和人工智能社區(qū)中流行起來。但隨著機器學(xué)習(xí)框架和算法的不斷發(fā)展,我們將很難花時間專注于學(xué)習(xí)所有相關(guān)的開發(fā)人員工具,尤其是那些與模型構(gòu)建過程沒有直接關(guān)聯(lián)的工具。
在這篇文章中,我將展示如何使用docker和python工具包datmo為任何流行的數(shù)據(jù)科學(xué)和AI框架快速配置環(huán)境。
一.Docker
1.docker是什么
該軟件于2013年由dotCloud 公司推出,發(fā)布以來一直備受關(guān)注和討論,被認(rèn)為可能會改變軟件行業(yè)。
2.為什么使用docker
如果讓你說出軟件開發(fā)最煩人的事情,那么環(huán)境配置必然是其中之一。例如開始編寫Python應(yīng)用程序,那么你的第一個步驟就是在您的計算機上安裝Python。軟件運行時,你不僅需要讓自己計算機上的環(huán)境需適合你的應(yīng)用程序按預(yù)期運行,并且還需要與生產(chǎn)環(huán)境相匹配。這就是所謂的環(huán)境一致性問題。這里面大量的重復(fù)勞動不說,還經(jīng)常出現(xiàn)系統(tǒng)不兼容等莫名其妙的問題,非常令人崩潰。很可能再自己機器上跑通了,但放到用戶的環(huán)境里,或者服務(wù)器上就出問題了。
那么可不可以在軟件安裝的時候把軟件需要的環(huán)境一并復(fù)制過去呢?虛擬機(virtual machine)就是帶環(huán)境安裝的一種解決方案。它可以在一種操作系統(tǒng)里面運行另一種操作系統(tǒng),但它的缺點很多:資源占用多、冗余步驟多、啟動慢等等。
Docker是一種全新的虛擬化方式。傳統(tǒng)虛擬機技術(shù)是虛擬出一套硬件后,在其上運行一個完整操作系統(tǒng),在該系統(tǒng)上再運行所需應(yīng)用進程;而容器內(nèi)的應(yīng)用進程直接運行于宿主的內(nèi)核,容器內(nèi)沒有自己的內(nèi)核,而且也沒有進行硬件虛擬。因此容器要比傳統(tǒng)虛擬機更為輕便。在這樣的前提下,它跟傳統(tǒng)的虛擬化方式相比具有眾多優(yōu)勢:
高效的利用系統(tǒng)資源。
啟動速度快。容器里面的應(yīng)用,直接就是底層系統(tǒng)的一個進程,而不是虛擬機內(nèi)部的進程。由于直接運行于宿主內(nèi)核,無需啟動完整的操作系統(tǒng),因此可以做到秒級、甚至毫秒級的啟動時間。
確保了應(yīng)用運行環(huán)境一致性。
可以在很多平臺上運行,無論是物理機、虛擬機、公有云、私有云,甚至是筆記本,其運行結(jié)果是一致的。
容器只要包含用到的組件即可,而虛擬機是整個操作系統(tǒng)的打包,所以容器文件比擬機文件要小很多。
3.如何使用docker
首先要理解Docker的三個概念:鏡像、容器、倉庫。
鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計中的類和實例一樣,鏡像是靜態(tài)的定義,容器是鏡像運行時的實體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等。鏡像是只讀的,可以用來創(chuàng)建Docker容器,容器看做是一個簡易版的Linux環(huán)境(包括root用戶權(quán)限、進程空間、用戶空間和網(wǎng)絡(luò)空間等)和運行在其中的應(yīng)用程序。
Docker Registry是集中存放鏡像文件的場所,提供集中的存儲、分發(fā)鏡像的服務(wù)。一個 Docker Registry中可以包含多個倉庫(Repository);每個倉庫可以包含多個標(biāo)簽(Tag);每個標(biāo)簽對應(yīng)一個鏡像。
最常使用的 Registry 公開服務(wù)是官方的 Docker Hub,這也是默認(rèn)的 Registry,并擁有大量的高質(zhì)量的官方鏡像。
這里以TensorFlow機器學(xué)習(xí)框架搭建為例講解如何利用docker快速搭建環(huán)境。
首先你需要安裝并啟動Docker。如果要使用GPU則安裝nvidia-docker。
1)直接使用別人做好的鏡像
在命令行輸入以下兩條命令:
docker image pull tensorflow/tensorflow docker run -it -p8888:8888-v /$(pwd)/notebooks:/notebooks tensorflow/tensorflow
第一行命令在Docker Hub上拉取tensorflow官方鏡像的cpu版本。
第二行則由此鏡像創(chuàng)建一個容器,并在容器里運行jupyter服務(wù)。在你的瀏覽器上打開http://localhost:8888/,就可以在jupyter里導(dǎo)入TensorFlow包了。
-v 參數(shù)的作用是將宿主機當(dāng)前目錄下的notebook目錄掛載到容器內(nèi)的/notebooks目錄,不添加這個參數(shù)的話,當(dāng)結(jié)束 container 的時候,jupyter notebook 里的內(nèi)容也會隨之消失。
我們還可以進入到容器里查看容器的環(huán)境配置信息:
docker run -it -p 8888:8888 tensorflow/tensorflow bash
解釋一下參數(shù)含義:
-i:以交互模式運行容器,通常與 -t 同時使用
-t:為容器重新分配一個偽輸入終端,通常與 -i 同時使用
bash:在容器內(nèi)執(zhí)行bash命令
root@21cebb7bd6b4:/notebooks# python Python2.7.12(default, Dec 42017,14:50:18) [GCC5.4.020160609] on linux2 Type"help","copyright","credits"or"license"formore information. >>> import tensorflow >>> root@21cebb7bd6b4:/notebooks# python3 Python3.5.2(default, Nov232017,16:37:01) [GCC5.4.020160609] on linux Type"help","copyright","credits"or"license"formore information. >>> import tensorflow Traceback (most recent call last): File"
2)保存修改后的容器為新的鏡像
通過在容器里執(zhí)行bash命令后我們可以看到,TensorFlow官方提供的這個容器的環(huán)境已經(jīng)安裝了Python2和Python3,不過只有在python2上安裝了TensorFlow的環(huán)境,如果你想在python3運行TensorFlow的話,可以自己手動在容器里進行你喜歡的環(huán)境配置。
有沒有辦法把修改好的容器作為基礎(chǔ)鏡像,以后需要創(chuàng)建容器的時候都使用這個新的鏡像呢?通過命令docker commit [CONTAINER]可以提交容器副本,制作屬于你自己的鏡像。命令格式如下:
dockercommit-m="description"-a="ahthorName"97744639b45d ahthorName/tensorflow-python3:latest
參數(shù)說明:
-m:提交的描述信息
-a:聲明鏡像作者
97744639b45d:容器ID
ahthorName/tensorflow-python3指定要創(chuàng)建的目標(biāo)鏡像名
docker ps -a這條命令可以列出所有已經(jīng)創(chuàng)建的未刪除的容器。
這里分享一個docker hub 上的鏡像docker pull dash00/tensorflow-python3-jupyter,里面已經(jīng)配置好了python3下TensorFlow的環(huán)境,大家可以直接拉取使用。
3)dockerfile定義全新鏡像
上面的方法是在基礎(chǔ)鏡像的容器上做修改創(chuàng)建我們自己的鏡像,我們也可以編寫一個Dockerfile來構(gòu)建全新的鏡像。我們已經(jīng)知道Docker鏡像是制作Docker容器的模版,而Dockerfile則是一個定義Docker鏡像的文件。下面我們嘗試編寫一個Dockerfile。
Dockerfile定義了容器內(nèi)的環(huán)境配置。在此環(huán)境中,對網(wǎng)絡(luò)接口和磁盤驅(qū)動器等資源的訪問都是虛擬化的,該環(huán)境與系統(tǒng)的其他部分隔離。因此您需要將端口映射到外部的宿主機環(huán)境,并具體指定哪些文件是跟外部環(huán)境保持一致的。只要在定義好此操作之后,你就可以預(yù)期,無論什么時候你運行這個文件,由Dockerfile中定義的應(yīng)用程序環(huán)境的構(gòu)建都會執(zhí)行完全相同的操作。
如何創(chuàng)建
這里是一個示例:創(chuàng)建一個空目錄,創(chuàng)建一個名為的文件dockerfile,再創(chuàng)建兩個文件requirements.txt和app.py和dockerfile放在一起。
以下是dockerfile文件內(nèi)容,注釋里有條語句的解釋:
#使用python:2.7-slim作為基礎(chǔ)鏡像 FROM python:2.7-slim #指定工作目錄(或者稱為當(dāng)前目錄) WORKDIR /app #將當(dāng)前文件夾下的內(nèi)容(requirements.txt和app.py)復(fù)制到容器里的/app目錄下 ADD . /app #安裝在requirements.txt文件里指定的python包 RUN pip install --trusted-host pypi.python.org -r requirements.txt #向外部環(huán)境暴露80端口 EXPOSE 80 #設(shè)置環(huán)境變量 ENV NAME World #一旦容器開始運行,則運行app.py作為容器的主進程 CMD ["python", "app.py"]
FROM指定基礎(chǔ)鏡像,是必備的指令,并且必須是第一條指令。在 Docker Store 上有非常多的高質(zhì)量的官方鏡像提供給我們使用。
RUN 指令是用來執(zhí)行命令行命令的。
CMD 指令用于指定默認(rèn)的容器主進程的啟動命令。有別于傳統(tǒng)虛擬機概念,對于容器而言,其啟動程序就是容器的主要進程,容器就是為了主進程而存在的。
有了Dockerfile 文件,我們就可以使用docker image build命令創(chuàng)建 image 文件了。運行:
#-t參數(shù)用來指定 image 文件的名字 Docker build -t friendlyhello
如果運行成功,使用docker image ls命令就可以看到新生成的 image 文件friendlyhello了,它位于你機器的本地Docker鏡像注冊表中。
docker imagels REPOSITORY TAG IMAGE ID friendlyhello latest 326387cea398
二.Datmo
如果你覺得上面描述的關(guān)于docker的操作依然十分麻煩的話,我還有一個工具推薦給你,那就是datmo。Datmo充分利用了Docker,簡化了流程,幫助您快速輕松地運行AI框架。下面是使用流程:
1.前提條件
安裝并啟動Docker(https://docs.docker.com/install/#supported-platforms)
(如果使用GPU)安裝CUDA 9.0(https://developer.nvidia.com/cuda-90-download-archive)
(如果使用GPU)安裝nvidia-docker(https://github.com/datmo/datmo/wiki/Datmo-GPU-support-and-setup)
2.安裝datmo
就像任何python包一樣,使用以下命令從終端安裝datmo:
$ pip install datmo
3.初始化datmo項目
在終端中,打開項目文件夾。然后,輸入以下命令:
$ datmo init
然后,你將被要求提供項目的名稱和描述。
4.啟動環(huán)境設(shè)置
在輸入名稱和描述后,datmo將詢問是否要設(shè)置環(huán)境 - 輸入y并按enter。
5.選擇系統(tǒng)驅(qū)動程序(CPU或GPU)
然后,CLI將詢問希望為您的環(huán)境選擇哪些系統(tǒng)驅(qū)動程序。如果不打算使用GPU,請選擇cpu。
6.選擇一個環(huán)境
接下來,你將從眾多預(yù)打包環(huán)境中選擇一種。只需在提示中回復(fù)您要使用的環(huán)境的編號或ID。
7.選擇編程語言版本
上述許多環(huán)境都有不同的版本,具體取決于你計劃使用的語言和版本。
例如,在選擇keras-tensorflow環(huán)境后,我將面臨以下提示,詢問我是否要使用Python 2.7或Python 3.5。
8.啟動工作區(qū)
現(xiàn)在是時候啟動你的工作區(qū)了。選擇你要使用的工作區(qū),然后在終端中輸入相應(yīng)的命令。
Jupyter Notebook -?$ datmo notebook JupyterLab -?$ datmo jupyterlab RStudio -? $ datmo rstudio(在R-base環(huán)境中可用) 終端模式 -?$ datmo terminal
責(zé)任編輯:lq
-
容器
+關(guān)注
關(guān)注
0文章
511瀏覽量
22462 -
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3337瀏覽量
59047 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86815
原文標(biāo)題:5分鐘配置好你的AI開發(fā)環(huán)境
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Deepseek海思SD3403邊緣計算AI產(chǎn)品系統(tǒng)
rs232轉(zhuǎn)profinet網(wǎng)關(guān)接閥門快速配置案例

基于Docker鏡像逆向生成Dockerfile

云計算開發(fā)工具包的功能
最新Simplicity SDK軟件開發(fā)工具包發(fā)布
docker-compose配置文件內(nèi)容詳解以及常用命令介紹

基于EasyGo Vs工具包和Nl veristand軟件進行的永磁同步電機實時仿真

Docker運行環(huán)境安裝
FPGA仿真工具包軟件EasyGo Vs Addon介紹

AI for Science:人工智能驅(qū)動科學(xué)創(chuàng)新》第4章-AI與生命科學(xué)讀后感
《AI for Science:人工智能驅(qū)動科學(xué)創(chuàng)新》第一章人工智能驅(qū)動的科學(xué)創(chuàng)新學(xué)習(xí)心得
名單公布!【書籍評測活動NO.44】AI for Science:人工智能驅(qū)動科學(xué)創(chuàng)新
采用德州儀器 (TI) 工具包進行模擬前端設(shè)計應(yīng)用說明

評論