yolo-world踩坑指南
官方源码: https://github.com/AILab-CVC/YOLO-World
1 安装
安装这一块的坑很多,这一块的安装指导非常混乱,很容易把环境搞崩, 建议conda 新建一个环境。
pip install -e . 直接安装的话, 会报各种版本的错。 另外还有一些依赖未包含, 运行时会报错。
索性手动安装了所需要的依赖包。
最终安装的可以使用的版本:
torch 1.13.1+cu117
torchvision 0.14.1+cu117
transformers 4.40.0
openmim 0.3.9
openmim 0.3.9
mmcv-lite 2.2.0
mmdet 3.0.0
mmengine 0.10.3
mmcv 2.1.0
mmcv-lite 2.2.0
mmyolo 0.6.0
lvis 0.5.3
注意。 上面安装的mmcv的版本不满足要求,会报错, 具体报错如下:
File "/data/joyiot/leo/codes/YOLO-World/yolo_world/__init__.py", line 10, in <module>
from .models import * # noqa
File "/data/joyiot/leo/codes/YOLO-World/yolo_world/models/__init__.py", line 2, in <module>
from .backbones import * # noqa
File "/data/joyiot/leo/codes/YOLO-World/yolo_world/models/backbones/__init__.py", line 5, in <module>
from .mm_backbone import (
File "/data/joyiot/leo/codes/YOLO-World/yolo_world/models/backbones/mm_backbone.py", line 8, in <module>
from mmyolo.registry import MODELS
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/mmyolo/__init__.py", line 22, in <module>
assert (mmcv_version >= digit_version(mmcv_minimum_version)
AssertionError: MMCV==2.2.0 is used but incompatible. Please install mmcv>=2.0.0rc4, <2.1.0.
是因为版本不满足要求, 目标版本装了好久没装上, 最后的解决办法简单粗暴, 直接吧报错的版本检查部分删除, 实测没什么问题。
手动安装好依赖后, 把pyproject.toml文件中的依赖部分都删除, 然后再运行pip install -e .
如果不执行pip install -e . 的话, yolo-world就不是一个python包,代码中的很多路径需要修改, 比较麻烦。
2 运行
运行image_demo.py
config 文件用 configs/pretrain/yolo_world_v2_x_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py
checkpoint 用checkpoints/yolo_world_v2_x_obj365v1_goldg_cc3mlite_pretrain_1280ft-14996a36.pth
这一点比较坑, demo中没有给出示例, 也没有给出下载地址。我是通过issue中其他人的指导找到的。checkpoint 可以在https://huggingface.co/wondervictor/YOLO-World/tree/main 下载。
另外, clip 模型名字是openai/clip-vit-base-patch32,代码中给的有误。
对应代码是:
text_model_name = 'openai/clip-vit-base-patch32'
这会在huggingface上下载对应模型权重, 如果无法访问, 可以修改为国内源。
export HF_ENDPOINT=https://hf-mirror.com
还有lvis_v1_minival_inserted_image_name.json 这个文件依赖, 在YOLO-World/data/texts目录下。
最后就是configs/pretrain/yolo_world_v2_x_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py 中的一些文件地址, 需要根据实际情况修改。
最后终于成功运行:
(leo_py38) pinefield@edge-gpu-01:/data/joyiot/leo/codes/YOLO-World/demo$ python3 image_demo.py --image ./sample_images/bus.jpg --config ../configs/pretrain/yolo_world_v2_x_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py --checkpoint ../checkpoints/yolo_world_v2_x_obj365v1_goldg_cc3mlite_pretrain_1280ft-14996a36.pth
SupervisionWarnings: BoundingBoxAnnotator is deprecated: `BoundingBoxAnnotator` is deprecated and has been renamed to `BoxAnnotator`. `BoundingBoxAnnotator` will be removed in supervision-0.26.0.
Loads checkpoint by local backend from path: ../checkpoints/yolo_world_v2_x_obj365v1_goldg_cc3mlite_pretrain_1280ft-14996a36.pth
[ ] 0/1, elapsed: 0s, ETA:UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ../aten/src/ATen/native/TensorShape.cpp:3190.)
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 1/1, 1.8 task/s, elapsed: 1s, ETA: 0s

3 FAQ
albumentations==1.3.1, 最新的版本1.4.8会报错 ValueError: Key img_path is not in available keys
该项目在hugging face和github上都有仓库。 2个仓库有较大差异, hugging face 上的版本较旧。 但是hugging face 上的版本是在线演示版本, 并且包含了相应的config文件和预训练权重。
finetune coco报错:
huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...
To disable this warning, you can either:
- Avoid using `tokenizers` before the fork if possible
- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)
解决:
export TOKENIZERS_PARALLELISM="false"
WARNING:torch.distributed.elastic.agent.server.api:Received 1 death signal, shutting down workers
WARNING:torch.distributed.elastic.multiprocessing.api:Sending process 3971878 closing signal SIGHUP
WARNING:torch.distributed.elastic.multiprocessing.api:Sending process 3971879 closing signal SIGHUP
Traceback (most recent call last):
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launch.py", line 195, in <module>
main()
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launch.py", line 191, in main
launch(args)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launch.py", line 176, in launch
run(args)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/run.py", line 753, in run
elastic_launch(
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launcher/api.py", line 132, in __call__
return launch_agent(self._config, self._entrypoint, list(args))
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launcher/api.py", line 237, in launch_agent
result = agent.run()
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/elastic/metrics/api.py", line 129, in wrapper
result = f(*args, **kwargs)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/elastic/agent/server/api.py", line 709, in run
result = self._invoke_run(role)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/elastic/agent/server/api.py", line 850, in _invoke_run
time.sleep(monitor_interval)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/elastic/multiprocessing/api.py", line 62, in _terminate_process_handler
raise SignalException(f"Process {os.getpid()} got signal: {sigval}", sigval=sigval)
torch.distributed.elastic.multiprocessing.api.SignalException: Process 3971841 got signal: 1
上面的报错应该是torch.distribute 与nohup的适配问题:
ref:
https://blog.csdn.net/qq_42363032/article/details/138667294
https://discuss.pytorch.org/t/ddp-error-torch-distributed-elastic-agent-server-api-received-1-death-signal-shutting-down-workers/135720/7
https://github.com/pytorch/pytorch/issues/76894
WARNING:torch.distributed.elastic.multiprocessing.api:Sending process 114362 closing signal SIGTERM
ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: -9) local_rank: 0 (pid: 114361) of binary: /home/pinefield/anaconda3/envs/leo_py38/bin/python
Traceback (most recent call last):
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launch.py", line 195, in <module>
main()
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launch.py", line 191, in main
launch(args)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launch.py", line 176, in launch
run(args)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/run.py", line 753, in run
elastic_launch(
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launcher/api.py", line 132, in __call__
return launch_agent(self._config, self._entrypoint, list(args))
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launcher/api.py", line 246, in launch_agent
raise ChildFailedError(
torch.distributed.elastic.multiprocessing.errors.ChildFailedError:
评估时报错:
06/04 23:40:18 - mmengine - INFO - Epoch(val) [5][2450/2500] eta: 0:00:02 time: 0.0454 data_time: 0.0004 memory: 1253
06/04 23:40:21 - mmengine - INFO - Epoch(val) [5][2500/2500] eta: 0:00:00 time: 0.0431 data_time: 0.0004 memory: 1253
06/04 23:40:43 - mmengine - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=7.15s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
[E ProcessGroupNCCL.cpp:821] [Rank 1] Watchdog caught collective operation timeout: WorkNCCL(SeqNum=5804193, OpType=BROADCAST, Timeout(ms)=1800000) ran for 1804694 milliseconds before timing out.
[E ProcessGroupNCCL.cpp:456] Some NCCL operations have failed or timed out. Due to the asynchronous nature of CUDA kernels, subsequent GPU operations might run on corrupted/incomplete data.
[E ProcessGroupNCCL.cpp:461] To avoid data inconsistency, we are taking the entire process down.
terminate called after throwing an instance of 'std::runtime_error'
what(): [Rank 1] Watchdog caught collective operation timeout: WorkNCCL(SeqNum=5804193, OpType=BROADCAST, Timeout(ms)=1800000) ran for 1804694 milliseconds before timing out.
DONE (t=25936.18s).
Accumulating evaluation results...
WARNING:torch.distributed.elastic.multiprocessing.api:Sending process 3112254 closing signal SIGTERM
ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: -6) local_rank: 1 (pid: 3112255) of binary: /home/pinefield/anaconda3/envs/leo_py38/bin/python
Traceback (most recent call last):
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
06/05 12:19:01 - mmengine - INFO - Epoch(val) [1][2500/2500] eta: 0:00:00 time: 0.0412 data_time: 0.0004 memory: 1255
06/05 12:19:26 - mmengine - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=6.29s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
[E ProcessGroupNCCL.cpp:821] [Rank 1] Watchdog caught collective operation timeout: WorkNCCL(SeqNum=1161389, OpType=BROADCAST, Timeout(ms)=1800000) ran for 1801239 milliseconds before timing out.
Traceback (most recent call last):
File "./train.py", line 120, in <module>
main()
File "./train.py", line 116, in main
runner.train()
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/mmengine/runner/runner.py", line 1777, in train
model = self.train_loop.run() # type: ignore
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/mmengine/runner/loops.py", line 102, in run
self.runner.val_loop.run()
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/mmengine/runner/loops.py", line 374, in run
metrics = self.evaluator.evaluate(len(self.dataloader.dataset))
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/mmengine/evaluator/evaluator.py", line 79, in evaluate
_results = metric.evaluate(size)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/mmengine/evaluator/metric.py", line 144, in evaluate
broadcast_object_list(metrics)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/mmengine/dist/dist.py", line 523, in broadcast_object_list
torch_dist.broadcast_object_list(data, src, group)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/distributed_c10d.py", line 2090, in broadcast_object_list
object_tensor = torch.empty( # type: ignore[call-overload]
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate more than 1EB memory.
[E ProcessGroupNCCL.cpp:456] Some NCCL operations have failed or timed out. Due to the asynchronous nature of CUDA kernels, subsequent GPU operations might run on corrupted/incomplete data.
[E ProcessGroupNCCL.cpp:461] To avoid data inconsistency, we are taking the entire process down.
terminate called after throwing an instance of 'std::runtime_error'
what(): [Rank 1] Watchdog caught collective operation timeout: WorkNCCL(SeqNum=1161389, OpType=BROADCAST, Timeout(ms)=1800000) ran for 1801239 milliseconds before timing out.
WARNING:torch.distributed.elastic.multiprocessing.api:Sending process 3448026 closing signal SIGTERM
ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: -9) local_rank: 0 (pid: 3448025) of binary: /home/pinefield/anaconda3/envs/leo_py38/bin/python
Traceback (most recent call last):
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launch.py", line 195, in <module>
main()
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launch.py", line 191, in main
launch(args)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launch.py", line 176, in launch
run(args)
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/run.py", line 753, in run
elastic_launch(
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launcher/api.py", line 132, in __call__
return launch_agent(self._config, self._entrypoint, list(args))
File "/home/pinefield/anaconda3/envs/leo_py38/lib/python3.8/site-packages/torch/distributed/launcher/api.py", line 246, in launch_agent
raise ChildFailedError(
torch.distributed.elastic.multiprocessing.errors.ChildFailedError:
更多推荐


所有评论(0)