無論你是想在本地機(jī)器上榨干內(nèi)存,還是只希望代碼在更強(qiáng)大的機(jī)器上運(yùn)行得更快,在云服務(wù)器上進(jìn)行數(shù)據(jù)科學(xué)研究都有很多優(yōu)勢。云服務(wù)器實際上就相當(dāng)于一臺電腦,就跟你現(xiàn)在使用的電腦一樣,只不過它位于別處罷了。
在本文中,我們將介紹如何在 Google Cloud Platform(GCP)上搭建一個數(shù)據(jù)科學(xué)環(huán)境。Google 采購了數(shù)十萬臺個人計算機(jī),使用定制軟件在世界各地數(shù)據(jù)中心管理它們,并提供這些計算機(jī)的租用業(yè)務(wù)。由于云托管公司提供的經(jīng)濟(jì)規(guī)模,個人或團(tuán)隊可以按需訪問具有大量 CPU 和內(nèi)存的強(qiáng)大的計算機(jī)。
當(dāng)你決定將設(shè)置從筆記本或臺式機(jī)遷移到云數(shù)據(jù)科學(xué)環(huán)境時,重要的是,要考慮哪些標(biāo)準(zhǔn)對你來說最重要。比如,如果要在 pandas 中處理更大的數(shù)據(jù)集,那么擁有大量內(nèi)存就非常重要。為了能夠配合 Spark 處理大型數(shù)據(jù)集,我們就需要租用具有大量內(nèi)存的計算機(jī)池來共享負(fù)載。
與其他云服務(wù)提供商(如 Amazon AWS、Microsoft Azure、DigitalOcean Droplet)一樣,GCP 也包含許多不同的產(chǎn)品和服務(wù)。
為了能夠自由地安裝任何我們想要的庫或工具,我們需要訪問 GCP 上的虛擬計算機(jī)。這稱為虛擬機(jī)實例。租用虛擬機(jī)實例并不能讓我們訪問自己的專用計算機(jī)(向云服務(wù)提供商租用專用計算機(jī)的費用要高得多),而只能訪問我們想要的 CPU 和內(nèi)存:
啟動 Google Compute Engine 實例
導(dǎo)航到 VM 實例頁面:
https://console.cloud.google.com/projectselector/compute/instances系統(tǒng)會要求你使用 Google 憑據(jù)登陸并創(chuàng)建一個項目。完成后,你將進(jìn)入 VM 實例頁面。
要創(chuàng)建新的虛擬實例,單擊 CREATE INSTANCE,你將進(jìn)入一個頁面,你可以在其中定制你想租用的實例的不同屬性:
Name: 命名你的實例,我們只使用了缺省名稱。
Zone: 服務(wù)器所在的地理區(qū)域。我們選擇了 us-east1-b,但你可以隨意選擇離你最近的實例:https://cloud.google.com/compute/docs/regions-zones/
Machine Type: 你想讓租用的機(jī)器有多強(qiáng)大?;叵胍幌?,你可以在此頁面(https://cloud.google.com/compute/pricing)了解不同的機(jī)器類型,在每月預(yù)算中進(jìn)行選擇。
Boot Disk: 選擇你希望虛擬實例啟動哪種操作系統(tǒng)。我們選擇了 Ubuntu 16.04 LTS,一款流行的 Linux 分發(fā)版。
Firewall: 設(shè)置允許哪些網(wǎng)絡(luò)流量。我們使用默認(rèn)設(shè)置保留此流量。
當(dāng)你就緒后,點擊 Create 按鈕。
啟動 Google Compute Engine 實例之后,可以直接從 Google Compute Engine 頁面來啟動控制臺:
我們將使用此控制臺設(shè)置數(shù)據(jù)科學(xué)環(huán)境的其余部分。如果你不熟悉命令行,我建議你查看我們的課程:
Command Line:Beginner:https://www.dataquest.io/course/command-line-beginner
Command Line:Intermediate:https://www.dataquest.io/course/command-line-intermediate首先,安裝 anaconda(參見https://conda.io/docs/user-guide/tasks/manage-pkgs.html)。在命令行中,最簡單的方法是使用 curl 下載二進(jìn)制安裝文件。unix 工具 curl 從指定的 URL 下載文件,并使用 -O 標(biāo)記寫入文件(而不是立即顯示下載內(nèi)容):
在安裝過程中,你將會有幾次需要輸入 yes 來接受許可證。安裝完成后,你還需要將 conda 程序添加到你的 PATH(可參見https://kb.iu.edu/d/acar)中。這個 PATH 允許你指定希望操作系統(tǒng)搜索程序的目錄。
現(xiàn)在已經(jīng)安裝好 anaconda,我們就可以創(chuàng)建一個新的 anaconda 環(huán)境(詳見https://conda.io/docs/user-guide/tasks/manage-environments.html)。由于我們在 Dataquest 上使用 Python 3.5 授課,因此在本文我們?nèi)匀皇褂眠@個版本:
現(xiàn)在,我們在此實例中運(yùn)行的 Jupyter Notebook 服務(wù)器無法通過本地計算機(jī)上的 Web 瀏覽器訪問。要理解為什么會這樣子,讓我們想一想在自己的計算機(jī)本地上運(yùn)行 Jupyter Notebook 會發(fā)生什么事情:只有本地計算機(jī)才能通過 Web 瀏覽器訪問 Jupyter Notebook 服務(wù)器(通常訪問地址是 localhost:8888)。
但如果在局域網(wǎng)(WiFi 或以太網(wǎng))上的其他人知道你的 IP 地址和運(yùn)行 Jupyter Notebook 的端口(通常是 8888),那他們可以通過 Web 瀏覽器訪問它:http://OUR_IP_ADDRESS:8888。
通過這兩個主要調(diào)整,我們也可以為云實例復(fù)制這種訪問功能。缺省情況下,云實例的防火墻設(shè)置為阻止傳入的網(wǎng)絡(luò)訪問。此外,大多數(shù)云服務(wù)提供商經(jīng)常更改實例的 IP 地址(實際上,只要他們愿意,隨時都可以更改?。┻@就意味著,如果我們的實例當(dāng)前 IP 地址是 35.227.18.17,它只能保持一陣,不能長期依賴這個 IP 地址。
然而,我們也可以把動態(tài) IP 地址更改為靜態(tài) IP 地址。
要把實例的 IP 地址更改為靜態(tài) IP 地址,請在 Google Cloud Platform 的左側(cè)依次展開 Networking→VPC networ→External IP address。
你還可以直接通過這個 URL:https://console.cloud.google.com/networking/addresses 直接跳到這個頁面。
請注意:如果你聲明了一個靜態(tài) IP 地址,正在運(yùn)行的機(jī)器沒有與靜態(tài) IP 地址關(guān)聯(lián),Google 將會收取少量費用。在 Iowa 州,截止 2017 年 12 月,這個收取少量費用的成本是每小時 1 美分,如下圖所示:
Static IP Cost
你可以通過訪問這個頁面https://cloud.google.com/compute/pricing 并向下滾動到未使用的 IP 地址價格,了解未使用的靜態(tài) IP 地址價格更多的信息。
現(xiàn)在我們有了一個靜態(tài) IP 地址,本地計算機(jī)就可以與云實例通信了。不幸的是,大多數(shù)云提供商都有防火墻,阻止了對大多數(shù)端口的傳入訪問。值得慶幸的是,我們可以手動為端口 8000 添加一個例外,Jupyter Notebook 服務(wù)器使用這個例外來接收傳入的請求。
現(xiàn)在讓我們使用自定義防火墻規(guī)則,以便傳入的網(wǎng)絡(luò)數(shù)據(jù)包可以訪問特定端口上的服務(wù)器。導(dǎo)航到防火墻規(guī)則的頁面:https://console.cloud.google.com/networking/firewalls,點擊左側(cè)的 Firewall Rule 然后在右側(cè)底部點擊“Create”按鈕。
Create Firewall
在生成的頁面上,填寫以下字段:
Name: 為此防火墻規(guī)則添加名稱;
Source IP ranges: 0.0.0.0/0
Allowed protocols and ports: tcp:8000
最后,我們需要配置 Jupyter Notebook 來使用前面為防火墻指定的 TCP 端口。
為生成配置文件,需運(yùn)行如下命令:
至此,我們已經(jīng)完成了所有的設(shè)置,讓我們使用以下的標(biāo)記來啟動 Jupyter Notebook:
在本地計算機(jī)上,導(dǎo)航到 URLhttp://YOUR_STATIC_IP_ADDRESS:8000,你將會看到 Jupyter Notebook 的歡迎登錄頁面!