LLM&VLM训练、推理、部署、评测常见问题
下面是swift使用过程中遇到的一些常见问题。
训练
Q1: Swift微调支持的模型和数据集有哪些?
详见文档支持的模型和数据集。
Q2: 使用自定义数据集训练时支持的数据格式有哪些?
llm自定义数据集格式见文档自定义与拓展;vlm自定义数据集格式,不同模型对图像数量的支持不同, 具体参考模型对应的最佳实践文档Multi-Modal文档。
Q3: 自定义数据集dataset_info.json格式,如何通过这种方式使用自定义数据集?
dataset_info.json格式见文档自定义与拓展。命令行,--custom_dataset_info xxx.json,--dataset dataset_name。
Q4: 如何在界面训练使用自定义数据集?
界面训练使用自定义数据集与命令行一致,参考文档自定义与拓展。
Q5: 数据集jsonl文件里的一行能不能写成这样?{"index": "00000", "query": "11111", "response": "22222", 'source':'qqq'}
可以有额外字段的,这些字段不会被使用。
Q6: 命令行参数在哪个文档中查看?
详见文档命令行参数。
Q7: 离线环境训练需要配置的参数有哪些?
--model_id_or_path 本地路径,--check_model_is_latest false,详见命令行参数。
Q8: model_type在哪儿查看?
查看文档支持的模型和数据集。
Q9: 模型训练完能直接转gguf格式吗?
目前只支持导出ModelFile,详见文档OLLaMA导出文档。
Q10: swift支持预训练吗,我看只有sft?
支持,命令行swift pt,数据集格式见自定义与拓展。
Q11: 想问一下用lora微调的模型,如果想断点续训的话,是应该先把它合成一整个模型吗,还是可以不合起来,直接通过路径来指定原模型和lora块
不合并,--resume_from_checkpoint output/xxx/vx-xxx/checkpoint-xxx,详见命令行参数。
Q12: 我想控制一下从网上下载下来的原始模型权重的位置,怎么才能做到把原始的模型放在指定的文件夹里呢?
可以配置环境变量MODELSCOPE_CACHE=your_path将原始的模型存到指定路径;如果用sdk下载,通过cache_dir="本地地址";也可以使用modelscope download命令行工具或git下载,详见modelscope文档模型下载。训练时--model_id_or_path配置本地路径即可。如果需要在离线环境训练,配置--check_model_is_latest false,详见命令行参数。
Q13: 有人在用ms-swift遇到过这个问题?
[rank6]: pydantic_core._pydantic_core.ValidationError: 1 validation error for DeepSpeedZeroConfig
[rank6]: stage3_prefetch_bucket_size
[rank6]: Input should be a valid integer, got a number with a fractional part [type=int_from_float,input_value=11560550.4,in put_type=float]
[rank6]: For further information visit https://errors.pydantic.dev/2.8/v/int_fro_float
deepspeed版本降到0.14.*。
Q14: 有微调qwen-2-vl的完整的教程和命令行吗?
Q15: 多模态大模型微调有什么支持的trick吗,类似llm的neftune?
piassa/olora/dora这些lora的变种或者fourierft都可以尝试。参考sft参数里面的各种trick,有一些不一定在多模态上适用。
Q16: 训练过程中eval得到的acc和对应保存的ckpt去重新推理一遍计算得到的acc不是一致的
训练时候的eval_acc和推理时候的acc 计算方式不一样的。acc_strategy: 默认为'token', 可选择的值包括: 'token', 'sentence'.
Q17: 魔搭官方镜像与swift环境
docker run命令启动容器即可,如:docker run --gpus all -p 8000:8000 -it -d --name ms registry.cn-beijing.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py310-torch2.3.0-tf2.16.1-1.16.0 /bin/bash,启动容器后拉最新代码安装swift。
Q18: 多机多卡训练命令行
# 多机多卡
# 如果非共用磁盘请在各机器sh中额外指定`--save_on_each_node true`.
# node0
CUDA_VISIBLE_DEVICES=0,1,2,3 \
NNODES=2 \
NODE_RANK=0 \
MASTER_ADDR=127.0.0.1 \
NPROC_PER_NODE=4 \
swift sft \
--model_id_or_path qwen/Qwen-7B-Chat \
--dataset AI-ModelScope/blossom-math-v2 \
--output_dir output \
# node1
CUDA_VISIBLE_DEVICES=0,1,2,3 \
NNODES=2 \
NODE_RANK=1 \
MASTER_ADDR=xxx.xxx.xxx.xxx \
NPROC_PER_NODE=4 \
swift sft \
--model_id_or_path qwen/Qwen-7B-Chat \
--dataset AI-ModelScope/blossom-math-v2 \
--output_dir output \
详见LLM微调文档
Q19: 如何选择template?
见issue。
Q20: 多卡训练torchrun和swift sft如何使用?
swift sft走的就是torchrun。
Q21: 有个问题,因为我的sft数据集太大了,然后每次tokenize都需要很久,有解决方案吗?
使用lazy_tokenize,详见命令行参数。
Q22: 训练时,如果两个数据集直接追加一起放在训练集中,模型在训练的时候内部会有shuffle的流程吗?还是按顺序取数据去训练?
trainer中会随机。
Q23: 如果模型两张卡,数据不开并行,deepspeed就会出现报错,怎么处理呢?
deepspeed 和 device_map是不兼容的,两个只能选1个。
Q24: 在线训练时已经下载的数据集,离线重新训练为什么还要下载?
数据文件中有url,不支持离线训练。
Q25: vlm模型训练如何减少显存使用?
配置--freeze_vit true。
Q26: 为什么WEB-UI界面上支持的模型比文档中少?
升级一下ms-swift。
Q27: 没有适配model_type的模型,sft时可以自定义special_tokens和chat_template吗?
可以。参考接入模型的PR以及自定义模型数据集文档。
Q28: 可以在python脚本里面用DPO去训练qwen2-vl吗?
可以。从swift.llm中导入rlhf_main 和RLHFArguments。
Q29: 请问训练MLLM时,可否先进行纯文本的预训练,然后接入VQA数据集进行微调呢?
可以。也可以混着训练。
Q30: 基于qwen2的sft模型进行dpo训练,v100的机器,训练时都是Nan呢?
V100机器要用fp32训练qwen2。
Q31: 想问一下,swift,能支持蒸馏吗?
不支持。建议量化,效果比较好。
Q32: cannot import name 'ftp_head' from 'datasets.utils.file_utils' ,有没有遇到这个问题的?
pip install datasets==2.*。
Q33: 当前训练完默认最多保存两个checkpoint,如果想多保存几个应该怎么修改呢?
--save_total_limit,详见命令行参数。
Q34: Grounding任务中通用数据格式支持一个类别有多个实例吗?
目前均支持了一个物体对应多个bbox,参考文档InternVL 最佳实践。
Q35: 这个错误为什么会出现在这,numpy.object找不到在哪?
numpy==1.26.3,尝试一下。
Q36: swift框架能支持序列并行了吗?
支持。现在是引入xtuner来实现。
Q37: 用v100微调qwen2-1.5B时,loss': 0.0, 'acc': 0.0, 'grad_norm': nan,是什么问题呢?
尝试用fp32。
Q38: gptq量化模型,能全参数微调吗?
不能。gptq模型的int型参数无法参与求导,只能附着lora等额外结构参与更新。
Q39: 请问如果想用qlora的方式微调的话应该如何设置参数呢?glm4-chat
配置参数--quantization_bit 4,参考qlora例子。
Q40: 用qwen2-vl-7b训练自己的数据集,总是出现"AdamW' object has no attribute 'train这个问题。
accelerate 0.34.0试试。
Q41: 请教一个问题,我应该如何在swift框架下扩充我的词表呢?
swift目前还不支持词表扩充。
Q42: 同名的模型是可以直接使用huggingface上的吗?
设置环境变量USE_HF=1。
Q43: 请问Qwen2-VL-2B能进行增量预训练吗?有指导文件吗?有图文,也有纯文本的。
支持了,如果继续预训练将所有的内容放在response中就可以了。
Q44: 请问下用视频做训练的时候,如何在参数中控制抽帧率,设了frame_rate设不起, minicpmv
设置环境变量MAX_NUM_FRAMES。
Q45: swift在训练的时候,可以把验证集的推理结果保存下来吗?
训练结束后,运行swift infer,会保存。
Q46: 我全量full参数dpo,为何保存的checkpoint 比原本模型文件要大呢?整整大了1倍
用V100微调,存的是fp32类型。
Q47: 多机训练速度缓慢,在使用swift框架进行LLM训练时,发现采用deepspeed zero3训练会出现严重的速度下降问题
详见issue。
Q48: swift现在是支持qwen2-vl多阶段预训练的吗?我看官方的最佳实践里的sft好像都是vit+llm一起训的,不知道支不支持单独finetune
详见issue。
Q49: qwen2-vl是不是不支持混合纯文本数据?
支持图文和纯文本。
Q50: 微调的时候可以绘制不同数据集的loss曲线吗?
不支持的,数据集是混合训练的。
Q51: 模型训练后,回复重复了很多内容
参考LLM微调文档。如果训练过程中出现重复的情况,请多训练几个epoch, 清洗数据, 全参数训练, 采用RLHF的方式缓解。
Q52: 想问一下swift目前支持prompt tuning或者prefix tuning吗?
不支持,这两个方法知识遗忘比较严重,目前不推荐使用。
Q53: 两张A10训练报错如下:
[rank0]: torch.distributed.DistBackendError: NCCL error in:../torch/csrc/distributed/c10d/ProcessGroupNCCL.cpp:1970, unhandled system error (run with NCCL_DEBUG=INFO for details),NCCL version 2.20.5
[rank0]:ncclSystemError: System call (e.g. socket,malloc) or external library call failed or device error.
请检查共享内存是否太小,nccl需要共享内存。
Q54: 请问在采用DDP微调训练的过程中,冻结某些层时导致的某些参数未参与梯度回传问题怎么解决?
配置参数--ddp_find_unused_parameters true。
Q55: swift有没有数据集质检工具?
Q55: web端在哪启动模型并行?只找到了数据并行的勾选项,没找到模型并行在哪。
指定可见显卡就可以。
Q56: 如何不自动shuffle呢?想把它关掉。
目前只能改transformers代码。
Q57: 'num_items_in_batch'是个什么参数?没找到在哪。
升级ms-swift==2.5.2或者降低transformers<4.46。
推理
Q1:swift推理有文档吗?
swift支持python脚本、命令行、ui界面推理,详见LLM推理文档。
Q2: 训练后的模型如何使用数据集推理?
参数--load_dataset_config true或--val_dataset <your-val-dataset>,见文档LLM微调文档。
Q3: swift推理的时候可以指定下载好的模型吗?
--model_id_or_path配置本地路径即可,详见命令行参数。
Q4: 我想在一个没有label的数据集上推理,怎么做呢?我看文档里面的数据集格式都是训练集
配置参数--val_dataset <your-val-dataset>。
Q5: 遇到报错ValueError: Input length of input_ids is 35, but max_length is set to 20.如何解决?
raise ValueError(
ValueError: Input length of input_ids is 35, but `max_length` is set to 20. This can lead to unexpected behavior. You should consider increasing `max_length` or, better yet, setting `max_new_tokens`.
设置model.generation_config.max_new_tokens。
Q6: qwen2-vl推理爆显存
设置环境变量,SIZE_FACTOR=8 MAX_PIXELS=602112,见文档Qwen2-VL 最佳实践。
Q7: v100显卡,在python虚拟环境中,参考https://github.com/modelscope/ms-swift/blob/main/docs/source/Multi-Modal/qwen2-vl%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.md 完成环境准备,在测试推理命令:CUDA_VISIBLE_DEVICES=0,1,2,3 swift infer --model_type qwen2-vl-7b-instruct 时报错:RuntimeError: probability tensor contains either inf, nan or element < 0
尝试用A10或者3090机器推理。
Q8: 运行下面命令,预测之后的结果在哪里?CUDA_VISIBLE_DEVICES=0 swift infer --ckpt_dir output/glm4v-9b-chat/vx-xxx/checkpoint-xxx-merged --load_dataset_config true
日志中会打印路径。
Q9: 推理的时候,调用inference,怎样能获取到输出logits呢?
参考https://github.com/modelscope/ms-swift/blob/main/tests/custom/test_logprobs.py。
Q10: 最新版本swift,我在加载qwen2-32b-instruct-awq 量化模型及其lora的时候,使用vllm 提示我加上merge lore ture,我加上就报错了,我去掉vllm 加速就能正常推理了,但是速度很慢
qlora训练的模型不支持merge-lora的, 建议lora微调后 merge-lora再量化。
Q11: vllm会报错,assert factor in rope_scaling
pip install git+https://github.com/huggingface/transformers@21fac7abba2a37fae86106f87fcf9974fd1e3830,详见qwen2-vlissue#96。
Q12: vllm作为推理后端的话,模型必须合并以后才能调用吗?
可以不合并,详见文档VLLM推理加速与部署。
Q13: 推理返回prob只能用inference_client函数吗,单样本推理demo下的inference函数,能取出结果吗?
generation_config.output_logits修改一下。model.generation_config.output_logits = True
model.generation_config.return_dict_in_generate = True
Q14: 有人遇到过这个问题吗?RuntimeError: "triu_tril_cuda_template" not implemented for'BFloat16'
升级torch,这个版本的torch没实现这个算子。
Q15: qwen2-audio支持流式推理吗?
支持,详见issue
Q16: inference client推理多模态,do_sample在哪里设置?
设置temperature=0。
Q17: ms-swift支持大模型批处理不?
支持的。python脚本推理时,文档中request_list可以有多个query,部署时服务端会自动batch处理,详见VLLM推理加速与部署。
Q18: ms-swift量化模型的时候,显示内存不足,可以在量化的时候少占用一些资源吗,慢一点没关系。
尝试设置--quant_device_map cpu。
Q19: swift支持对多模态模型量化吗?
支持。
Q20: 使用GPTQ报错如下,请问是啥原因?
if llm_config['architectures'][0] == 'LlamaForCausalLM':
KeyError: 'architectures'
尝试transformers==4.44.*版本。
Q21: swift infer如何将评估的结果保存到指定文件呢 每次都不知道保存到哪里了
设置--result_dir your_path,详见InferArguments。
Q22: AWQ量化yi-vl-6b出错如下:
TypeError: swift.llm.utils.model.get_model_tokenizer_with_flash_attn() got multiple values for keyword argument 'automodel_class'.
请使用gptq量化。
Q23: 想问一下用swift export对qwen2.5 72B模型进行gptq int4量化,max model length=32768用的是默认值,给的校准数据集有128个样本,但是量化的时候报错了,报错日志是:factorization could not be completed because the input is not positive-definite(the leading minor of order 18145 is not pisitive-definite)。是什么原因?
海森矩阵不正定的问题,试试其他的数据集。
部署
Q1: 如何部署训练后的模型?
swift deploy --ckpt_dir xxx,见文档VLLM推理加速与部署。
Q2: 如何使用vllm部署进行多卡部署?
RAY_memory_monitor_refresh_ms=0 CUDA_VISIBLE_DEVICES=0,1,2,3 swift deploy --model_type qwen-7b --tensor_parallel_size 4,见文档VLLM推理加速与部署。
Q3: 请问用vllm部署的时候,客户端怎么传入图片?
详见多模态文档,vLLM推理加速文档。
Q4: 有个问题想问一下,qwen2-7b部署后使用客户端时,调用openai的api要使用client.completions.create,不能使用client.chat.completions.create,但是使用qwen2-7b-instruct-q5_k_m.gguf的时候可以使用client.chat.completions.create,这是为什么呀?
base模型可以用client.chat.completions.create的,不过这个是兼容行为。
Q5: 使用两张卡用swift deploy启动服务端后,用Ctrl+C退出后,会一直有一个python进程,一直占用一张卡的显存,这是正常现象吗?
需要kill 一下, 这是vllm的问题。
Q6: 在哪查看模型是否支持lmdeploy或vllm加速?
请查看文档,支持的模型和数据集。
Q7: 通义千问2.5-数学-7B-Instruct,会偶尔这样一直返回乱码,是什么问题呢?用vllm部署,fp16。
尝试bf16。
Q8: lora 微调后进行了部署,使用swift的推理方式,报错requests.exceptions.HTTPError: Multimodal model only support default-lora
这里model_type设置default-lora
Q9: swift推理服务启动后,交互进行设置的温度之类的配置,如何设置呢?
推理只能启动前设置。部署可以在启动时设置默认,之后在客户端继续设置,覆盖默认。
Q10: 在本地部署qwen2vl模型,推理后端使用vllm,本地视频怎么传入呢?可以使用 base64 传进去吗?curl调用如何加载视频呢?
可以查看mllm部署文档。url、base64、本地路径都可以的, 本地路径只限于本机测试。
Q11: qwen2-vl部署时报错如下,是vllm的版本不对么?
Unrecognized keys in `rope_scaling`for 'rope_type'='default': {'mrope_section'} Unrecognized keys in `rope_scaling`for 'rope_type'='default': {'mrope_section'}
详见issue。
Q12: swift推理可以输出预测概率吗?在部署的时候,怎么设置?
python脚本推理时,model.generation_config.output_logits = True, model.generation_config.return_dict_in_generate = True。
部署时,客户端传参数,logprobs=True, top_logprobs=5。
评测
Q1: swift支持的评测集有哪些?
纯文本评测:
'obqa', 'cmb', 'AX_b', 'siqa', 'nq', 'mbpp', 'winogrande', 'mmlu', 'BoolQ', 'cluewsc', 'ocnli', 'lambada',
'CMRC', 'ceval', 'csl', 'cmnli', 'bbh', 'ReCoRD', 'math', 'humaneval', 'eprstmt', 'WSC', 'storycloze',
'MultiRC', 'RTE', 'chid', 'gsm8k', 'AX_g', 'bustm', 'afqmc', 'piqa', 'lcsts', 'strategyqa', 'Xsum', 'agieval',
'ocnli_fc', 'C3', 'tnews', 'race', 'triviaqa', 'CB', 'WiC', 'hellaswag', 'summedits', 'GaokaoBench',
'ARC_e', 'COPA', 'ARC_c', 'DRCD'
多模态评测:
'COCO_VAL', 'MME', 'HallusionBench', 'POPE', 'MMBench_DEV_EN', 'MMBench_TEST_EN', 'MMBench_DEV_CN', 'MMBench_TEST_CN',
'MMBench', 'MMBench_CN', 'MMBench_DEV_EN_V11', 'MMBench_TEST_EN_V11', 'MMBench_DEV_CN_V11',
'MMBench_TEST_CN_V11', 'MMBench_V11', 'MMBench_CN_V11', 'SEEDBench_IMG', 'SEEDBench2',
'SEEDBench2_Plus', 'ScienceQA_VAL', 'ScienceQA_TEST', 'MMT-Bench_ALL_MI', 'MMT-Bench_ALL',
'MMT-Bench_VAL_MI', 'MMT-Bench_VAL', 'AesBench_VAL', 'AesBench_TEST', 'CCBench', 'AI2D_TEST', 'MMStar',
'RealWorldQA', 'MLLMGuard_DS', 'BLINK', 'OCRVQA_TEST', 'OCRVQA_TESTCORE', 'TextVQA_VAL', 'DocVQA_VAL',
'DocVQA_TEST', 'InfoVQA_VAL', 'InfoVQA_TEST', 'ChartQA_TEST', 'MathVision', 'MathVision_MINI',
'MMMU_DEV_VAL', 'MMMU_TEST', 'OCRBench', 'MathVista_MINI', 'LLaVABench', 'MMVet', 'MTVQA_TEST',
'MMLongBench_DOC', 'VCR_EN_EASY_500', 'VCR_EN_EASY_100', 'VCR_EN_EASY_ALL', 'VCR_EN_HARD_500',
'VCR_EN_HARD_100', 'VCR_EN_HARD_ALL', 'VCR_ZH_EASY_500', 'VCR_ZH_EASY_100', 'VCR_ZH_EASY_ALL',
'VCR_ZH_HARD_500', 'VCR_ZH_HARD_100', 'VCR_ZH_HARD_ALL', 'MMDU', 'MMBench-Video', 'Video-MME',
'MMBench_DEV_EN', 'MMBench_TEST_EN', 'MMBench_DEV_CN', 'MMBench_TEST_CN', 'MMBench', 'MMBench_CN',
'MMBench_DEV_EN_V11', 'MMBench_TEST_EN_V11', 'MMBench_DEV_CN_V11', 'MMBench_TEST_CN_V11', 'MMBench_V11',
'MMBench_CN_V11', 'SEEDBench_IMG', 'SEEDBench2', 'SEEDBench2_Plus', 'ScienceQA_VAL', 'ScienceQA_TEST',
'MMT-Bench_ALL_MI', 'MMT-Bench_ALL', 'MMT-Bench_VAL_MI', 'MMT-Bench_VAL', 'AesBench_VAL',
'AesBench_TEST', 'CCBench', 'AI2D_TEST', 'MMStar', 'RealWorldQA', 'MLLMGuard_DS', 'BLINK'
详见文档LLM评测文档。
Q2: 如何使用自定义评测集?
纯文本、多模态自定义评测集必须和某个官方评测集数据格式(pattern)保持一致,见文档LLM评测文档。
Q3: python3.11环境,评测时mmengine报错
尝试python3.10环境。或先安装全量依赖: pip3 install evalscope[all],再打patch: pip3 install https://modelscope-open.oss-cn-hangzhou.aliyuncs.com/package/evalscope-0.5.3.post1-py3-none-any.whl。
Q4: 官方支持的评测数据集手动下载后,swift eval能配置本地路径评测吗?
先下载评测数据集eval.zip,解压后将里面的内容放到 ~/.cache/modelscope/media_resources/evalscope/data文件夹下;再执行swift eval命令就可以使用本地数据。
Q5: 自定义评测是不是有bug,把标准例子改成英文,一直都跑不通?
swift eval --model_type 'qwen2_5-1_5b-instruct' --eval_dataset no --custom_eval_config '/mnt/workspace/test_data/config_eval.json'
这是依赖了nltk的包,然后nltk的tokenizer需要下载一个punkt_tab的zip文件,国内有些环境下载不太稳定或者直接失败。已尝试改了代码做兜底,规避这个问题;参考issue。
Q6: eval微调后的模型,总是会在固定的百分比停掉,但是vllm服务看着一直是有在正常运行的。模型越大,断开的越早。
TIMEOUT环境变量设置为-1。
Q7: evalscope 支持多模型对比吗?
详见文档。
Q8: 多模态数据集有没有自定义评估?
多模态自定义评估可以参考文档。
Q9: ms-swift有方法测试qps,延迟,tokens/s吗?
可以尝试使用evalscope的模型压测工具。
Q10: 评估的时候可不可以控制数据集条数?评估一个mmlu需要一个多小时,也太慢了。
配置参数--eval_limit,这里的--eval_limit是控制了每个subset的条数,比如mmlu有50多个subset,每个limit10条,那就是500多条。