如何在AWS GPU上運(yùn)行Jupyter noterbook?
本文將指導(dǎo)你逐步在 AWS GPU 實(shí)例上運(yùn)行深度學(xué)習(xí) Jupyter notebook,并可在你的瀏覽器中從任何地方對(duì)其編輯。如果你的本地機(jī)器上沒有 GPU,這將會(huì)是一個(gè)研究深度學(xué)習(xí)的理想設(shè)置。
一、什么是 Jupyter noterbook?為什么要在 AWS GPU 上運(yùn)行 Jupyter notebook?
Jupyter notebook 是一個(gè)網(wǎng)頁(yè)應(yīng)用程序,允許你以交互的方式編寫并注釋 Python 代碼。這是一種做試驗(yàn),做研究,并分享工作內(nèi)容的有效方法。了解什么是 notebook 請(qǐng)點(diǎn)擊這里(鏈接:http://suo.im/4Em4IR)。
許多深度學(xué)習(xí)應(yīng)用的計(jì)算非常密集,且在筆記本的 CPU 內(nèi)核上運(yùn)行通常需要耗費(fèi)幾個(gè)小時(shí)甚至是幾天。如果把一個(gè)現(xiàn)代的 CPU 換成 GPU,訓(xùn)練和推理的速度可提升 5 到 10 倍。但是,你可能無(wú)法在本地計(jì)算機(jī)上安裝 GPU。在 AWS 運(yùn)行 Jupyter notebook 可以給你在本地計(jì)算機(jī)上運(yùn)行時(shí)的相同體驗(yàn),同時(shí)允許你利用 AWS 上的一個(gè)或多個(gè) GPU。如果你只是偶爾使用深度學(xué)習(xí),相比投資專有的 GPU,Jupyter notebook 更為有利,你只需支付所用的東西。
二、為什么我不想在 AWS 上使用 Jupyter 進(jìn)行深度學(xué)習(xí)?
AWS GPU 實(shí)例的價(jià)格可以迅速變貴。我們建議的使用價(jià)格是每小時(shí) 0.9 美元。這個(gè)價(jià)格偶爾使用還可以接受,但是如果你每天都要進(jìn)行幾個(gè)小時(shí)的實(shí)驗(yàn),那么你***搭建配備 Titan X 或者 GTX 1080 Ti 的專屬深度學(xué)習(xí)機(jī)。
1. 開始之前注意:
- 你需要一個(gè)激活的 AWS 賬戶
- 如果你對(duì) AWS EC2 有所了解會(huì)有幫助,但并不必須
搭建需要花費(fèi) 5 到 10 分鐘的時(shí)間。
2. 分步指南
(1) 導(dǎo)航至 EC2 控制面板,并點(diǎn)擊「啟動(dòng)實(shí)例」鏈接。
(2) 選擇官方 AWS 深度學(xué)習(xí) Ubuntu AMI
選擇「AWS 市場(chǎng)」并在搜索框中搜索「深度學(xué)習(xí)」。
向下滾動(dòng),直到找到名為「深度學(xué)習(xí) AMI Ubuntu 版本」的 AMI(如下圖),并選擇它。
(3) 選擇 p2.xlarge 實(shí)例
該實(shí)例類型提供對(duì)單個(gè) GPU 的訪問,并且每小時(shí)的使用成本為 0.9 美元(截至 2017 年 3 月)。點(diǎn)擊「配置實(shí)例細(xì)節(jié)」:
(4) 配置實(shí)例細(xì)節(jié)
你可以為「配置實(shí)例」、「添加存儲(chǔ)」和 「添加標(biāo)簽」等步驟保留默認(rèn)設(shè)置。但是我們將自定義步驟「配置安全組」。
創(chuàng)建一個(gè)自定義 TCP 規(guī)則以允許 8888 端口。
在你當(dāng)前的公共 IP(例如你的筆記本電腦的 IP),或者在前者不可能的情況下,對(duì)于任意 IP,該規(guī)則都被允許。請(qǐng)注意,如果你允許任意 IP 均可接入端口 8888,則理論上任何人都可以收聽你的實(shí)例上的那個(gè)端口(這是我們將運(yùn)行 IPython notebook 的地方)。我們將為筆記本電腦添加密碼保護(hù),以便降低任意人員都可以對(duì)其進(jìn)行修改的風(fēng)險(xiǎn),但這也許是較弱的保護(hù)。如果可能的話,你應(yīng)該考慮限制特定 IP 的訪問。但是,如果你的 IP 地址不斷更改,這不太實(shí)際。如果你打算對(duì)任意 IP 開放接入端,請(qǐng)記住不要在實(shí)例上留下任何敏感數(shù)據(jù)。
在啟動(dòng)過程結(jié)束時(shí),系統(tǒng)將會(huì)詢問你是否要?jiǎng)?chuàng)建新的連接密鑰,或者是否重復(fù)使用現(xiàn)有的密鑰。如果你之前從未使用過 EC2, 只需創(chuàng)建新的密鑰并下載即可。
(5) 啟動(dòng)你的實(shí)例并連接到它
為了連接實(shí)例,在 EC2 控制面板上選擇并點(diǎn)擊「連接」按鈕,遵循提供的說明,例如:
注意,實(shí)例完全啟動(dòng)之前可能需要幾分鐘。如果開始時(shí)不能連接,請(qǐng)等待并重試。
(6) 設(shè)置 SSL 證書
通過 ssh 登錄實(shí)例后,在實(shí)例的根目錄下創(chuàng)建一個(gè) ssl 目錄,然后對(duì)其進(jìn)行 cd(并非必要,但更干凈)。
- mkdir ssl
- cd ssl
使用 OPenSSL 創(chuàng)建新的 SSL 證書:
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout "cert.key" -out "cert.pem" -batch
完成后,你已在當(dāng)前的 sll 目錄中創(chuàng)建了兩個(gè)文件:cert.key 和 cert.pem.
(7) 配置 Jupyter
在我們開始使用 Jupyte 之前,我們需要調(diào)整其默認(rèn)配置。首先,我需要生成一個(gè)新的 Jupyter 配置文件(仍然在遠(yuǎn)程實(shí)例上):
- jupyter notebook --generate-config
或者,你可以為自己的 notebook 生成 Jupyter 密碼。由于你的實(shí)例配置可能為從任何 Ip 訪問(取決于你在配置安全組時(shí)所做的選擇),***通過密碼限制對(duì) Jupyter 的訪問。要生成密碼,請(qǐng)打開 IPython shell(ipython 命令)并運(yùn)行:
- from IPython.lib import
- passwdpasswd()
- exit
passwd() 命令將要求你輸入并驗(yàn)證密碼,完成后將顯示密碼哈希(hash)。復(fù)制哈希,我們稍后會(huì)用到。它看起來像:「sha1:b592a9cf2ec6:b99edb2fd3d0727e336185a0b0eab561aa533a43」(這是「密碼」哈希,并非是你應(yīng)該使用的密碼)。
接下來,使用 Vi(或者用你最喜歡的可用文本編輯器)編輯配置文件:
- vi ~/.jupyter/jupyter_notebook_config.py
這是一個(gè) Python 文件,其中所有的行都被注釋掉。
你需要插入以下 Python 代碼行(比如,在文件的開頭)
- c = get_config() # get the config object
- c.NotebookApp.certfile = u'/home/ubuntu/ssl/cert.pem' # path to the certificate we generated
- c.NotebookApp.keyfile = u'/home/ubuntu/ssl/cert.key' # path to the certificate key we generated
- c.IPKernelApp.pylab = 'inline' # in-line figure when using Matplotlib
- c.NotebookApp.ip = '*' # serve the notebooks locally
- c.NotebookApp.open_browser = False # do not open a browser window by default when using notebooks
- c.NotebookApp.password = 'sha1:b592a9cf2ec6:b99edb2fd3d0727e336185a0b0eab561aa533a43' # this is the password hash that we generated earlier.
如果,你以前沒有使用過 Vi,請(qǐng)記住,你需要按 i 開始插入內(nèi)容;完成后,你可以點(diǎn)擊 esc 然后是 :wq 最終 enter 退出 Vi,同時(shí)保存更改(:wq 代表寫入-退出)
(8) 更新 Keras
你馬上可以開始使用 Jupyte 了。但首先,通過運(yùn)行(仍然在遠(yuǎn)程實(shí)例上)以確保 Keras 是***的:
- sudo pip install keras --upgrade --no-deps
你所使用的 AMI 由亞馬遜負(fù)責(zé)日常更新,但其可能沒有使用每個(gè)包的***版本。
(9) 設(shè)置本地端口轉(zhuǎn)發(fā)
在本地機(jī)器上的一個(gè) Shell(不是遠(yuǎn)程實(shí)例中)中,開始將你的本地端口 443(HTTPS 端口)轉(zhuǎn)發(fā)到遠(yuǎn)程實(shí)例的端口 8888。這是通過句法(syntax)完成的:
- sudo ssh -i awsKeys.pem -L local_port:local_machine:remote_port remote_machine
在我們的例子中為:
- sudo ssh -i awsKeys.pem -L 443:127.0.0.1:8888 ubuntu@ec2-54-147-126-214.compute-1.amazonaws.com
(10) 從你的本地瀏覽器中開始使用 Jupyter
首先,在遠(yuǎn)程實(shí)例中,創(chuàng)建保存你的 notebook 的文件夾:
- mkdir notebooks
- cd notebooks
在遠(yuǎn)程實(shí)例上,通過在你創(chuàng)建的文件夾中運(yùn)行此命令來啟動(dòng) Jupyter Notebook:
- ipython notebook
然后,在本地瀏覽器中,導(dǎo)航至我們發(fā)送到遠(yuǎn)程 notebook 進(jìn)程的本地地址 https://127.0.0.1。確保你在地址中使用 HTTPS,否則你將收到 SSL 錯(cuò)誤。
你將看到一個(gè)安全警告:
該警告只是因?yàn)槲覀兩傻?SSL 證書沒有被任何受權(quán)威機(jī)構(gòu)驗(yàn)證(顯然,我們剛剛生成了我們自己的證書)。點(diǎn)擊「advanced」,繼續(xù)瀏覽,這很安全。
然后系統(tǒng)會(huì)提示你輸入 Jupyter 密碼。然后,你會(huì)進(jìn)入 Jupyter 控制面板。
點(diǎn)擊「新建 - >Notebook」開始。你可以使用你選擇的 Python 版本。
好了!
原文:
https://blog.keras.io/running-jupyter-notebooks-on-gpu-on-aws-a-starter-guide.html
【本文是51CTO專欄機(jī)構(gòu)機(jī)器之心的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】