前情提要: 前幾天大致上已經把fastapi及model inference講完了,接下來就是要包成image。
在最後部屬模型的時候其實要針對使用場景考慮幾個點:
基本上模型都會向下面這樣,要找到一個速度又快準確度又高的非常不容易,所以會針對使用場景。
有些場景要求快速,所以會選擇小一點的model來做或將原先的大model做蒸餾,但準確度要在可接受範圍內。
有些場景要求準確度高,不用在意速度,那基本上就沒什麼差。
準確度 | 模型大小 | 速度 |
---|---|---|
高 | 大 | 慢 |
低 | 小 | 快 |
如果model是不太吃資源的,只需要在CPU上面跑,速度也不慢,那麼我自己是選用這個當我的base image ( https://hub.docker.com/r/frolvlad/alpine-miniconda3/tags ),會用alpine主要是希望size越小越好,但直接在上面用Python還是有點麻煩的,好險上面連結人家已經灌好了miniconda,所以安裝或使用基本上問題不大。
上面提到的base image,可以把它想像你在蓋房子,這個是你的基底,然後你可以在基底上面添加你想要的東西(pytorch, fastapi …)
依我自己過去做的,基本上都是部屬在GPU上面,那container幾乎都直接選用( https://hub.docker.com/r/nvidia/cuda/tags ) nvidia提供的,不過這些images在弱點掃描的時候一定不會過,所以有些機構不會同意使用。
這邊就採用CPU的版本來演示,如何將我們前幾天做的fastapi + pytorch lightning包成image吧。
建議在linux底下包,才比較不會有問題。
首先在原本資料夾的外面創立一個檔案,就叫Dockerfile。
第一行就是採用甚麼base image,後續的每一行可以把他想成你在terminal上面輸入的指令。
不知道從哪個版本的conda開始有些奇怪的東東,所以要加solver classic那行。
from frolvlad/alpine-miniconda3:latest
COPY Day15 /ws
WORKDIR /ws
RUN apk upgrade
RUN conda config --set solver classic
RUN pip install --no-cache-dir torch==2.3.0 torchvision==0.18.0 --index-url https://download.pytorch.org/whl/cpu
RUN pip install -r requirements.txt
RUN conda install lightning
RUN conda clean --all
EXPOSE 8000
CMD ["uvicorn", "app:app", "--host","0.0.0.0", "--port", "8000"]
requirements.txt
fastapi==0.110.3
python-multipart==0.0.6
uvicorn==0.29.0
build 的指令蠻簡單的,在有Dockerfile的那層資料夾下指令,-t代表的是<image名稱>:版本,build需要點時間…
sudo docker build -t example:0.0.1 .
之後就可以用docker images來看你build好的囉
sudo docker images
簡單docker run 來跑一下程式,確認沒有問題
sudo docker run --name example_test -p 8000:8000 example:0.0
.1
今天就先到這裡囉~~
主要的部分其實都講完了,後續再看要更新甚麼。