網站首頁 編程語言 正文
TorchServe部署yolov5項目(Docker篇)
一、前言
? 沒啥說的,要不然你也不會對這篇blog感興趣
二、打包mar
1.下載項目
#下載分支mini版本(推薦先用mini版本上手,然后用完成版本驗證)
git clone -b mini https://github.com/lbz2020/torchserve_yolov5.git
#下載完整版本
git clone https://github.com/lbz2020/torchserve_yolov5.git
2.進入項目主目錄 torchserve_yolov5(終端命令窗口,我是在Mac OS 下操作的,沒能照顧到Windows用戶)
? 注意:如果沒有特別說明或指定,全文命令的相對路徑都是在項目主目錄進行
3.安裝依賴
#升級pip
pip install --upgrade pip
#安裝依賴(使用國內鏡像加速)
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
4.進入子目錄 yolov5,將.pt文件轉成.torchscript文件
#打開子目錄 yolov5
cd yolov5
#由.pt文件導出.torchscript文件
python export.py --weights yolov5s.pt --include torchscript
5.回到項目主目錄
#返回上一級目錄
cd ..
6.打包成.mar文件
#將所有文件打包成.mar文件
torch-model-archiver --model-name demo --version 1.0 --serialized-file yolov5/yolov5s.torchscript --handler yolov5_model_handler.py --extra-files index_to_name.json
torch-model-archiver參數解釋
-
–model-name :模型名字 demo
-
–version:模型版本號 1.0
-
–serialized-file:由.pt生成的.torchscript文件 yolov5/yolov5s.torchscript
-
–handler 針對yolov5模型的處理器,包括預處理、推理、后處理等過程 yolov5_model_handler.py
-
–extra-files 一起打包的額外文件,這里包含了標簽索引的映射文件 index_to_name.json
執行上面命令后,會在項目主目錄下生成一個
demo.mar
文件
7.在項目主文件夾下創建一個文件夾model-store
,接著把demo.mar
文件放到文件夾model-store
里面去。目的是待會用容器啟動的時候做一個文件夾的映射。
#注意:以下是Linux命令!!!
#創建一個文件夾model-store
mkdir model-store
#將demo.mar文件移到到文件夾model-store中
mv demo.mar ./model-store
三、docker鏡像
這里不建議直接pull官方提供的docker鏡像
#拉取torchserve官方鏡像(不用管)
docker pull pytorch/torchserve
注意:為什么不直接使用官方提供的鏡像呢?因為官方提供的鏡像里面只提供最基本的python依賴包。我們在寫handler
文件的時候一般都會用到其他依賴的,例如opencv等。這些依賴都是官方docker鏡像沒有提供的。后面我會做一個公開的鏡像放在dockerhub上,以便供大家拉取。
1.假設我們都下載并安裝了docker
2.制作TorchServe的docker鏡像
接下我們制作要做的其實就是在官方Dockerfile
里添加yolov5的一些python依賴
RUN python -m pip install matplotlib>=3.2.2 numpy>=1.18.5 opencv-python>=4.1.1 Pillow>=7.1.2 PyYAML>=5.3.1 requests>=2.23.0 scipy>=1.4.1 torch>=1.7.0 torchvision>=0.8.1 tqdm>=4.64.0 tensorboard>=2.4.1 pandas>=1.1.4 seaborn>=0.11.0 ipython psutil thop>=0.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/
? a.修改Dockerfile文件
? 找到Dockerfile文件:在主目錄/serve/docker文件夾里面
? 然后打開Dockerfile文件,定位到第76行的地方,把下面的命令添加上去
RUN python -m pip install matplotlib>=3.2.2 numpy>=1.18.5 opencv-python>=4.1.1 Pillow>=7.1.2 PyYAML>=5.3.1 requests>=2.23.0 scipy>=1.4.1 torch>=1.7.0 torchvision>=0.8.1 tqdm>=4.64.0 tensorboard>=2.4.1 pandas>=1.1.4 seaborn>=0.11.0 ipython psutil thop>=0.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/
? b.在終端中執行命令
#打開目錄path,主目錄/serve/docker
#必須定位到docker目錄中,否則會有很多未知問題
cd serve/docker
#創建鏡像(Linux)
./build_image.sh
? windows有很多bug,而且制作鏡像的時間較長,大概一個多小時創建完,然后沒去嘗試了。
two thousands years later ------------------------->>>>
在docker面板上可以看到創建成功的Docker鏡像 pytorch/torchserve:latest-cpu
end --------------------------------<<< !
四、部署
? docker命令要會**億點點**哈哈哈哈哈哈哈哈哈哈
1.啟動docker鏡像
#啟動命令格式(dev環境,不會后臺運行)
docker run --rm -it -p 宿主主機端口:容器內部端號 --name 容器名字 -v 宿主主機文件夾:容器內部文件夾 鏡像名:鏡像標簽號
#自己本地制作的鏡像
docker run --rm -it -p 8080:8080 -p 8081:8081 --name object_detector -v model-store文件夾路徑:/home/model-server/model-store pytorch/torchserve:latest-cpu
#從我遠程pull的鏡像
docker run --rm -it -p 8080:8080 -p 8081:8081 --name object_detector -v model-store文件夾路徑:/home/model-server/model-store pytorch/torchserve:v1.0
#記得改成自己的路徑哦
? model-store文件夾路徑:步驟二 - 7里提到的 model-store 文件夾
? 容器內部文件夾路徑 /home/model-server/model-store
這個路徑是固定的,在鏡像build的時候創建好的
so,容器啟動完成就可以了嗎,莫得
還要注冊模型,要不然容器里面啥都沒。我們通過restapi操作。
2.查詢已經注冊的模型
#查詢已經注冊的模型
curl "http://localhost:8081/models"
3.注冊模型并且為模型分配資源
#注冊模型并且為模型分配資源
curl -v -X POST "http://localhost:8081/models?initial_workers=1&synchronous=false&url=demo.mar"
4.查看注冊模型的基本信息
#查看注冊模型的基本信息
curl "http://localhost:8081/models/demo"
5.推理(見證奇跡的時候到了)
curl http://localhost:8080/predictions/demo -T docs/zidane.jpg
6.注銷模型(不用管)
curl -X DELETE http://localhost:8081/models/模型名稱
然后,然后,就恭喜你啦。代碼和其它啥的我都放在GitHub上。上面的每一步都是自己操作一步完后寫下,然后再操作下一步。所以項目是沒問題的。。。。。。
文檔我會繼續更新的,有很多細節好像都沒有提及到。還有一些操作的圖片整理到文章里后可能會更加清晰。 --20221012 init
五、總結
? 沒啥好總結的,一個晚上一個奇跡。有時候看著官方文檔 就很累。。。。多看官方文檔。有啥問題可以給我留言
?
? TorchServe難點在于handle.py怎么寫,yolov5本身就是工程化的項目,所以handle里面寫了許多工程化的處理。其實我這個項目還是不夠完善的。。。
六、issue
1.官方提供的鏡像有坑?
官方可不能為每一種模型都提供對應環境的模型吧,而且每種模型都有不同的依賴。
2.為什么選擇TorchServe部署?而不是選擇TF Serving部署,或者選擇Flask
根本原因是自己太菜了。。。
直接原因Flask框架部署AI模型存在內存泄漏問題,導致另外一個AI項目在生產環境中運行特別不穩定,而且這個Flask框架簡單使用還行,在并發量高一點的場景就垮了。
TF Serving 不知道好不好用,反正我沒用了。我只是一個小菜雞!
3.想到啥問題我再更新,給我留言也可以
原文鏈接:https://blog.csdn.net/weixin_45710229/article/details/127287410
相關推薦
- 2021-12-11 Redis之sql緩存的具體使用_Redis
- 2022-10-24 Android性能優化之ViewPagers?+?Fragment緩存優化_Android
- 2022-08-06 python?sns.countplot()?繪畫條形圖詳情_python
- 2022-10-26 Android?audio音頻流數據異常問題解決分析_Android
- 2022-06-27 ASP.net?core使用Autofac實現泛型依賴注入_實用技巧
- 2022-07-26 讓一個有寬高的盒子垂直水平居中
- 2022-11-09 Python數據庫sqlite3圖文實例詳解_python
- 2022-02-24 Kubernetes究竟是個容器應用程序還是集群操作系統,它這么復雜的原因出在哪?
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支