搭建linux下的深度學習開發環境

最近越來越感覺到在win下開發簡直渾身難受,各種lib需要逐個下載安裝不說,到現在乾脆在win下跑不起來了。無奈,只能打算轉戰linux平臺。在搭建環境過程中碰到了各種問題,因此把碰到的一些問題及其解決方法寫下來作爲備忘。


1. ubuntu的安裝

由於之前ubuntu使用的比較多,所以這次也順理成章的選擇了ubuntu.
關於ubuntu的版本,注意一定要選擇新版本。目前(2016.8)的最新版本是ubuntu16.04. 我一開始圖方便,裝的是ubuntu12.04, 因爲可以使用wubi無腦安裝。結果發現安裝是方便了,結果後來越來越麻煩,apt-get什麼都裝不了, apt-get update以後,想裝軟件要麼找不到裝不了,要麼依賴庫版本太低,總之是越來越麻煩。後來在把系統搞崩潰以後,終於下決心裝16.04

這裏使用easybcd來安裝ubuntu16.04,安裝指導
注意原文有一段是這樣的:

然後點擊配置,將menu.lst文件的內容替換成一下文本:
title Install Ubuntu
root (hd0,0)
kernel (hd0,0)/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-14.04-desktop-amd64.iso locale=zh_CN.UTF-8
initrd (hd0,0)/initrd.lz
title reboot
reboot
title halt
halt
說明:hd0表示c盤所處的硬盤號,一般電腦只有一個,所以都是hd0;如果有多個硬盤,則根據情況改爲hd0、hd1等。
hd0後面的數字表示C盤在硬盤中的分區順序,每個人的系統不大一樣,不知道的可以在磁盤管理裏面看一下,本人c盤是第三個分區,因此寫爲(hd0,2),如果是第一個,寫爲(hd0,0)即可。

其實除了(hd0,0)要根據自己情況修改以外,下面這一行的iso地址和名稱也要根據自己的文件進行修改,注意提前將iso文件拷貝到C盤根目錄下。

kernel (hd0,0)/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-14.04-desktop-amd64.iso locale=zh_CN.UTF-8

接下來就按照流程走。注意在分區過程中要設一個swap分區,類似於win下的虛擬內存。因爲聽說如果不設置swap分區的話,有些程序會造成內存泄漏。所以我這裏就象徵性的設置了200M

此外還要把主要的分區格式設爲ext4,用來掛載根目錄 / ,我這次是把一個80G的分區拿來用了。


2. apt-get相關

裝好系統以後,第一件事情自然是apt-get update了。原來我是用163源的,結果這次發現163的源有好多報錯,所以就改用官方服務器了,發現速度也還可以,雖然確實比國內要慢一些,但是勝在省心。

另外,除了普通的apt-get install packname以外,apt-get還有許多很實用的功能,比如說apt-get upgrade,可以自動更新庫。如果在安裝中碰到有依賴庫沒有安裝,則運行 apt-get -f install 就會自動安裝所依賴的包了。之後再運行apt-get install pack 就可以順利安裝。此外,
apt autoremove 能夠自動清除沒有用的包,
apt-get remove pack 能夠手動卸載包
apt-get upgrade pack 手動更新指定包


3. 必要軟件安裝

工欲善其事必先利其器,一些必要的軟件也是非常有必要安裝的


3.1 tmux

tmux是一款終端中的分屏工具,很好用!

apt-get install tmux


tmux的使用方法見tmux快捷鍵


3.2 flash插件

作爲一臺電腦,免不了要看看視頻聽聽歌的。這時就需要flash插件。我之前試過從adobe官網下載tar包,不過不管用。最後還是apt-get解決的。

apt-get install flashplugin-installer

Done


3.3 chrome

這個其實不是很強求,我因爲在win下本身就是用的chrome,有很多書籤和插件需要使用,所以需要安裝chrome. 總的來講,安裝chrome的流程還是比較簡單的,先從這裏下載對應的deb包,然後使用dpkg安裝。如果有提示缺少依賴包,就先運行下apt-get -f install 然後再用dpkg安裝一下即可


3.4 IDEA

IDEA是IntelliJ開發的IDE,可以編寫java,python等多種程序。我下載的是IDEA16 旗艦版,採用本地LicenseServer激活。破解的具體教程參考這裏簡單的來說,就是

  1. 先下載好idea的tar包,解壓完以後先不要動
  2. http://pan.baidu.com/s/1o7A05We 下載一個LicenseServer,解壓,得到許多文件
  3. 因爲我是ubuntu64位,所以選擇linux amd64版本。但是注意,此時文件是運行不了的,因爲沒有執行的權限,要先chmod u+x IntelliJIDEALicenseServer_linux_amd64 來賦予可執行權限。接下來,在運行./ IntelliJIDEALicenseServer_linux_amd64 來運行server. 注意,這個服務器佔用1017端口,而只有root才能使用1024以下的端口,所以要先獲得root權限
  4. 運行後關閉終端,打開idea,輸入http://127.0.0.1:1017 如圖:

    Done~

3.5 flux

flux是一款護眼工具,能根據一天中的不同時間自動調節屏幕亮度。安裝這個有點麻煩,需要先導入flux的ppa源

sudo add-apt-repository ppa:nathan-renniewaldock/flux
sudo apt-get update
sudo apt-get install fluxgui

4. python的安裝


4.1 安裝pip

既然是搭建深度學習環境,同時作爲python玩家,python自然是少不得的。當然了,由於ubuntu在安裝的時候已經裝好了兩個版本的python,分別是2.7和3.5. 所以主要講相關庫的安裝。

首先是pip的安裝。注意pip是安裝python2.7的庫,而pip3纔是安裝python3.5的庫。運行

apt-get install python3-pip

開始安裝pip3. 這裏我要再提一下,一定要用最新版本的ubuntu,我一開始就是在這一步死活裝不上,換成16.04以後一步成功。


4.2 安裝第三方庫

有了pip,就可以進行接下來相關庫的安裝了。我用到的主要有

  • numpy 矩陣運算
  • scipy 科學運算
  • pandas 科學計算
  • gensim 自然語言處理
  • jieba 分詞
  • networkx 網絡分析庫
  • redis Redis數據庫的接口
  • pymongo MongoDB的接口
  • pymysql MySQL的接口
  • matplotlib 繪圖庫
  • seaborn 繪圖庫

以上這些庫使用

pip3 install packagename

即可進行安裝。注意,如果下不動,可以考慮使用豆瓣的源

pip3 install -i http://pypi.douban.com/simple/ packname

如果還是下不動,那可以考慮

apt-get install python3-packname

如果還是不行,那就只能考慮像windows下大部分情況一樣,跑到相關庫的官網或者第三方站點下載whl 文件,然後

pip3 install packname.whl

如果下到的是源碼,即解壓以後裏面有setup.py文件,可以試試

python3 setup.py install

4.3 TensorFlow安裝

Tensorflow是Google開源的深度學習庫。嚴格來說,tensorflow屬於python的一個庫,但是由於安裝方式比較特殊以及太過重要,所以單獨講一下

首先進入tensorflow的官網,但是不知道什麼原因,tensorflow居然被GFW給牆了,我也是搞不懂。。所以,下載tensorflow需要先翻牆。

進入官網以後,選擇進行pip安裝然後按照流程來。我的系統是ubuntu16.04 64位,python版本是python3.5,因爲版本太新所以暫時沒法用CUDA,所以選擇的是CPU-ONLY,所以綜合各項情況,選定的版本是這個

但是這裏有個問題,原來的pip安裝是直接從url下載的,也就是下載-安裝一起完成,而我這裏因爲下載太慢,使用pip安裝時報錯timed out,所以我這裏稍作改動,先用瀏覽器下載whl,然後再用pip安裝,最後的效果是一樣的

最後來測試一下

$ python3
...
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42
>>>

說明已經安裝好了


5. linux 常用知識

5.1 一些常用linux指令

dpkg -i packname                # 安裝deb文件
su username                     # 切換用戶
ln -s                           # 建立軟鏈接
xdg-open                        # 使用系統默認的應用打開當前文件
ls -l filename                  # 查找link鏈
fdisk -l                        # 查看磁盤信息
ps -ef && ps -ef | grep pname   # 查看各進程
netstat                         # 查看端口占用
top                             # cpu使用率
iftop                           # 流量使用率
iotop                           # 磁盤讀寫情況
lsof                            # 顯示文件使用情況,包括進程,端口
pwd                             # 當前文件所在全路徑
chmod                           # 改變文件權限
chown                           # 改變文件擁有者
whereis                         # 查找文件
trickle                         # 限制程序流量
ssh                 
sshfs

5.2 常用文件所在位置

/etc/apt/source.list            # 軟件源位置
/etc/apt/source.list.d/*        # 由第三方添加PPA源引入的軟件源位置
/etc/apparmor.d/*               # apparmor參數設置

/etc/mysql/mysql.conf.d/mysqld.conf # mysql的參數設置

5.3 一些帖子

Apparmor——Linux內核中的強制訪問控制系統
linux添加開機自啓動腳本示例詳解
更新Ubuntu Kylin源遇到問題的解決辦法(GPG錯誤等)
linux系統下 Ubuntu如何使用命令行移除PPA倉庫
Ubuntu基礎知識:關於PPA那些事兒

6. Docker 安裝

docker是一個新的虛擬化工具,具體的就不詳述了。總的來講,安裝流程官網都有的,照着官網流程來就行。因爲我的系統是ubuntu16.04 ,所以是按照這個來的。 不過爲了便於查看,這邊記錄簡化版的流程。

$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates 
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D`   # 增加GPG key

打開/etc/apt/sources.list.d/docker.list, 往其中寫入deb https://apt.dockerproject.org/repo ubuntu-xenial main 增加docker的apt源

$ sudo apt-get update
$ sudo apt-get purge lxc-docker  # 去掉之前的repo
$ apt-cache policy docker-engine # 確認apt能夠獲得對應的庫
# 下面這條命令可以讓我們使用aufs storage driver
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual 

$ sudo apt-get install docker-engine       # 正式安裝
$ sudo service docker start                # 啓動docker
$ sudo docker run hello-world          # 確認docker正常安裝

# 至此docker已經安裝完畢,接下來是一些相關的配置
$ sudo groupadd docker                 # 增加docker用戶組
$ sudo usermod -aG docker $USER        # 將你常用賬號加到docker組裏,這樣不用root就能運行docker了
# 登出,再登入
$ docker run hello-world               # 測試是否需要root權限

注意上面那行$ sudo docker run hello-world那裏,可能會報錯,因爲國內網絡你懂得,有時候會提示下載失敗,timeout之類的。此時docker已經安裝完成需要下載images。在docker hub上有很多images可以選擇,我選了個最簡單的ubuntu

$ docker pull ubuntu  # 從docker hub下載ubuntu的images
$ docker images            

此時就能夠看到下載好的ubuntu。因爲docker使用了aufs,所以相關的images非常小,只有120M左右。
這裏寫圖片描述

$ docker run ubuntu echo "23333"
>>>23333            # 說明可以通過docker來使用下載好的ubuntu了

輸入

$docker run -t -i ubuntu

可以進入虛擬機的shell中

7 Hadoop和Spark的安裝

7.1 Hadoop安裝

關於hadoop的安裝步驟,可以參見我之前的文章linux下命令行安裝hadoop2.7.2過程。下面主要講講spark的安裝過程。spark與hadoop一樣,解壓以後再配置一下就能用了。

7.2 Scala安裝

因爲spark是用scala寫的,雖然提供了python,java等接口,但是還是要安裝scala才能使用。
1.從scala官網下載下載地址
2.解壓scala,放入安裝位置。我是安裝在/usr/lib/scala中的

tar -zxvf scala-2.11.8.tgz  # 解壓
mv scala-2.11.8 /usr/lib/scala # 將解壓後的文件夾移入/usr/lib/scala

3.將SCALA_HOME加入環境變量。打開/etc/profile,往最後寫入

export SCALA_HOME=/usr/lib/scala
export PATH=.:$SCALA_HOME/bin:$PATH

保存退出,在shell中執行source /etc/profile
4.最後測試一下是否安裝成功

scala -version
=>Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL

7.3 Spark安裝

1.從spark官網下載spark,根據你的hadoop版本來。我選了prebuild for hadoop2.7 and later.
2.下載完以後解壓,移到你想要安裝的地方。我放在/home/hamaster/spark

tar -zxvf spark-2.0.1-bin-hadoop2.7.tgz
mv spark-2.0.1-bin-hadoop2.7 /home/hamaster/spark

4.將SPARK_HOME加入環境變量。跟之前一樣,打開/etc/profile,寫入

export SCALA_HOME=/home/hamaster/spark
export PATH=.:$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH

保存退出,shell中執行source /etc/profile
5.修改spark的配置文件。

cd $SPARK_HOME/conf
cp spark-env.sh.template  spark-env.sh
cp slaves.template slaves

6.打開spark-env.sh,往末尾寫入

############ my own spark conf ############
### the location of the dependencies
#export JAVA_HOME=/usr/lib/jvm/java-8-oracle 
export HADOOP_HOME=$HADOOP_INSTALL
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

### the basic conf info of spark
#export SCALA_HOME=/usr/lib/scala
#export SPARK_HOME=$HOME/spark
export SPARK_MASTER_IP=127.0.0.1
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8099

### the detail conf info of spark
export SPARK_WORKER_CORES=1  #每個Worker使用的CPU核數
export SPARK_WORKER_INSTANCES=1 #每個Slave中啓動幾個Worker實例
export SPARK_WORKER_MEMORY=10G #每個Worker使用多大的內存
export SPARK_WORKER_WEBUI_PORT=8081 #Worker的WebUI端口號
export SPARK_EXECUTOR_CORES=1 #每個Executor使用使用的核數
export SPARK_EXECUTOR_MEMORY=1G #每個Executor使用的內存

7.測試spark是否安裝成功

cd /home/hamaster/hadoop/sbin
./start-dfs.sh
cd /home/hamaster/spark/sbin
./start-master.sh
./start-slaves.sh
jps

8. 安裝cuda和cudnn

cuda和cudnn都是nvidia家的使用gpu來對計算進行加速的工具,具體安裝過程比較長,我後來裝了一次,過程寫在ubuntu16.04下安裝CUDA,cuDNN及tensorflow-gpu版本過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章