# InternVL 最佳实践 本篇文档涉及的模型如下: - [internvl-chat-v1_5](https://www.modelscope.cn/models/AI-ModelScope/InternVL-Chat-V1-5/summary) - [internvl-chat-v1_5-int8](https://www.modelscope.cn/models/AI-ModelScope/InternVL-Chat-V1-5-int8/summary) - [mini-internvl-chat-2b-v1_5](https://www.modelscope.cn/models/OpenGVLab/Mini-InternVL-Chat-2B-V1-5) - [mini-internvl-chat-4b-v1_5](https://www.modelscope.cn/models/OpenGVLab/Mini-InternVL-Chat-4B-V1-5) - [internvl2-1b](https://www.modelscope.cn/models/OpenGVLab/InternVL2-1B) - [internvl2-2b](https://www.modelscope.cn/models/OpenGVLab/InternVL2-2B) - [internvl2-4b](https://www.modelscope.cn/models/OpenGVLab/InternVL2-4B) - [internvl2-8b](https://www.modelscope.cn/models/OpenGVLab/InternVL2-8B) - [internvl2-26b](https://www.modelscope.cn/models/OpenGVLab/InternVL2-26B) - [internvl2-40b](https://www.modelscope.cn/models/OpenGVLab/InternVL2-40B) - [internvl2-llama3-76b](https://www.modelscope.cn/models/OpenGVLab/InternVL2-Llama3-76B) 以下实践以`internvl-chat-v1_5`为例,你也可以通过指定`--model_type`切换为其他模型. **FAQ** 1. **模型显示 `The request model does not exist!`** 这种情况通常发生在尝试使用mini-internvl或InternVL2模型, 原因是modelscope上相应模型是申请制。解决这个问题,你需要登录modelscope, 并前往相应的模型页面进行**申请下载**, 申请成功后可以通过以下任意一种方式获取模型: - 使用`snap_download`将模型下载到本地(在模型文件中的模型下载中有相应代码), 然后使用`--model_id_or_path`指定本地模型文件路径 - 在[modelscope账号主页](https://www.modelscope.cn/my/myaccesstoken)获取账号的SDK token, 使用参数`--hub_token`或者环境变量`MODELSCOPE_API_TOKEN`指定 也可以设置环境变量`USE_HF`, 从hugging face处下载模型 2. **多卡运行模型时, 为什么不同卡的分布不均匀, 导致OOM?** transformers的auto device map算法对多模态模型支持不友好, 这可能导致不同 GPU 卡之间的显存分配不均匀。 - 可以通过参数`--device_max_memory`设置每张卡的显存使用, 比如四卡环境, 可以设置`--device_max_memory 15GB 15GB 15GB 15GB` - 或者通过`--device_map_config`显式指定device map 3. **InternVL2模型与前系列(InternVL-V1.5和Mini-InternVL)模型的区别** - InternVL2模型支持多轮多图推理和训练, 即多轮对话带有图片, 且单轮中支持文字图片交错,具体参考[自定义数据集](#自定义数据集)和推理的InternVL2部分。前系列模型支持多轮对话, 但只能有单轮带有图片 - InternVL2模型支持视频输入, 具体格式参考[自定义数据集](#自定义数据集) ## 目录 - [环境准备](#环境准备) - [推理](#推理) - [微调](#微调) - [自定义数据集](#自定义数据集) - [微调后推理](#微调后推理) ## 环境准备 ```shell git clone https://github.com/modelscope/swift.git cd swift pip install -e '.[llm]' pip install Pillow ``` ## 推理 **注意** - 如果要使用本地模型文件,加上参数 `--model_id_or_path /path/to/model` - 如果你的GPU不支持flash attention, 使用参数`--use_flash_attn false`。且对于int8模型,推理时需要指定`dtype --bf16`, 否则可能会出现乱码 - 模型本身config中的max_length较小,为2048,可以设置`--max_length`来修改 - 可以使用参数`--gradient_checkpoting true`减少显存占用 ```shell # Experimental environment: A100 # 55GB GPU memory CUDA_VISIBLE_DEVICES=0 swift infer --model_type internvl-chat-v1_5 --dtype bf16 --max_length 4096 # 2*30GB GPU memory CUDA_VISIBLE_DEVICES=0,1 swift infer --model_type internvl-chat-v1_5 --dtype bf16 --max_length 4096 ``` 输出: (支持传入本地路径或URL) ``` """ <<< 你是谁 Input a media path or URL <<< 我是一个人工智能助手,旨在通过自然语言处理和机器学习技术来帮助用户解决问题和完成任务。 -------------------------------------------------- <<< clear <<< 描述这张图片 Input a media path or URL <<< http://modelscope-open.oss-cn-hangzhou.aliyuncs.com/images/cat.png 这张图片是一只小猫咪的特写照片。这只小猫咪有着蓝灰色的眼睛和白色的毛发,上面有灰色和黑色的条纹。它的耳朵是尖的,眼睛睁得大大的,看起来非常可爱和好奇。背景是模糊的,无法分辨具体的环境,但看起来像是在室内,有柔和的光线。 -------------------------------------------------- <<< clear <<< 图中有几只羊 Input a media path or URL <<< http://modelscope-open.oss-cn-hangzhou.aliyuncs.com/images/animal.png 图中有四只羊。 -------------------------------------------------- <<< clear <<< 计算结果是多少? Input a media path or URL <<< http://modelscope-open.oss-cn-hangzhou.aliyuncs.com/images/math.png 将两个数相加,得到: 1452 + 45304 = 46766 因此,1452 + 45304 = 46766。 -------------------------------------------------- <<< clear <<< 根据图片中的内容写首诗 Input a media path or URL <<< http://modelscope-open.oss-cn-hangzhou.aliyuncs.com/images/poem.png 夜色笼罩水面, 小舟轻摇入画帘。 星辉闪烁如珠串, 月色朦胧似轻烟。 树影婆娑映水面, 静谧宁和心自安。 夜深人静思无限, 唯有舟影伴我眠。 -------------------------------------------------- <<< clear <<< 对图片进行OCR Input a media path or URL <<< https://modelscope-open.oss-cn-hangzhou.aliyuncs.com/images/ocr.png 图中所有文字: 简介 SWIFT支持250+LLM和35+MLLM(多模态大模型)的训练、推 理、评测和部署。开发者可以直接将我们的框架应用到自己的Research和 生产环境中,实现模型训练评测到应用的完整链路。我们除支持 PEFT提供的轻量训练方案外,也提供了一个完整的Adapters库以支持 最新的训练技术,如NEFTune、LoRA+、LLaMA-PRO等,这个适配 器库可以脱离训练脚本直接使用在自已的自定义流程中。 为了方便不熟悉深度学习的用户使用,我们提供了一个Gradio的web-ui 于控制训练和推理,并提供了配套的深度学习课程和最佳实践供新手入 门。 此外,我们也正在拓展其他模态的能力,目前我们支持了AnimateDiff的全 参数训练和LoRA训练。 SWIFT具有丰富的文档体系,如有使用问题请查看这里: 可以在Huggingface space和ModelScope创空间中体验SWIFT web- ui功能了。 """ ``` 对于**InternVL2**系列模型, 支持多轮多图推理, 且单轮中支持图像文本交错, 需要在输入通过``确定图像位置 多轮多图示例 ```shell CUDA_VISIBLE_DEVICES=0 swift infer --model_type internvl2-2b ``` ``` <<< 描述图片 Input an image path or URL <<< http://modelscope-open.oss-cn-hangzhou.aliyuncs.com/images/cat.png 这是一只非常可爱的幼猫。它的毛色主要是白色,脸部和耳朵上有黑色和灰色的条纹。猫的眼睛大而明亮,瞳孔是蓝色的,显得非常清澈和无辜。它的耳朵竖立着,耳朵尖端是浅色的。这只猫看起来非常活泼,眼神中透露出一种好奇和友善的气质。背景模糊,可能是为了突出这只猫本身。整体画面给人一种温馨和可爱的感觉。 -------------------------------------------------- <<< 描述与上一张图片的差距 Input an image path or URL <<< http://modelscope-open.oss-cn-hangzhou.aliyuncs.com/images/animal.png 这张图片与上一张图片相比,有以下几个显著的差距: 1. **动物种类不同**: - 上一张图片中的动物是猫,而这张图片中的动物是羊。 2. **动物外观和特征不同**: - 猫有明显的竖立耳朵和蓝色的眼睛,而羊有竖立的长角和白色的羊毛。 3. **背景和环境不同**: - 上一张图片背景是模糊的,天空中有一些云朵,而这张图片背景是清晰的,背景中有绿色的山丘和蓝天白云。 4. **动物表情和姿态不同**: - 猫的表情显得非常警觉和好奇,而羊的表情显得非常温和和友好。 5. **整体风格和风格不同**: - 上一张图片有一种更加写实和细腻的绘画风格,而这张图片则有一种卡通和简化的风格。 这些差异使得这张图片与上一张图片在视觉上存在显著的差异。 -------------------------------------------------- <<< 两张图片的共同点是什么 两张图片的共同点如下: 1. **动物种类不同**: - 两张图片中的动物都是羊。 2. **背景和环境不同**: - 两张图片中的背景都是自然景观,包括绿色的山丘和蓝天白云。 3. **动物表情和姿态不同**: - 猫和羊的表情和姿态都不同,但都显得非常可爱和友好。 4. **整体风格和风格不同**: - 两张图片在风格上有所不同,但都具有卡通和简化的特点。 这些共同点使得两张图片在视觉上存在显著的差异,但它们都展示了可爱的动物形象。 -------------------------------------------------- <<< clear <<<