【原創】每月9.9構建你自己的資料科學計算環境

錢亦欣發表於2018-02-12

作者 錢亦欣

隨著現實中資料可獲得性的體高,你是否覺得自己的筆記本已經帶不動你在資料方面的巨集圖大志,是否覺得跑個要花費幾個小時的模型實在是虛度青春,但是花錢買高配的電腦又有點肉疼。現在,一種低成本、高效用的解決方案誕生了——利用阿里雲的雲伺服器可以很大程度上解決你的需求。

為了給廣大學生(窮苦人民)提供學習試用(賺取 deadweight loss)的機會,阿里雲推出了月付學生機,每月只要 9.9 就能租用一臺1核(E5-2682 v4 @ 2.50GHz)、2G記憶體、40G硬碟,1M 頻寬的雲伺服器。

看起來這臺伺服器的配置並不是太高,然而由於其 cpu 的高效能和無圖形桌面的 Linux 系統的低資源佔用,它還是可以一戰的。並且有了它,你可以在本地除錯演算法和模型,只在雲端進行長時間的計算和資料採集等工作。並且阿里雲的伺服器基本都支援頻寬的彈性調整,在對網路有較大需求的期間花個十幾二十塊錢調整下頻寬就行。

而根據我(一個搞貝葉斯統計的研究生)這大半年的使用體驗,阿里雲學生機極大地提升了我的生活幸福感。從此我再也不用在跑模型時翹首以盼,而是可以邊在雲端跑計算,邊在本地寫文件(打遊戲)。更何況每個月只要 9.9,完全不會對你的生活造成任何影響,阿里雲此舉真是利國利民,普天同慶(20萬廣告費已到帳),接下來我就根據我個人的使用場景講解下如何把剛租用到的裸機變為一個可用的科學計算環境。

1. 基本設定

我租用的服務選用了 Centos 7.4 的系統,Unbuntu 其實也大同小異。完成租用後,我大概進行了如下設定以獲得更好的使用者體驗,以下部分的具體操作細節都可以在阿里雲的文件裡找到幫助:

  • 修改root密碼:如果在選擇配置時沒有設定密碼,那麼可以在控制檯進行相應的設定。
  • 修改防火牆:如果開著 Centos 自帶的 firewall 防火牆,會給後續的安裝過程帶來一定麻煩,所以我這裡就把防火牆禁用了,也體現我對阿里雲的防火牆的高度信任。
  • 配置安全組:為了方便我直接開發了所有ip段對我這臺伺服器所有埠的訪問許可權,我知道這樣很不好,大家還是根據每個人的需要來制定安全組策略。
  • 修改預設 shell 為 zsh :這部分應該是我個人的私貨,其實用 bash 沒有什麼問題,但 zsh 帶來的方便真是讓人無法自拔,光是強悍的自動補全和使用外掛後一個命令解壓大部分壓縮檔案這兩個功能就值得你使用。尤其是現在有了 oh-my-zsh,配置什麼的非常方便,還好看。
  • 配置 EPEL:centos 預設的 yum 源裡面的資源還是有限,所以我們新增一些額外的源,EPEL(Extra Packages for Enterprise Linux)就是很棒的一個額外倉庫,下文中安裝 R 就用到了它。

2. 安裝 miniconda 和 jupyter notebook

python 應該是目前資料科學界最流行的語言了,我們就從它入手。一般而言,Linux 系統的各大發行版都自帶 python2,這是因為這些系統的很多模組都要依託 python2 來執行。然而 python3 在字元編碼等方面有著很大的優勢,並且 python2 到2020年就停止維護了,因此在系統裡再安裝個 python3 還是挺有必要的。為了不汙染系統本身環境,我習慣安裝 miniconda,你可以到官網下載合適的版本安裝,過程如下:

wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 出現如下提示,按enter繼續
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>
# 出現 license,按多次空格直到底部
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE--More--
# 輸入yes吧
Do you accept the license terms? [yes|no]
# 指定安裝路徑,我就直接按 enter 用的預設路徑
Miniconda3 will now be installed into this location:
/root/miniconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/root/miniconda3] >>>
# 之後讓你選擇是否要把 miniconda 新增入環境變數。喜歡乾淨的選 no, 喜歡方便的選 yes

至此,miniconda 的安裝就基本完成了。如果你把它新增到了 bash/zsh 環境裡,這時候你在命令列執行 python 命令預設啟動的就是 python3,而如同之前提到,Linux 諸多發行版的模組要依賴 python2,上述操作可能會帶來一些意料之外的 bug。

安裝完 miniconda 並設定好相應的環境變數,你就可以用 pip 來安裝相應的庫了,jupyter notebook 的安裝也不例外,安裝完後把 jupyter notebook 在後臺啟動並且設定為不被掛起就可以了(預設監聽8888埠),當然我們還需要生成相應的配置檔案(在 ~/.jupyter 下),修改相應的外網IP,登入密碼、埠、根目錄等。

# install jupyter notebook
pip install jupyter notebook

# generate config file
jupyter notebook --generate-config

# start jupyter notebook
nohup jupyter notebook --allow-root &

之後通過瀏覽器訪問你的 外網IP:8888 就能看到登入介面,輸入在配置檔案裡設定的密碼就能使用了。

注:上面的命令中 nohup 代表讓這個命令不被掛起,也即關閉這次連線依舊執行該命令,--allow-root 引數使得我們能以 root 使用者的身份啟動 jupyter notebook,命令末尾的 & 代表在後臺執行命令,前臺依舊可以做其他事。這樣以來只要我們不殺掉相應的程式,就可以隨時訪問 jupyter notebook 了

3. 安裝 R 和 Rstudio server

R 也是資料從業人員最常用的程式語言之一,而 Rstudio 作為 R 語言最好的 ide (沒有之一),能極大提升編寫 R 程式碼時的體驗。所以我建議大家都入手一個。

對於 R,只要配置了EPEL(參照第一部分),就可以直接通過 yum 來進行安裝。

yum install R
# 之後直接在命令列輸入大寫的 R 就可以啟動 repl 環境
[root@fksad carp]# R

R version 3.4.3 (2017-11-30) -- "Kite-Eating Tree"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-redhat-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

>

同樣,Rstudio 的安裝也非常友好,由於我們用的是沒有顯示器的伺服器,所以這裡我們要選擇安裝基於瀏覽器的 server 版本。這類已經非常成熟的軟體,我們最好的安裝方法就是上官網檢視他在 Linux 系統下的安裝指南。參照官網指南,執行以下命令安裝並且啟動服務(預設監聽8787埠):

wget https://download2.rstudio.org/rstudio-server-rhel-1.1.423-x86_64.rpm
sudo yum install rstudio-server-rhel-1.1.423-x86_64.rpm

systemctl start rstudio-server 

啟動後在你本地的瀏覽器訪問外網 IP:8787 就可以看到登入介面了。這裡要說明一下,Rstudio Server 是不允許以 root 使用者的身份登入的,所以需要預先在系統內設定新的使用者,具體怎麼操作請自行百度。之後使用這個使用者的名稱和密碼登入,就能和桌面端的一樣使用了。不同使用者的環境和安裝的包都是相互隔離的,所以很適合多使用者的場景。 如果你需要修改 Rstudio server 的一些配置,比如改個埠什麼的,情建立並修改以下兩個檔案:/etc/rstudio/rserver.conf /etc/rstudio/rsession.conf。

4. 安裝 Mysql-community

如果你上百度搜尋了 centos7 安裝 mysql 的教程,那麼絕大部分教程是這麼教你的,上 mysql 官網下載相應的 mysql 倉庫並新增,然後直接通過 yum install mysql-server 命令下載安裝。當然,這種方式是可行的,只要你能容忍 20-40k/s 的下載速度,下面的就不用看了。

另一種更為節約時間的辦法是從官網下載對應的打包好的檔案(rpm bundle),解包後利用rpm命令安裝,具體步驟如下:

# 選擇適合你伺服器系統版本的 rpm bundle 並下載
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar
# 解包下載檔案
tar -xvf mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar
# 按照順序逐個用 rpm 命令安裝
rpm -ivh mysql-community-common-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.20-1.el7.x86_64.rpm
# 如果期間報錯,顯示 libaio 缺失,則執行
yum install libaio
# 安裝結束,啟動 mysql 服務
systemctl start mysqld

第一次啟動後,mysql 會給 root 使用者分配一個初始密碼,可以用如下命令獲取密碼並登入 mysql 修改密碼

cat /var/log/mysqld.log | grep 'temporary password'
> 2018-01-05T15:25:15.330008Z 1 [Note] A temporary password is generated for root@localhost: kEF?xNHK,9=n
# 利用該臨時密碼登入
mysql -u root -p
# 進入mysql命令列後修改root密碼並開放遠端登入許可權
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

至此,mysql 基本就可以使用了,我個人比較習慣利用 navicat 等圖形化管理工具遠端連線,你如果想降低網路延遲,也可以使用基於瀏覽器的 phpmyadmin。

結語

至此,符合我個人需求的一個科學計算環境就已經部署完成了,其實通過上述軟體的安裝部署經驗,之後要進行別的操作也是大同小異。希望這篇短文能對你有幫助,歡迎各位打賞。

相關文章