深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te
深度學習開發(fā)環(huán)境調(diào)查結(jié)果公布,你的配置是這樣嗎?(附新環(huán)境配置)
機器之心?2017-06-25 12:27?閱讀:108 摘要:參與:李澤南、李亞洲本周一(6月19日)機器之心發(fā)表文章《我的深度學習開發(fā)環(huán)境詳解:TensorFlow+Docker+PyCharm等,你的呢(附問卷)》介紹了研究員Killian的深度學習開發(fā)環(huán)境參與:李澤南、李亞洲
本周一(6 月 19 日)機器之心發(fā)表文章《我的深度學習開發(fā)環(huán)境詳解:TensorFlow + Docker + PyCharm 等,你的呢(附問卷)》介紹了研究員 Killian 的深度學習開發(fā)環(huán)境:TensorFlow + Docker + PyCharm + OSX Fuse + Tensorboard,并附了一份調(diào)查問卷想要了解機器之心讀者配置的開發(fā)環(huán)境、對編程語言、框架的使用情況。雖然獲得的反饋量比較有限,但我們也觀察到了一些比較有趣的現(xiàn)象。在這篇文章中,我們將對此問卷的結(jié)果進行介紹,希望對需要配置開發(fā)環(huán)境的讀者有所幫助。最后,我們介紹了一種新的開發(fā)環(huán)境配置:Jupyter + Tensorflow + Nvidia GPU + Docker + Google Compute Engine。
問卷結(jié)果
該調(diào)查問卷文章發(fā)布之后共有超過 10800 名讀者閱讀,收到大量有效答卷,另有 16 名讀者是以留言的方式在文章下介紹了自己的開發(fā)系統(tǒng)。大部分被調(diào)查者來自中國大陸,此外還有多名來自北美大學和研究機構(gòu)的調(diào)查者參與其中。以下的數(shù)據(jù)統(tǒng)計圖表中,并不包含微信文章留言的數(shù)據(jù)。
根據(jù)表單后臺的數(shù)據(jù)統(tǒng)計,參與調(diào)查的讀者中大部分為學生,然后是開發(fā)工程師、研究員、產(chǎn)品經(jīng)理等。
而在被調(diào)查者的研究方向上,計算機視覺領(lǐng)域占比接近一半(48.2%),自然語言處理次之(26.8%),這部分反映了目前深度學習的主要研究方向。此外還包括金融風控、數(shù)據(jù)分析、現(xiàn)場安全識別、通信、時空大數(shù)據(jù)、醫(yī)學圖像、催化以及材料模擬等領(lǐng)域。
下面就開始詳細為大家介紹調(diào)查者們最常用的編程語言、深度學習框架,以及在開發(fā)過程中面臨的難題。
一、Python 成為深度學習主流語言
機器之心一直關(guān)注機器學習研究員、工程師在開發(fā)過程中所注重實用的工具、語言。在不久之前發(fā)布的文章《業(yè)界 | 超越 R,Python 成為最受歡迎的機器學習語言》中,KDnuggets 與 O'Reilly 的調(diào)查結(jié)果都表明,越來越多的人開始使用 Python 進行機器學習。
2016 年 KDNuggets 調(diào)查結(jié)果
在機器之心問卷中,對于問題「您認為哪種語言會成為深度學習的主流語言?」,所有被調(diào)查者的態(tài)度完全一致:Python!看來,Python 已是絕大多數(shù)從業(yè)人員必須學習的語言,同時也是眾望所歸的未來主流深度學習語言。
O'Reilly 2016 年度數(shù)據(jù)科學薪資調(diào)查曾顯示:Python 和 Spark 是最對薪資有貢獻的工具。Python 具有開發(fā)速度快的特點,Caffe、TensorFlow 等主流深度學習框架都對其支持。騰訊最近推出的機器學習高性能計算平臺 Angel 在支持 Java、Scala 之外,也將在未來對 Python 提供支持。
在機器之心的問卷中,調(diào)查者反饋,雖然他們會使用其他編程語言,比如 R、C++,但實際運行程序的編寫還是主要使用 Python,簡單、開發(fā)速度快是很大的優(yōu)勢。
其他語言的使用情況簡介如下:Matlab 用于快速完整、可視化研究;R 方便框架模型的驗證分析,也便于處理數(shù)據(jù)和畫圖。因此,多數(shù)人在不同的開發(fā)流程中使用不同的語言
二、TensorFlow 占據(jù)半壁江山
而在框架方面,谷歌支持的 TensorFlow 就沒有這樣的壟斷地位了,不過它也已占據(jù)了接近一半(48%)的水平。完善的功能和大量的支持文檔(眾多 TensorFlow 支持者提到的)是目前 TensorFlow 的強項,存在于 GitHub 中的大量實現(xiàn)更是不容忽視,可視化工具 TensorBoard 則為開發(fā)者提供了直觀的引導。但由于網(wǎng)絡(luò)問題,TensorFlow 系統(tǒng)在大陸的搭建是個難題。部分被調(diào)查者也指出,TensorFlow 的 Windows 支持也為他們帶來了便利。
Facebook 新近推出的框架 PyTorch 人氣急劇攀升,在僅僅推出 5 個月的情況下達到了第二的位置(16%),因支持動態(tài)計算圖,易用性和強大的性能而出名。在業(yè)界還需要產(chǎn)品遷移的情況下,學界已經(jīng)出現(xiàn)擁抱 PyTorch 的趨勢了。
同屬于 Facebook 的 Caffe/Caffe2 則占據(jù)第三(14.7%),大部分被調(diào)查者在對于 Caffe 系列的評價中都提到了快速的特點。
此外,亞馬遜支持的 MXNet 占據(jù)了 10.7% 的用戶數(shù)量,排名第四。被調(diào)查者認為,MXNet 擁有很好的社區(qū)支持,因而易于使用。
三、硬件
硬件方面,超過一半的被調(diào)查者明確表示自己的深度學習硬件是英特爾 Core i7 + 英偉達 Geforce GTX 1080(Ti)的組合。與 TitanX 相比,英偉達 Tesla 系列的應用顯得更少,看來英偉達推動的商用機器學習計算卡仍然需要進一步的推廣。由于資源限制,GPU 陣列的使用并不流行,而云服務也沒有被大部分開發(fā)者采用(也是經(jīng)費原因)。
目前,雖然人們對于多 GPU/分布式機器學習訓練/處理的呼聲很高,但相關(guān)的教程和可以借鑒的方法仍顯欠缺,這或許是經(jīng)費之外人們面臨的最大難題。
四、系統(tǒng)
Linux 顯然是深度學習的必備系統(tǒng),雖然 TensorFlow 已有 Windows 支持,但大多數(shù)受訪者表示自己的深度學習機器使用基于 Linux 的 Ubuntu 系統(tǒng)。
五、面臨的難題
在搭建深度學習環(huán)境的過程中,各組件的兼容性問題一直是困擾開發(fā)者們的難題,部分開發(fā)者表示依賴關(guān)系處理比較頭疼,而使用 Docker 可以部分解決這些問題。英偉達的 cuda/GPU 驅(qū)動程序安裝困難也是很多調(diào)查者提到的問題。
需要配置安裝很多不同的開發(fā)框架……還有擴展計算集群……
本次深度學習開發(fā)環(huán)境調(diào)查已經(jīng)結(jié)束,由于樣本數(shù)量限制,這次我們得出的結(jié)論可能不甚準確。深度學習的開發(fā)環(huán)境會隨著技術(shù)的發(fā)展不斷進化,未來究竟是百家爭鳴,還是一家獨大?歡迎大家前來討論。感謝大家對機器之心此次調(diào)查問卷的支持,獲得獎品同學的禮物已經(jīng)寄出。
Jupyter + Tensorflow + Nvidia GPU + Docker + Google Compute Engine
這一部分,我們編譯了一篇新的深度學習開發(fā)環(huán)境配置:Jupyter + Tensorflow + Nvidia GPU + Docker + Google Compute Engine。
動機:商業(yè)上喜歡快捷、且由數(shù)據(jù)驅(qū)動的洞見,因此他們聘請了數(shù)據(jù)科學家來處理這些任務。實踐性的數(shù)據(jù)科學是探索性、迭代性的過程,這個過程要求大量的計算資源和時間。數(shù)據(jù)科學家經(jīng)常使用 Jupyter notebook 以更好地支持這種探索性的迭代,同時更傾向于使用 GPU 以加速 Tensorflow 項目的計算。然而,GPU 成本比較高,而計算資源也需要小心地管理以滿足商業(yè)上對高效運算的需求。
近來云計算傾向于使用 Kubernetes 和 Docker 提高資源利用率。那數(shù)據(jù)科學的工具(如 Jupyter 和 GPU 等)嵌入 Docker 和 Kubernets 會更有效嗎?也許這樣更節(jié)約時間和內(nèi)存,我前面已經(jīng)用過了其他版本,但現(xiàn)在的環(huán)境配置是比較優(yōu)秀的。
創(chuàng)建一個 GCE 實例
首先,創(chuàng)建防火墻規(guī)則,將 Jupyter(8888)和 Tensorboard(6006)添加到白名單中。
然后創(chuàng)建一個 GCE 實例,對于該案例:
-
使用的系統(tǒng)為 Ubuntu 16.04 LTS
-
分配 50GB 的啟動盤
-
至少需要一個 K80 GPU
-
將 jupyter 和 tensorboard添加到你創(chuàng)建的防火墻規(guī)則中。
安裝和確認 CUDA 能訪問 GPU
使用英偉達的 CUDA 庫取得訪問 GPU 的權(quán)限。
下一步需要將 SSH 添加到你創(chuàng)建的計算節(jié)點中,然后使用腳本安裝 CUDA(https://cloud.google.com/compute/docs/gpus/add-gpus):?
#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! dpkg-query -W cuda; then
?# The 16.04 installer works with 16.10.
?curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
?dpkg -i ./cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
?apt-get update
?apt-get install cuda -y
fi
然后你能使用 wget 命令 pull 來源 gist 并輸入到 bash 中:
wget -O - -q 'https://gist.githubusercontent.com/allenday/f426e0f146d86bfc3dada06eda55e123/raw/41b6d3bc8ab2dfe1e1d09135851c8f11b8dc8db3/install-cuda.sh' | sudo bash如果 CUDA 安裝成功了,運行 nvidia-smi 命令將返回表格顯示可用的 Tesla K80 GPU:
nvidia-smi
安裝 Docker(-Engine) 和 Nvidia-Docker
對于 docker,我們需要從 Docker 獲取 docker-ce 版本,而不是 Ubuntu 自帶的 docker.io 包。可以使用以下腳本完成(https://docs.docker.com/engine/installation/linux/ubuntu/)(https://docs.docker.com/engine/installation/linux/ubuntu/%EF%BC%89):
#/bin/bash
# install packages to allow apt to use a repository over HTTPS:
sudo apt-get -y install \
apt-transport-https ca-certificates curl software-properties-common
# add Docker』s official GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -?
# set up the Docker stable repository.
sudo add-apt-repository \
?"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
?$(lsb_release -cs) \
?stable"
# update the apt package index:
sudo apt-get -y update
# finally, install docker
sudo apt-get -y install docker-ce
或使用我的:
wget -O - -q 'https://gist.githubusercontent.com/allenday/c875eaf21a2b416f6478c0a48e428f6a/raw/f7feca1acc1a992afa84f347394fd7e4bfac2599/install-docker-ce.sh' | sudo bash
從 deb 文件安裝 nvidia-docker(https://github.com/NVIDIA/nvidia-docker/releases/):
wget https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
從 Docker 容器確認 GPU 是可用的
起始化 nvidia-docker-plugin 需要在跟權(quán)限下運行:
sudo nvidia-docker-plugin &
nvidia-docker-plugin | 2017/06/07 01:05:05 Loading NVIDIA unified memory
nvidia-docker-plugin | 2017/06/07 01:05:05 Loading NVIDIA management library
nvidia-docker-plugin | 2017/06/07 01:05:08 Discovering GPU devices
nvidia-docker-plugin | 2017/06/07 01:05:08 Provisioning volumes at /var/lib/nvidia-docker/volumes
nvidia-docker-plugin | 2017/06/07 01:05:08 Serving plugin API at /run/docker/plugins
nvidia-docker-plugin | 2017/06/07 01:05:08 Serving remote API at localhost:3476
現(xiàn)在確保 docker 容器可以看到 GPU:
sudo nvidia-docker run --rm nvidia/cuda nvidia-smi
如上圖所示,現(xiàn)在得到的表格和前面使用 nvidia-smi 命令,且沒有在 Docker 容器里運行得到的表格是一樣的
創(chuàng)建一個 Snapshot 卷
如果你跟著上面運行下來了,你可能注意到它需要花費一點時間。而當我們運行 GPU 實例時,那成本就比較大了。所以我們需要避免重復以上過程浪費時間和內(nèi)存,我們可以將以上過程做一個整合,當我們需要啟動 GPU 時就可以直接使用。
登陸 Jupyter 和 TensorBoard
sudo nvidia-docker run --rm --name tf1 -p 8888:8888 -p 6006:6006 gcr.io/tensorflow/tensorflow:latest-gpu jupyter notebook --allow-root
上面命令可以展示為一個鏈接:
http://localhost:8888/?token=c8caba947dfd4c97414447c074325faf399cf8a157d0ce2f
最后尋找一個 GCE 實例的外部 IP 地址,并將它連接到端口 8888,即 http://EXTERNAL_IP:8888/,從你的控制臺鍵入類似的符號,現(xiàn)在你就擁有了一個可以在 GPU 上運行 TensorFlow 的 Jupyter notebook。
總結(jié)
以上是生活随笔為你收集整理的深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷歌研发能处理多域多任务的机器学习模型—
- 下一篇: 在Kaggle上赢得大数据竞赛的技巧和窍