該如何選擇適合我的AI平台呢?
AI應用越來越多,不論是開發框架或平台因為多已開源,初學者該如何選擇適合自己的開發環境呢?
以Linux做為作業系統的開發環境來說,依照階層可分成管理軟體、開發平台及框架。
- 管理軟體泛指負責硬體管理、Python等工具版本管理及監控系統,常見的有Kubernetes、Docker或Anaconda。
- 開發平台屬於更上層的系統,主要功能在於提供使用者易於撰寫程式的環境,常見包含Jupyter Notebook、JupyterLab、PyCharm或Visual Studio Code
- 框架則為更上層實作機器學習或深度學習的開發套件,框架種類非常多種,依照個人習慣或應用種類各有適合的平台,常見如TensorFlow、PyTorch或Caffe等。
不論管理軟體、開發平台或框架種類繁多,本篇無法一一介紹,故以下僅針對不同類型使用者適合的環境進行介紹。
個人開發者
個人開發者環境多將系統安裝在本機端,常見如在系統中架設Anaconda,以針對專案進行切換及管理,在於Anaconda上透過pip install 安裝深度學習框架。
優點:
- 能針對不同Python或框架版本進行切換
缺點:
- 於硬碟空間要求大
- 部分預安裝完成的套件可能完全不會被使用到
- 針對多版本的框架可能使用的CUDA Toolkit版本不同時,開發者需自行至各版本框架的虛擬環境中進行CUDA Toolkit環境設定
上述缺點,個人開發者也很容易遇到。例如可能前項專案是使用TensorFlow 1.12版本,CUDA Toolkit版本使用10.0,但新專案使用TensorFlow 1.15版本,此時必須將CUDA Toolkit版本升級到10.2。舊專案和新專案都要同時能執行的情況下,兩者使用的CUDA Toolkit版本就需各自於兩者的虛擬環境進行設定。
麗臺AI專家推薦大家使用Docker做為管理軟體,Docker包含Anaconda的優點,又不可避免繁瑣進行環境設定的工作。
優點:
- 不同開發環境包含輕量OS,如同虛擬機,各自有獨立的開發環境
- 主流框架官方皆有開源版本可於Docker Hub直接下載,免除繁複的安裝流程
- NVIDIA提供nvidia-docker套件,Docker服務中可包含GPU資源。
- 可結合常用的開發平台如Jupyter notebook或Visual Studio Code等。
若問Docker有沒有甚麼缺點或使用上的注意事項?就是Docker環境包含上述OS(輕量)、開發平台及框架,環境通常會佔4-7GB不等的空間,若持續安裝套件也會持續增加硬碟容量,這是不論任何虛擬環境都需要注意的部分。
至於上層要使用Jupyter notebook或Visual Studio Code,只能說兩者都各自有習慣的使用者,Visual Studio Code好處在於繼承Visual Studio平台易於Debug的優點,而Jupyter notebook則是具有開發及有強大的註解功能易於進行教程,如今Visual Studio Code已可結合Jupyter notebook於其中,對於開發者來說實在是一大福音。
(關於Jupyter notebook:https://code.visualstudio.com/docs/python/jupyter-support)
至於深度學習框架,每種框架皆有習慣的使用者及功能,本篇就不詳細介紹。不過,目前最多開發者使用的框架以TensorFlow及PyTorch兩者為最主要框架。前者為Google團隊開發及維護,更支援多種語言,目前是最多人使用的框架。後者為Facebook的AI團隊開發,也有不少的擁護者,近兩年發展迅速並且有追上TensorFlow的氣勢。不論使用何種框架,Python仍是目前AI開發上最需具備的程式語言。
小型研究單位
小型研究單位主要以2人以上到10人以下的AI開發團隊,深度學習在模型建置過程中,會消耗極大量的硬體資源,其中最重要的硬體為GPU,所以如何有效率的分散GPU資源,對於團隊工作是否能順利進行就很重要。
最適合小團隊使用的管理軟體推薦同樣也是Docker,Docker除了具有分配GPU、CPU及RAM等硬體資源於虛擬容器外,還包含了框架及應用程式版本管理。在沒有硬體管理軟體的情況下,多GPU系統資源較難被分配(若不指定GPU,運算通常都是ID為0的GPU),或者團隊內部需先溝通好使用的硬體資源,否則容易造成某些GPU被搶占或閒置的問題。
Docker透過硬體資源事先分配,可以解決這樣的狀況(如下圖)。有別於現在大型企業常用的Kubernetes,不同的Docker虛擬機可配置在同一組GPU硬體上,讓硬體資源能更有效被利用。
至於開發平台選擇上同個人開發者情境,不論Visual Studio Code或Jupyter notebook都可依照個人開發習慣選擇。
若考量開發程式要併入教學,那麼因Jupyter notebook可分區塊執行程式碼,並且容易撰寫註解,所以很適合作為教材開發。
但若是以專案系統開發為主,那Visual Studio Code的Debug功能則更為適合系統開發。
不論選擇平台或工具為何,最重要的是開發者能專注於模型及系統的研發及開發,其他硬體或管理軟體可交由團隊的系統管理員負責操作,而Docker會是很適合的選擇。以下同時附上Docker的安裝連結,請記得先安裝Docker Engine後再安裝nvidia-docker套件。
Docker Engine安裝流程:https://docs.docker.com/install/
nvidia-docker 安裝流程:https://github.com/NVIDIA/nvidia-docker