AI 學習紀錄 – 利用 Docker 部屬模型

我本來學習 AI 是抱著把流程寫詳細,下次要用就從頭來的把每個步驟跑一遍的想法。這也是我過去工作上的習慣,要搭建一個服務就會寫的詳細一點,下次從頭來省事。但最近學習 AI, 發現很多模組都進版的很快, 沒多久前寫的流程就不能用了~ 原來每個模型的使用,都是搭在數十個不同的模組之上,其中一個改版了,可能就會有問題。

當然有一種做法是在做安裝的時候,把每個模組也記下來,不過這樣好像也更不方便。趁此機會,想起來了一直被我看不起的 docker,這次終於發揮效用了,真的達到了快速部屬的目的。

安裝 Docker for Cuda

參考了這3篇文章

  1. 安裝 Nvidia Docker
  2. Nvidia Docker 官方文件
  3. 安裝 Nvidia Driver

更新 Nvidia Driver

由於 Nvidia Docker 會有相容的 Driver 版本,所以推荐更新到最新版省麻煩。可到這裡下載,官方還蠻貼心的,分成了不同OS / Distribution。

Nvidia Driver 下載

安裝 Nvidia Docker

參考安裝 Nvidia Docker 的文章,簡短摘要如下

安裝 Docker

一般應該是直接用 apt 就行了

若要裝最新版

Nvidia Docker

Nvidia Docker Image

最後參考官方網頁,拉下最新的 image

我看 nvidia 幾乎每個月都有出一版,所以可以直接把 23.08 最代成最近的試試看。23.08 這個 Python 是 3.10 的。

Docker 簡單介紹

Docker 我是沒在用的,所以就寫一些基本介紹。簡單可以分為 Docker Image 和 Container。Image 就是想說是 template,而container就是運作中的實例。上面從 nvidia 拉下來的,就是 image,再透過執行這個 image (並保留資料)來產生 container。

刪除 docker images

Docker 提供了 rmi 參數, 可以用作刪除 images, 但在執行前, 我們需要知道 image id, 先用以下指令找出 image id:

找到要刪除的 image 的 image id 後, 便可以執行以下指令刪除:

刪除 docker containers

要刪除 containers, 跟上面的做法差不多, 只要將參數換成 rm, 但在執行前, 要先找出 container id:

找到了要刪除的 container 的 container id 後, 如果 container 正在執行, 要先停止才可以刪除, 以下是將 container 停止及刪除的指令:

一次刪除所有 container

Nvidia Docker 操作

產生 container 並執行

若在 -it 後面加上 –rm ,就不會產生新的 container,可以單純的僅使用環境。下面這些參數是 nvidia 建議的,應該是怕模型跑不動吧。

另外 -v 可以把host端的目錄mount到container裡面,這樣可以做為檔案共享。我是把 .cache 共,這樣就不用每次都重下載 python 的檔案了,現在的套件都肥滋滋,下載要時間儲存也要空間。

啟動並進入 container

若已經啟動,可以改下

以交互方式進入 container後,下達命令 exit 就會退出並結整 container。

將 container 存成新的 image

把 container 存新的 image,這邊都是本地端而已。

將 image 匯出

將 image 匯入

將 Image 改名

若要改名,就先產生一個 tag 的 image,再將舊的砍掉就行

Docker 管理 GUI

最後再提一下一套管理 docker 的圖型化介面 Portainer,介紹在這裡。簡單的執行2行就可以了

然後再以瀏覽器開啟 https://YOUIP:9443 就可以了,剩下的不能,自己試一下應該就可以。

 

結語

Docker 對於偏簡單應用型的人來講的確是很方便,不用懂它實際的操作,也不會變更設定。當然還有其它更多相容性的好處,不過我這就沒用到了。不過建議大家還是要寫個流程,這樣知識才有辦法傳承下去。

 

Leave a Reply(Name請以user_開頭,否則會被判定會垃圾息)

請輸入答案 5 × 6 =