资讯详情

资讯详情

self-llm 实战:基于 FastAPI 部署 Qwen3-VL-4B-Instruct 多模态大模型(文本/图像/视频问答)

self-llm 实战基于 FastAPI 部署 Qwen3-VL-4B-Instruct 多模态大模型文本/图像/视频问答【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/GitHub_Trending/se/self-llm本文基于《开源大模型食用指南》self-llm仓库中 Qwen3-VL-4B-Instruct FastApi 部署教程完整演示如何在 Linux CUDA 环境下用 FastAPI Uvicorn 将 Qwen3-VL-4B-Instruct 封装为 OpenAI 风格的多模态推理服务。读完本文你将掌握模型下载、服务端代码编写、健康检查与文本/图像问答接口的构建以及进一步扩展到视频内容理解的完整实战方案。一、方案概览与适用场景Qwen3-VL-4B-Instruct 是 Qwen3-VL 系列中面向实际部署的 4B 参数视觉语言模型具备文本理解生成、视觉感知推理以及空间与视频动态理解能力。与仓库中的 vLLM 部署教程 偏重高性能推理框架不同本文采用Transformers FastAPI的原生方案依赖简单、代码透明、便于二次开发适合快速搭建一个支持图像/视频输入的多模态 API 服务。本文涉及的全部代码均可在仓库的 01-Qwen3-VL-4B-Instruct FastApi 参考代码 目录中找到包含api_server_qwen3vl_simple.py、api_server_qwen3vl_video.py、test_simple_api.py、test_video_api.py以及测试用视频test_video.mp4。二、环境准备2.1 基础环境教程基于以下环境编写请确保与本环境基本一致尤其是 PyTorch 的 CUDA 编译版本---------------- ubuntu 22.04 python 3.12 cuda 12.8 pytorch 2.8.0 ----------------本文默认学习者已安装好以上 PyTorch (cuda) 环境如未安装请先自行安装。2.2 显卡配置说明本教程基于RTX 4090显卡部署该显卡拥有 24GB 显存完全满足 Qwen3-VL-4B-Instruct 模型以 bfloat16 精度加载与推理的需求模型实际大小约 9.2GB权重可整体驻留显存。图中展示的是典型的云服务器AutoDL镜像配置PyTorch 2.8.0、Python 3.12Ubuntu 22.04、CUDA 12.8GPU 为 RTX 409024GB× 1CPU 为 16 vCPU内存 90GB。若使用更低显存的显卡可参考下文常见问题中的量化方案。2.3 环境安装首先将 pip 换为清华源加速下载再依次安装依赖包pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip install modelscope1.20.0 pip install fastapi0.115.4 pip install uvicorn0.32.0 pip install transformers4.51.0 pip install accelerate1.1.1 pip install torchvision0.19.0 pip install av13.1.0 pip install qwen-vl-utils各依赖的作用说明依赖版本作用modelscope1.20.0从 ModelScope 模型库下载模型权重fastapi0.115.4Web 框架提供路由与请求/响应校验uvicorn0.32.0ASGI 服务器承载 FastAPI 应用transformers 4.51.0模型加载与推理需支持Qwen3VLForConditionalGenerationaccelerate1.1.1支持device_mapauto自动设备分配torchvision0.19.0与 PyTorch 2.8.0 配套的图像处理基础库av13.1.0PyAV用于视频解码视频问答功能必需qwen-vl-utils最新提供process_vision_info解析消息中的图像/视频为模型输入提示avPyAV是视频帧抽取的关键依赖若只做图像问答可以省略但进阶的视频问答功能必须安装。可参考 vLLM 部署教程 中给出的自检命令python -c import torch; print(torch.version.cuda, torch.cuda.is_available())快速确认 CUDA 环境可用。三、模型下载使用modelscope的snapshot_download函数下载模型。新建model_download.py文件输入以下代码并运行python model_download.py执行下载# model_download.py from modelscope import snapshot_download model_dir snapshot_download(Qwen/Qwen3-VL-4B-Instruct, cache_dir/root/autodl-fs, revisionmaster)参数说明第一个参数Qwen/Qwen3-VL-4B-InstructModelScope 上的模型名称仓库命名空间/模型名cache_dir模型下载保存路径revisionmaster指定分支为 master获取最新权重。注意请记得修改cache_dir为你自己的模型下载路径。建议使用/root/autodl-fs目录这是持久化存储目录重启机器后数据不会丢失。Qwen3-VL-4B-Instruct 模型实际大小约为9.2GB包含所有配置文件和权重文件下载时间根据网络速度而定。下载完成后模型会保存在cache_dir下例如/root/autodl-fs/Qwen/Qwen3-VL-4B-Instruct后续服务端代码中的model_name_or_path即指向该路径。四、API 服务端代码创建 API 服务端文件api_server_qwen3vl_simple.py对应仓库参考代码 api_server_qwen3vl_simple.py该文件包含完整的 FastAPI 服务实现支持文本和图像的多模态问答功能#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import torch from transformers import AutoProcessor, Qwen3VLForConditionalGeneration from qwen_vl_utils import process_vision_info from fastapi import FastAPI import uvicorn from pydantic import BaseModel from typing import List, Dict, Any, Optional # 设置环境变量 os.environ[TOKENIZERS_PARALLELISM] false os.environ[CUDA_VISIBLE_DEVICES] 0 torch.set_num_threads(8) # 创建FastAPI应用 app FastAPI(titleQwen3-VL-4B Simple API, version1.0.0) # 模型路径 model_name_or_path /root/autodl-fs/Qwen/Qwen3-VL-4B-Instruct # 初始化模型和处理器 model Qwen3VLForConditionalGeneration.from_pretrained( model_name_or_path, torch_dtypetorch.bfloat16, device_mapauto, trust_remote_codeTrue ) processor AutoProcessor.from_pretrained( model_name_or_path, trust_remote_codeTrue ) # 请求模型 class ChatRequest(BaseModel): messages: List[Dict[str, Any]] max_tokens: Optional[int] 512 temperature: Optional[float] 0.7 top_p: Optional[float] 0.9 # 响应模型 class ChatResponse(BaseModel): response: str model: str Qwen3-VL-4B-Instruct usage: Dict[str, int] app.get(/) async def root(): return {message: Qwen3-VL-4B-Instruct API Server is running!} app.get(/health) async def health_check(): return { status: healthy, model: Qwen3-VL-4B-Instruct, device: str(model.device), torch_version: torch.__version__, cuda_available: torch.cuda.is_available(), gpu_memory: f{torch.cuda.get_device_properties(0).total_memory / 1024**3:.1f}GB if torch.cuda.is_available() else N/A } app.post(/v1/chat/completions, response_modelChatResponse) async def chat_completions(request: ChatRequest): try: # 处理消息 messages request.messages # 处理视觉信息 text processor.apply_chat_template( messages, tokenizeFalse, add_generation_promptTrue ) image_inputs, video_inputs process_vision_info(messages) # 准备输入 inputs processor( text[text], imagesimage_inputs, videosvideo_inputs, paddingTrue, return_tensorspt, ) inputs inputs.to(model.device) # 生成响应 with torch.no_grad(): generated_ids model.generate( **inputs, max_new_tokensrequest.max_tokens, temperaturerequest.temperature, top_prequest.top_p, do_sampleTrue, pad_token_idprocessor.tokenizer.eos_token_id ) # 解码响应 generated_ids_trimmed [ out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids) ] response_text processor.batch_decode( generated_ids_trimmed, skip_special_tokensTrue, clean_up_tokenization_spacesFalse )[0] # 计算token使用量 input_tokens inputs.input_ids.shape[1] output_tokens len(generated_ids_trimmed[0]) return ChatResponse( responseresponse_text, usage{ prompt_tokens: input_tokens, completion_tokens: output_tokens, total_tokens: input_tokens output_tokens } ) except Exception as e: return ChatResponse( responsefError: {str(e)}, usage{prompt_tokens: 0, completion_tokens: 0, total_tokens: 0} ) if __name__ __main__: uvicorn.run( app, host0.0.0.0, port8000, log_levelinfo )重要提示根据实际情况修改model_name_or_path变量中的模型路径。4.1 代码逐段解析① 环境变量与全局配置os.environ[TOKENIZERS_PARALLELISM] false os.environ[CUDA_VISIBLE_DEVICES] 0 torch.set_num_threads(8)TOKENIZERS_PARALLELISMfalse关闭 tokenizer 的并行警告避免多进程加载时的日志干扰CUDA_VISIBLE_DEVICES0将可见 GPU 限制为 0 号卡多卡机器上可指定具体 GPUtorch.set_num_threads(8)设置 CPU 线程数为 8用于预处理阶段的加速。② 模型与处理器初始化model Qwen3VLForConditionalGeneration.from_pretrained( model_name_or_path, torch_dtypetorch.bfloat16, device_mapauto, trust_remote_codeTrue ) processor AutoProcessor.from_pretrained(model_name_or_path, trust_remote_codeTrue)torch_dtypetorch.bfloat16以 bf16 精度加载权重显著降低显存占用24GB 显存下留出充足 KV Cache 空间device_mapauto由 accelerate 自动把层分配到可用设备单卡场景即全部加载到 GPUtrust_remote_codeTrue允许执行模型仓库中的自定义代码Qwen3-VL 的建模代码依赖此选项AutoProcessor负责将多模态输入统一编码为模型需要的 pixel values / input ids / 位置信息等。③ Pydantic 请求/响应模型class ChatRequest(BaseModel): messages: List[Dict[str, Any]] max_tokens: Optional[int] 512 temperature: Optional[float] 0.7 top_p: Optional[float] 0.9请求体采用与 OpenAI Chat Completions 兼容的messages结构文本消息为字符串图像/视频消息则通过content列表中的{type: image/video, ...}元素传入详见第五节测试脚本。max_tokens默认 512、temperature默认 0.7、top_p默认 0.9均可在请求中按需覆盖。④ 健康检查接口/health返回模型名、model.device、torch 版本、CUDA 可用性以及首卡显存总量单位 GB。该接口不加载额外显存非常适合作为容器健康探针K8s/云平台的存活检查。⑤ 核心推理链路/v1/chat/completions一次多模态请求的完整调用链为processor.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue)将 OpenAI 风格消息列表渲染为模型的对话模板文本含生成提示词process_vision_info(messages)来自qwen_vl_utils从消息中抽取图像与视频的原始输入本地路径或 URL并返回(image_inputs, video_inputs)processor(text..., images..., videos..., paddingTrue, return_tensorspt)统一编码为模型输入张量并移到model.devicemodel.generate(...)在torch.no_grad()下以do_sampleTrue采样生成pad_token_id显式指定为 eos_token_id 以防序列补齐时误生成 pad 符裁剪generated_ids_trimmed通过out_ids[len(in_ids):]去除输入前缀只保留新增生成部分processor.batch_decode(...)解码为可读文本并顺带统计prompt_tokens输入长度与completion_tokens输出长度返回符合主流 LLM API 惯例的usage计费结构。⑥ 服务入口uvicorn.run(app, host0.0.0.0, port8000, log_levelinfo)host0.0.0.0表示监听所有网卡便于局域网或云服务器外部访问AutoDL 需配合开放端口可参考仓库 AutoDL 开放端口指南。五、启动 API 服务在终端中运行以下命令启动 API 服务python api_server_qwen3vl_simple.py启动成功后你将看到类似以下的输出INFO: Started server process [12345] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRLC to quit)六、测试 API 服务创建测试脚本test_simple_api.py对应仓库参考代码 test_simple_api.py用于验证图像问答 API 服务的功能#!/usr/bin/env python3 # -*- coding: utf-8 -*- import requests import json # API服务地址 API_BASE_URL http://localhost:8000 def test_health_check(): 测试健康检查接口 print( 测试健康检查接口 ) try: response requests.get(f{API_BASE_URL}/health) if response.status_code 200: result response.json() print(✅ 健康检查通过) print(f模型: {result.get(model)}) print(f设备: {result.get(device)}) print(fGPU内存: {result.get(gpu_memory)}) return True else: print(f❌ 健康检查失败: {response.status_code}) return False except Exception as e: print(f❌ 健康检查异常: {e}) return False def test_text_chat(): 测试纯文本对话 print(\n 测试纯文本对话 ) messages [ { role: user, content: 你好请介绍一下你自己。 } ] payload { messages: messages, max_tokens: 256, temperature: 0.7 } try: response requests.post( f{API_BASE_URL}/v1/chat/completions, jsonpayload, headers{Content-Type: application/json} ) if response.status_code 200: result response.json() print(✅ 文本对话测试成功) print(f回复: {result[response]}) print(fToken使用: {result[usage]}) return True else: print(f❌ 文本对话测试失败: {response.status_code}) print(f错误信息: {response.text}) return False except Exception as e: print(f❌ 文本对话测试异常: {e}) return False def test_image_chat(): 测试图像对话 print(\n 测试图像对话 ) # 使用在线图片进行测试 image_url https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg try: messages [ { role: user, content: [ { type: image, image: image_url }, { type: text, text: 请描述这张图片的内容。 } ] } ] payload { messages: messages, max_tokens: 512, temperature: 0.7 } response requests.post( f{API_BASE_URL}/v1/chat/completions, jsonpayload, headers{Content-Type: application/json} ) if response.status_code 200: result response.json() print(✅ 图像对话测试成功) print(f回复: {result[response]}) print(fToken使用: {result[usage]}) return True else: print(f❌ 图像对话测试失败: {response.status_code}) print(f错误信息: {response.text}) return False except Exception as e: print(f❌ 图像对话测试异常: {e}) return False def main(): 主测试函数 print(开始测试 Qwen3-VL-4B-Instruct API 服务) print( * 50) # 执行测试 health_ok test_health_check() text_ok test_text_chat() image_ok test_image_chat() # 总结测试结果 print(\n * 50) print(测试结果总结:) print(f健康检查: {✅ 通过 if health_ok else ❌ 失败}) print(f文本对话: {✅ 通过 if text_ok else ❌ 失败}) print(f图像对话: {✅ 通过 if image_ok else ❌ 失败}) if health_ok and text_ok: print(\n API服务运行正常) else: print(\n⚠️ 部分功能存在问题请检查服务状态) if __name__ __main__: main()重要提示该测试脚本使用在线图片链接进行测试无需本地图片文件更加便于使用。测试图片来源为 Qwen 官方示例图片demo.jpeg图片内容为海滩场景、人物互动等可用于直观验证图像理解效果。执行python test_simple_api.py后得到的返回结果如下从运行截图可以看到健康检查通过设备为cuda:0、GPU 内存 23.5GB纯文本对话以 13 个 prompt tokens 完成自我介绍图像对话则输入 2768 个 prompt tokens图像被切分为大量视觉 token模型正确描述了图片中的海滩场景与人物互动。这印证了多模态输入中视觉 token 会显著拉长 prompt 长度——部署时需预留足够显存给 KV Cache。七、常见问题排查Q1: 模型加载失败问题: 出现 CUDA out of memory 错误解决方案:确保 RTX 4090 有足够的显存空间模型 bf16 加载约占用 9GB需再预留推理时的激活值与 KV Cache尝试使用量化配置减少显存占用如 bitsandbytes 4bit/8bit 加载可参考仓库 Qwen Lora 低精度微调 中的量化思路检查是否有其他程序占用显存可用nvidia-smi查看。Q2: 推理速度慢问题: 模型推理响应时间过长解决方案:减少max_tokens参数值输出长度直接影响解码耗时可将其作为请求参数动态调整使用量化模型在显存允许的前提下量化可提升吞吐确保 CUDA 和 PyTorch 版本兼容本文环境为 CUDA 12.8 PyTorch 2.8.0可运行nvidia-smi与python -c import torch; print(torch.version.cuda, torch.cuda.is_available())自检。八、进阶视频问答功能除了基础的图像问答功能Qwen3-VL-4B-Instruct 还支持视频内容理解这得益于仓库 Qwen3-VL 模型结构解析 中介绍的视觉编码能力以及qwen-vl-utilsav提供的视频帧抽取管线。下面创建一个增强版 API 服务来支持视频输入。8.1 创建视频问答服务新建api_server_qwen3vl_video.py对应仓库参考代码 api_server_qwen3vl_video.py#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import torch from transformers import AutoProcessor, Qwen3VLForConditionalGeneration from qwen_vl_utils import process_vision_info from fastapi import FastAPI import uvicorn from pydantic import BaseModel from typing import List, Dict, Any, Optional # 设置环境变量 os.environ[TOKENIZERS_PARALLELISM] false os.environ[CUDA_VISIBLE_DEVICES] 0 torch.set_num_threads(8) # 创建FastAPI应用 app FastAPI(titleQwen3-VL-4B Video API, version1.0.0) # 模型路径 model_name_or_path /root/autodl-fs/Qwen/Qwen3-VL-4B-Instruct # 初始化模型和处理器 model Qwen3VLForConditionalGeneration.from_pretrained( model_name_or_path, torch_dtypetorch.bfloat16, device_mapauto, trust_remote_codeTrue ) processor AutoProcessor.from_pretrained( model_name_or_path, trust_remote_codeTrue ) # 请求模型 class ChatRequest(BaseModel): messages: List[Dict[str, Any]] max_tokens: Optional[int] 512 temperature: Optional[float] 0.7 top_p: Optional[float] 0.9 # 响应模型 class ChatResponse(BaseModel): response: str model: str Qwen3-VL-4B-Instruct usage: Dict[str, int] app.get(/) async def root(): return {message: Qwen3-VL-4B-Instruct Video API Server is running!} app.get(/health) async def health_check(): return { status: healthy, model: Qwen3-VL-4B-Instruct, device: str(model.device), torch_version: torch.__version__, cuda_available: torch.cuda.is_available(), gpu_memory: f{torch.cuda.get_device_properties(0).total_memory / 1024**3:.1f}GB if torch.cuda.is_available() else N/A, supported_formats: [image, video] } app.post(/v1/chat/completions, response_modelChatResponse) async def chat_completions(request: ChatRequest): try: # 处理消息 messages request.messages # 处理视觉信息包括图像和视频 text processor.apply_chat_template( messages, tokenizeFalse, add_generation_promptTrue ) image_inputs, video_inputs process_vision_info(messages) # 准备输入 inputs processor( text[text], imagesimage_inputs, videosvideo_inputs, paddingTrue, return_tensorspt, ) inputs inputs.to(model.device) # 生成响应 with torch.no_grad(): generated_ids model.generate( **inputs, max_new_tokensrequest.max_tokens, temperaturerequest.temperature, top_prequest.top_p, do_sampleTrue, pad_token_idprocessor.tokenizer.eos_token_id ) # 解码响应 generated_ids_trimmed [ out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids) ] response_text processor.batch_decode( generated_ids_trimmed, skip_special_tokensTrue, clean_up_tokenization_spacesFalse )[0] # 计算token使用量 input_tokens inputs.input_ids.shape[1] output_tokens len(generated_ids_trimmed[0]) return ChatResponse( responseresponse_text, usage{ prompt_tokens: input_tokens, completion_tokens: output_tokens, total_tokens: input_tokens output_tokens } ) except Exception as e: return ChatResponse( responsefError: {str(e)}, usage{prompt_tokens: 0, completion_tokens: 0, total_tokens: 0} ) # 兼容原有的 /generate 接口 app.post(/generate) async def generate_response(request: ChatRequest): 兼容原有接口格式 result await chat_completions(request) return {response: result.response} if __name__ __main__: uvicorn.run( app, host0.0.0.0, port8000, log_levelinfo )视频版服务与基础版几乎完全同构关键差异只有两处/health响应新增supported_formats: [image, video]明确声明该服务同时支持图像与视频输入新增/generate兼容接口内部直接复用chat_completions逻辑方便接入早期已经基于该路径调用的下游系统。之所以视频与图像可以共用同一套推理代码是因为qwen_vl_utils.process_vision_info会统一解析图像与视频输入processor内部将视频按fps抽帧后以与图像相同的视觉 token 形式注入文本序列。从仓库的 Qwen3-VL 模型结构解析 可以进一步了解其原理Qwen3-VL 的视觉编码器会把不同分辨率的图像/视频帧网格化grid_thw为统一视觉 token 序列再经由 merger 层融入文本解码器。8.2 启动视频问答服务python api_server_qwen3vl_video.py8.3 创建测试脚本新建test_video_api.py对应仓库参考代码 test_video_api.py其中用到的本地视频文件为仓库内的 test_video.mp4#!/usr/bin/env python3 # -*- coding: utf-8 -*- import requests import json import time # API服务地址 API_BASE_URL http://localhost:8000 def test_health_check(): 测试健康检查接口 print( 健康检查测试 ) try: response requests.get(f{API_BASE_URL}/health) if response.status_code 200: result response.json() print(✅ 健康检查通过) print(f模型: {result.get(model)}) print(f设备: {result.get(device)}) print(fCUDA可用: {result.get(cuda_available)}) print(fGPU内存: {result.get(gpu_memory)}) print(f支持格式: {result.get(supported_formats)}) return True else: print(f❌ 健康检查失败: {response.status_code}) return False except Exception as e: print(f❌ 健康检查异常: {e}) return False def test_video_conversation(): 测试视频对话 print(\n 视频对话测试 ) try: # 使用本地视频文件请确保视频文件存在 video_path ./test_video.mp4 payload { messages: [ { role: user, content: [ { type: video, video: video_path, fps: 1.0, max_pixels: 360 * 420 }, { type: text, text: 请描述这个视频的内容包括主要场景和动作。 } ] } ], max_tokens: 512, temperature: 0.7 } response requests.post( f{API_BASE_URL}/v1/chat/completions, jsonpayload, headers{Content-Type: application/json} ) if response.status_code 200: result response.json() print(✅ 视频对话测试成功) print(f视频文件: {video_path}) print(f回复: {result[response]}) print(fToken使用: {result[usage]}) return True else: print(f❌ 视频对话测试失败: {response.status_code}) print(f错误信息: {response.text}) return False except Exception as e: print(f❌ 视频对话测试异常: {e}) return False def main(): 主测试函数 print(开始测试 Qwen3-VL-4B-Instruct Video API) print( * 50) # 等待服务启动 print(等待API服务启动...) time.sleep(2) # 执行测试 tests [ test_health_check, test_video_conversation ] passed 0 total len(tests) for test_func in tests: if test_func(): passed 1 time.sleep(1) # 测试间隔 print(\n * 50) print(f测试完成: {passed}/{total} 通过) if passed total: print( 所有测试通过) else: print(⚠️ 部分测试失败请检查API服务状态) if __name__ __main__: main()视频消息的content元素中几个关键字段说明字段取值示例作用typevideo声明该消息段为视频video./test_video.mp4视频文件本地路径也支持 URLfps1.0抽帧帧率控制送入模型的帧数量影响 token 数与显存max_pixels360 * 420单帧像素上限控制分辨率以节省显存8.4 运行测试python test_video_api.py从运行截图可见健康检查返回cuda_available: True、GPU 内存 23.5GB、supported_formats: [image, video]视频对话测试输入 324 个 prompt tokens模型正确描述了视频中日落海滩、海鸥动态与人物互动等场景内容。相比图像输入2768 tokens该示例视频因抽帧与像素限制只占用了更少的视觉 token说明通过调整fps与max_pixels可以灵活控制视频输入的成本。九、小结本文完整复现了 Qwen3-VL-4B-Instruct 的 FastAPI 部署全流程从环境搭建、ModelScope 模型下载到编写支持文本/图像/视频的统一/v1/chat/completions多模态推理服务再到健康检查、纯文本对话、图像对话、视频对话四类测试验证。整套代码与仓库 01-Qwen3-VL-4B-Instruct FastApi 参考代码 完全一致可直接复制运行。如需进一步了解模型内部工作原理可阅读仓库中的 Qwen3-VL 模型结构解析DeepStack 多阶段视觉特征注入与 Qwen3-VL vLLM 部署教程高性能推理方案若要在该模型上进行 LoRA 微调可参考 Qwen3-VL LaTexOCR 可视化微调案例。【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/GitHub_Trending/se/self-llm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →