1、docker-compose 升级(现在已经2.*版本,升级使支持gpu)
参考:https://blog.csdn.net/weixin_51311218/article/details/131376823
https://github.com/docker/compose/issues/8142
1)下载:原来1.18;升级到1.29.2版本
添加链接描述
2)下载后文件后更名为docker-compose;然后放到/usr/bin/文件下覆盖,有的是会放到/usr/local/bin/,本机是放在/usr/bin/下
3)然后sudo chmod +x /usr/bin/docker-compose,然后查看 docker-compose version
2、yaml文件编写(字典转yaml)
安装:pip install pyyaml
字典:
data = {"version": "3.8","services": {"my_gpu_service": {"image": "cv-worker:v1","command": "/bin/bash -c 'yolo task=detect mode=train model=/data/yolov8m.pt data=/data/data2.yaml epochs=20 device=1 > /data/yolo1.log 2>&1'","volumes": ["/mnt/data/loong/detection/safety/:/data",],"working_dir": "/data","shm_size": "15g","ports": ["6006:6006",],}}}
字典转yaml:
import yaml# 保存YAML文件
with open("detect1.yaml", "w") as f:yaml.dump(data, f, default_flow_style=False, sort_keys=False)
3、gpu使用
参考:https://docs.docker.com/compose/gpu-support/
注意:yaml内部gpu对应方式
这里注意:yaml里gpu索引不一样,device_ids: [‘1’,‘3’,‘2’]是外部服务器gpu的索引号,yaml内部gpu索引号是按device_ids列表的索引:及内部0 device_ids第一个实际外部的1,内部1 device_ids第一个实际外部的3,内部2 device_ids第一个实际外部的2;所以下列device=0,1 对应的是device_ids的索引即外部1,3号gpu
外部gpu索引查询,pytorch与nvidia-smi索引不一样
pytorch查询gpu索引情况:
import torchnum_gpus = torch.cuda.device_count()
for i in range(num_gpus):print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
yaml代码例子
##运行
docker-compose -f aa.yaml up
aa.yaml
version: '3.8'
services:my_gpu_service:image: cv-worker:v1command: /bin/bash -c 'yolo task=classify mode=train model=/data/yolov8n-cls.pt data=/work/cifar10_copy1epochs=2 device=0,1 > /data/yolo1.log 2>&1'volumes:- //mnt/data/loong/classify/:/data- /mnt/data/yolo/datasets/:/workworking_dir: /datashm_size: 15gports:- 6006:6006# - 9000:9000deploy:resources:reservations:devices:- driver: nvidiadevice_ids: ['1','2','3']capabilities: [gpu]