在CentOS 7下搭建機器學習環境
這篇文章主要是用來記錄我自己用CentOS搭建機器學習環境的過程,靈感來源及主要參考為
用 CentOS 7 打造合適的科研環境
這篇文章對於我自己而言主要是整理自己的經驗以及作為未來重裝系統時參考,也希望這篇文章對其人也有一定的借鑒意義。
安裝CentOS 7
實際上在Ubuntu上搭建機器學習環境比在CentOS上簡單,選擇CentOS而不選擇Ubuntu的原因有二:
1.Ubuntu自帶的Unity桌面太丑而且默認裝了太多無用軟體
2.入門Linux系統時使用的是CentOS,所以更熟悉CentOS
準備工作
- 準備材料
- U 盤:容量 4GB 以上,用於製作 U 盤啟動盤,因為在製作啟動盤時會格式化 U 盤,所以 U 盤內不要包含重要資料
- 安裝鏡像:CentOS官網下載CentOS 7 LiveGNOME鏡像文件
- LinuxLive USB Creator:Windows 下的 U 盤啟動盤製作工具
- 一個已安裝 Windows 的電腦:用於製作 U 盤啟動盤
- 運行 LinuxLive USB Creator 並製作 U 盤啟動盤,製作時persistence space拉到最大
- 將 U 盤插入計算機,重啟,進入 BIOS 選擇從 U 盤啟動,即可進入 CentOS 的 LiveCD
- 進入 LiveCD 後,點擊桌面的 「Install to Hard Drive」 即可安裝
安裝過程
整個安裝過程與參考文章中是一樣的。
- 選擇安裝過程中使用的語言,這裡應 使用英語,不要使用漢語。若安裝界面使用漢語,最終安裝的系統中會出現兩個比較麻煩的問題:
- 家目錄下的系統文件夾如 Downloads、Desktop 等會以中文表示,這使得在命令行 cd 變得很麻煩;
- 終端中某些字元用英文字體,某些字元用中文字體,效果非常差,需要自己修改終端字體方可;
- 選擇區域和城市:Asia 和 Shanghai
- 鍵盤使用 English(US) 而不是 English(UK)
- Hostname 可以改也可以不改
- 安裝的目的地,選擇要使用的硬碟,在 「Other Storage Options」 處選擇「I will configure partioning」,即手動分區
分區
- 點擊 「Click here to create them automatically」,即讓安裝程序幫忙分區
- 默認的分區方案是使用 LVM,其好處在於 「當機器有多塊硬碟時,在使用的時候看上去只有一塊」
- 默認的文件系統為 XFS 而不是以前常用的 EXT4;
- 自動分區完成後,再根據自己的需求,手動修改分區細節
- /boot :CentOS 自動分配,一定不要亂改;
- / :根目錄,合理使用並及時清理的話 15G 就夠了,不過建議 30G 以上;
- swap :與物理內存大小一致即可
- /opt :個人習慣是將第三方軟體都安裝在 /opt 下,所以分了 70G
- /home :餘下的全部空間
- 點擊 「Begin to Install」 開始安裝
真正的安裝
- 設置 root 密碼
- 創建一般用戶
- 等待安裝完成
- 安裝完成,重啟
- 重啟後,同意 License 即可
對系統的若干修改
給一般賬號 root 許可權
- 日常工作中使用 root 賬號,是非常糟糕且危險的習慣!
- 一般賬號是沒有 root 許可權的,不能使用sudo。
假設賬戶名為 grom,要授予他 root 許可權,則要修改配置文件 /etc/sudoers :
$ su# echo grom ALL=(ALL) ALL>> /etc/sudoers # 向配置文件中加入語句# tail -1 /etc/sudoers # 檢查一下是否正確grom ALL=(ALL) ALL
其中 grom 為當前用戶名。
配置yum源
將yum源配置為國內源可以獲得比較快的下載速度,在學校使用的是中科大的鏡像站,以後離開學校應會使用網易的鏡像站。
- 首先備份 CentOS-Base.repo
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
- 將網頁中的內容新的CentOS-Base.repo
sudo vim /etc/yum.repos.d/CentOS-Base.repo
- 更新軟體包緩存
sudo yum makecache
添加第三方源
EPEL
EPEL 即 Extra Packages for Enterprise Linux, 為 CentOS 提供了額外的 10000 多個軟體包,而且在不替換系統組件方面下了很多功夫,因而可以放心使用。
sudo yum install epel-release
執行完該命令後,在 /etc/yum.repos.d 目錄下會多一個 epel.repo 文件。
ELRepoELRepo 包含了一些硬體相關的驅動程序,比如顯卡、音效卡驅動:
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgsudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
完成該命令後,在 /etc/yum.repos.d 目錄下會多一個 elrepo.repo 文件。
安裝 yum-axelget
yum-axelget 是 EPEL 提供的一個 yum 插件。使用該插件後用 yum 安裝軟體時可以並行下載,大大提高了軟體的下載速度,減少了下載的等待時間:
sudo yum install yum-axelget
安裝該插件的同時會安裝另一個軟體 axel。axel 是一個並行下載工具,在下載 http、ftp 等簡單協議的文件時非常好用。
第一次全面更新
在進一步操作之前,先把已經安裝的軟體包都升級到最新版:
sudo yum update
重啟
第一次全面更新完之後建議重啟。
刪除多餘的 kernel
在前面的 yum update 執行之後,可能會將 kernel 也一起更新,則在啟動 CentOS 時啟動項中會有很多項。
確認當前使用的 kernel 版本號:
$ uname -r3.10.0-123.9.3.el7.x86_64
查找當前系統安裝的所有 kernel:
$ rpm -qa | grep kernel | sortkernel-3.10.0-123.8.1.el7.x86_64kernel-3.10.0-123.9.2.el7.x86_64kernel-3.10.0-123.9.3.el7.x86_64kernel-devel-3.10.0-123.8.1.el7.x86_64kernel-devel-3.10.0-123.9.2.el7.x86_64kernel-devel-3.10.0-123.9.3.el7.x86_64kernel-headers-3.10.0-123.9.3.el7.x86_64kernel-tools-3.10.0-123.9.3.el7.x86_64kernel-tools-libs-3.10.0-123.9.3.el7.x86_64
可以看出有三個版本的 kernel,123.8.1、123.9.2 和 123.9.3。除了最新的 kernel 外,建議多保留一個舊 kernel,以免新 kernel 出現問題時可以通過舊 kernel 進入系統。因而此處刪除 123.8.1 版本的 kernel:
sudo yum remove kernel-3.10.0-123.8.1.el7.x86_64sudo yum remove kernel-devel-3.10.0-123.8.1.el7.x86_64
基礎開發環境
GCC 系列
sudo yum install gcc # C 編譯器sudo yum install gcc-c++ # C++ 編譯器sudo yum install gcc-gfortran # Fortran 編譯器sudo yum install compat-gcc-44 # 兼容 gcc 4.4sudo yum install compat-gcc-44-c++ # 兼容 gcc-c++ 4.4
軟體開發輔助工具
sudo yum install makesudo yum install gdb # 代碼調試器sudo yum install cmake # Cmakesudo yum install git # 版本控制
安裝CUDA 8.0
CUDA?是一種由NVIDIA推出的通用並行計算架構,現行的深度學習框架如caffe、tensorflow都需要先安裝CUDA才能安裝GPU版本,否則只能安裝CPU版本。安裝CUDA時會一併安裝NVIDIA的顯卡驅動。(CentOS自帶的顯卡驅動是不支持N卡的,所以一開始我把屏幕連接到主板集成顯卡的輸出口上,這樣安裝時似乎避免了一些繁瑣的過程)
- 如果顯示器接到N卡,關機,接到集成顯卡,啟動。
- 去NVIDIA官網下載對應版本的網路安裝包
- 依照官網的指引,執行
sudo rpm -i cuda-repo-rhel7-8.0.61-1.x86_64.rpmsudo yum clean allsudo yum install cuda
注意 ,執行第一行有可能有警告,網上資料說這是由於yum安裝了舊版本的GPG keys造成的,可以在語句後加上--force強制執行。
- 安裝完畢後在~/.bashrc中添加環境變數
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
- 編譯並運行CUDA自帶的例子,檢驗是否安裝成功
$cd /usr/local/cuda-8.0/samples$sudo make…………Finished building CUDA samples$cd bin/x86_64/linux/release/$./deviceQuery
出現顯卡信息表明安裝成功。編譯過程中可能會有警告信息,但是並不影響最後結果。
- 關機,下次啟動前將顯示器接到N卡上。(如果繼續接到集成顯卡將無法進入圖形界面)
安裝cuDNN 5.1
cuDNN是 CUDA的一個深度網路加速庫,也是深度學習框架所需要的。安裝cuDNN的過程實際上是下載cuDNN庫並拷貝到CUDA的目錄中。下載cuDNN庫後,進入下載目錄執行以下命令即完成安裝。
tar xzvf cudnn-8.0-linux-x64-v5.1.tgzsudo cp -P cuda/include/cudnn.h /usr/local/cuda/includesudo cp -P cuda/lib64/lib* /usr/local/cuda/lib64sudo chmod a+r /usr/local/cuda/include/cudnn.hsudo chmod a+r /usr/local/cuda/lib64/lib*sudo ldconfig
安裝Anaconda
Anaconda是一個用於科學計算的Python發行版,支持 Linux, Mac, Windows系統,提供了包管理與環境管理的功能,可以很方便地解決多版本python並存、切換以及各種第三方包安裝問題。
- 下載Anaconda ,選擇python2.7對應版本
- 在下載目錄執行下面的語句
sudo bash Anaconda2-4.3.1-Linux-x86_64.sh
- 執行conda list驗證安裝
安裝完畢後可以配置tuna的鏡像源,運行以下命令:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --set show_channel_urls yes
即可添加 Anaconda Python 免費倉庫。
安裝TensorFlow
安裝Anaconda之後就可以很便捷的安裝TensorFlow。
conda install tensorflow-gpu
安裝完畢後,執行一個hello world程序來驗證安裝
$ python>>> import tensorflow as tf>>> hello = tf.constant(Hello, TensorFlow!)>>> sess = tf.Session()>>> print(sess.run(hello)
出現Hello, TensorFlow!表示安裝成功。
安裝opencv
OpenCV是一個開源跨平台計算機視覺庫,可以很方便的對圖片進行處理。
conda install -c https://conda.binstar.org/menpo opencv
即可安裝OpenCV
NTFS 驅動
CentOS 下默認無法掛載 NTFS 格式的硬碟。需安裝 nfts-3g 即可實現即插即用:
sudo yum install ntfs-3g
科學上網
用ss來實現科學上網
- 下載工具
sudo yum install shadowsocks-libev
- 修改配置文件
sudo chmod 777 /etc/shadowsocks-libev/config.jsonvim /etc/shadowsocks-libev/config.json
- 啟動程序
ss-local&
zsh 與 oh my zsh
Linux 下有很多 shell,比如最常見的 bash,除此之外還有 csh、ksh。zsh 也是一個 shell。
zsh 的特點在於:
- 語法基本完全兼容於 bash,一般用戶完全體會不到其區別
- zsh 提供命令補全特性,比 bash 的補全要更好用
- 可配置性強
完全不經配置的 zsh 已經很好用了,一般用戶也沒必要花時間研究配置。 oh my zsh 是一群人一起維護的一套 zsh 配置文件。 直接用這個配置文件,稍稍了解一點會有更好的體驗。
主題選擇為ys
推薦閱讀:
※王垠當年提倡「完全用 linux 工作」,然而最近又發文挺 windows 噴 unix,這中間究竟經歷了什麼?
※glibc源碼分析(一)系統調用
※linux下的find文件查找命令與grep文件內容查找命令
※哪種Linux發行版適合程序員做開發?