LLM/MLLM的快速便捷推理方法笔记

本文最后更新于:2025年7月9日 上午

LLM/MLLM的快速便捷推理方法笔记

在做科研的时候经常需要用到LLM或MLLM来处理数据,大量的数据往往会花费太多的时间,同时我又不想花费太多时间在处理报错、环境配置或理解模型架构上,所以这篇笔记提供两种快捷的方式进行快速又便捷的推理方法。

本笔记不涉及低算力下的推理优化,且只关注大模型运行环境为Linux+CUDA的情况。

Ollama

Ollama是一个开源的本地LLM运行应用,支持多个系统,设计十分简洁,对用户来说基本能够一键运行,对大陆用户来说下载模型速度很快、没有墙。Ollama内部提供了对模型的优化(包括量化和Cache优化等)。

目前网络上有很多相关资料,我就介绍我使用的方式。

官方安装指南:https://github.com/ollama/ollama/blob/main/docs/linux.md

官方网址:https://ollama.com/

安装方法

官网给的Linux安装方法是脚本自动安装,这里提供无需sudo权限的手动安装方法:

  1. 系统中安装好CUDA(版本我尝试11.x和12.x都没关系)
  2. 从这个网址下载安装包并解压(随便怎么下载,随便解压到什么地方):https://ollama.com/download/ollama-linux-amd64.tgz
  3. 找到ollama的二进制可执行文件,运行./ollama serve即可运行。这是ollama的服务端,一定要开启之后,才能进行模型下载、发送推理请求的操作。

配置和功能

  • 下载模型:在确保后台ollama serve运行的情况下,打开另一个terminal,输入ollama pull <tag>即可下载,此处的<tag>在ollama官网可以查询,注意这个tag和模型官方给出的模型名会有差异(例如qwen3:8b vs Qwen/Qwen3-8B)。

    由于模型过大,默认下载到系统盘可能吃不消,所以在运行ollama serve可以指定安装位置的环境变量:export OLLAMA_MODELS=/data/ollama_models

  • 多卡均衡:ollama默认只使用一张卡,要使用多卡则需要设置export OLLAMA_SCHED_SPREAD=1,则会默认平均到CUDA_VISIBLE_DEVICES环境变量指定的可见卡上。

  • 并行:为了充分利用显存和IO,可以让ollama并行处理多个请求,同样只需要设置环境变量export OLLAMA_NUM_PARALLEL=4,其中数字为并行量。

  • 多模型提供服务:假如同一台机器上,有的同学想跑模型A,有的同学想跑模型B,在服务器资源充足的情况下,只需开启一个ollama,它会自动加载和卸载模型。

推理方法

ollama支持openai兼容的API,所以用openai的python SDK就可以,并且类似instructor之类的结构化输出的库也没有问题。

下面是一个代码的示例,注意对应端口是11434,API key随便写,model name是ollama对应的tag。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
BASE_URL = "http://localhost:11434/v1"
API_KEY = "empty"
MODEL_NAME = "qwen3:32b"

def generate():
client = openai.OpenAI(
api_key=API_KEY,
base_url=BASE_URL,
)
client = instructor.from_openai(client, mode=instructor.Mode.MD_JSON)
try:
scores, raw_completion = client.chat.completions.create_with_completion(
model=MODEL_NAME,
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": USER_PROMPT},
],
response_model=Scores,
max_retries=1,
)
content = raw_completion.choices[0].message.content
except openai.APIError as e:
print(f"大模型API连接失败,请检查: {e}")
return None

return scores.model_dump()

vLLM

vLLM是一个开源的本地LLM运行库,相较于ollama来说专业性/可定制性更强,更偏向是一个library而非application。vLLM同样通过PagedAttention、FlashAttention、FlashInfer等库提供了充分的优化,且支持各种量化模型。此外,vLLM兼容HuggingFace上的模型,这个范围比ollama大多了。

官网:https://docs.vllm.ai/en/stable/

GitHub:https://github.com/vllm-project/vllm

安装方法官方教程):

  1. 系统驱动支持最新的CUDA。写稿时,最新的CUDA版本是12.x,假如系统无法装12.x的CUDA的话,跑起来会相当麻烦。
  2. 创建conda虚拟环境,使用较新的python版本。官方好像不推荐conda,但是我一直用都没遇到什么问题。vLLM为了实现极致优化,一直跟进最新的pytorch、cuda、python版本,所以什么都用最新的就行。
  3. 安装:pip install vllm --extra-index-url https://download.pytorch.org/whl/cu128。这一步会使用pre-built whells,所以安装不需要编译各种算子,过程会十分顺利。

模型下载:

vLLM不host模型仓库,直接从Hugging Face Hub下载即可。你可以使用huggingface-cli下载:huggingface-cli download HuggingFaceH4/zephyr-7b-beta --cache-dir ./path/to/cache

然而,HF被墙,而且大模型耗流量很多,所以我经常使用国内的ModelScope(魔搭)下载,这个平台基本就是阿里做的HuggingFace的翻版,里面的模型完全兼容,格式一模一样,不过下载源是国内的,十分快。在使用pip安装好pip install modelscope之后,即可下载:modelscope download --model Qwen/Qwen2.5-VL-72B-Instruct-AWQ --local_dir ./dir

在模型命名上,使用的是通用的HF风格的名称,例如Qwen/Qwen2.5-VL-72B-Instruct-AWQ

模型推理:

vLLM有offline模式和online模式,其中online模式和Ollama类似,通过vllm serve加载模型之后使用兼容openai的接口进行推理;但是我一般使用offline模式,通过类似HF的方式在python代码里加载模型然后推理,这样自由度更高。

MLLM经常涉及对多张图像以及视频进行推理,对视觉内容的预处理经常需要根据需求来做,而vLLM的offline模式有足够的自由度,对MLLM各种功能的支持更好。

在处理大批量数据的时候,我经常使用这套思路:

  1. 使用vLLM的offline模式
  2. 使用PyTorch的Dataloader来多线程加载图像/视频,减少IO性能损耗
  3. 处理过程中实时保存预测数据,并能够从中断处恢复
  4. 假如显存充足,进行batch推理
  5. 运行过程中注意加载时vLLM的报告,假如有哪些优化库没装,可以根据提示装上

下面是我使用Qwen2.5-VL进行视频描述的一个实际代码: