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