描述bug
在训练了两个(mistral)模型(使用model_type
、llm
或ecd
)后,我想通过ludwig visualize --visualization compare_performance --test_statistics dir1/training_statistics.json dir2/training_statistics.json
创建一个compare_performance
可视化,但我得到了以下错误:
Traceback (most recent call last):
File "/workspace/anaconda3/envs/ludwig310/bin/ludwig", line 8, in <module>
sys.exit(main())
File "/workspace/anaconda3/envs/ludwig310/lib/python3.10/site-packages/ludwig/cli.py", line 191, in main
CLI()
File "/workspace/anaconda3/envs/ludwig310/lib/python3.10/site-packages/ludwig/cli.py", line 71, in __init__
getattr(self, args.command)()
File "/workspace/anaconda3/envs/ludwig310/lib/python3.10/site-packages/ludwig/cli.py", line 116, in visualize
visualize.cli(sys.argv[2:])
File "/workspace/anaconda3/envs/ludwig310/lib/python3.10/site-packages/ludwig/visualize.py", line 4174, in cli
vis_func(**vars(args))
File "/workspace/anaconda3/envs/ludwig310/lib/python3.10/site-packages/ludwig/visualize.py", line 355, in compare_performance_cli
compare_performance(test_stats_per_model, **kwargs)
File "/workspace/anaconda3/envs/ludwig310/lib/python3.10/site-packages/ludwig/visualize.py", line 1497, in compare_performance
metric_names.remove(LOSS)
KeyError: 'loss'
重现问题
按照以下方式创建两个training_statistics.json
:
然后上述可视化调用会导致visualize.py
的第1497行出现KeyError,从而导致metric_names.remove(LOSS)
的错误。
有关详细信息,包括导致上述错误的yaml,请参见training_statistics.json
。
预期行为
没有错误,但会生成包含模型比较可视化的pdf文件。
环境信息(请填写以下信息):
- OS:Ubuntu
- 版本:22.04.3 LTS
- Python版本:Python 3.10.13
- Ludwig版本:v0.8.6
附加上下文
环境是一个runpod:
- 1 x RTX A6000 (16 vCPU 58 GB RAM)
- 镜像:runpod/pytorch:2.1.0-py3.10-cuda11.8.0-devel-ubuntu22。
3条答案
按热度按时间mitkmikd1#
self-assign
gg58donl2#
我相信由使用
model_type
训练模型生成的上述training_statistics.json
,对于visualize.py
中的compare_performance()
不是适用的:test_stats_per_model
变为[{'evaluation_frequency': {'frequency': 1, 'period': 'epoch'}, 'test': {'combined': {'loss': [6.1890668869018555]}, 'output': {'accuracy': [0.780337929725647], 'accuracy_micro': [0.9599999785423279], 'loss': [6.1890668869018555], 'roc_auc': [0.8079876899719238]}}, 'training': {'combined': {'loss': [24.924232482910156]}, 'output': {'accuracy': [0.7352941036224365], 'accuracy_micro': [0.9324324131011963], 'loss': [24.924232482910156], 'roc_auc': [0.7261029481887817]}}, 'validation': {}}, {'evaluation_frequency': {'frequency': 1, 'period': 'epoch'}, 'test': {'combined': {'loss': [6.1890668869018555]}, 'output': {'accuracy': [0.780337929725647], 'accuracy_micro': [0.9599999785423279], 'loss': [6.1890668869018555], 'roc_auc': [0.8079876899719238]}}, 'training': {'combined': {'loss': [24.924232482910156]}, 'output': {'accuracy': [0.7352941036224365], 'accuracy_micro': [0.9324324131011963], 'loss': [24.924232482910156], 'roc_auc': [0.7261029481887817]}}, 'validation': {}}]
convert_to_list(test_stats_per_model)
产生相同的结构,因此test_stats_per_model_list == test_stats_per_model
output_feature_names
变为{'training', 'evaluation_frequency', 'test', 'validation'}
metric_names
变为{'output', 'combined'}
metric_names.remove(LOSS)
导致了KeyError: 'loss'
。如果你改为执行metric_names.discard(LOSS)
:metrics_dict
将不会将metric_names
Map到度量值列表,而是Map到包含loss
和可能还有其他键的字典列表:{'output': [{'accuracy': [0.7352941036224365], 'accuracy_micro': [0.9324324131011963], 'loss': [24.924232482910156], 'roc_auc': [0.7261029481887817]}, {'accuracy': [0.7352941036224365], 'accuracy_micro': [0.9324324131011963], 'loss': [24.924232482910156], 'roc_auc': [0.7261029481887817]}], 'combined': [{'loss': [24.924232482910156]}, {'loss': [24.924232482910156]}]}
TypeError: '<' not supported between instances of 'dict' and 'dict'
。在修复第 1497 行和第 1517 行之前,如果有传递给
--test_statistics
参数的文件的 JSON schema,或者visualize.py
的第一个参数test_stats_per_model
的结构定义,将会非常有帮助。csbfibhn3#
正确的。应该传入
test_statistics.json
而不是train_statistics.json。这个文件是由model.eval或model.experiment生成的。这应该能解决键错误问题。