前言

近日,基于DeepSeek-R1-Distill-Qwen-7B模型进行微调训练后,需要将其进行部署,以执行推理任务。

DeepSeek-R1-Distill-Qwen-7B是一个基于Qwen架构的蒸馏模型,参数量为70亿,适用于多种自然语言处理任务,如文本生成、问答系统等。然而,大模型的推理通常面临内存占用高、计算效率低的问题。

vLLM作为一个高效的大模型推理框架,通过其创新的PagedAttention机制,能够显著提升推理性能,是部署此类大模型的理想选择。

vLLM

概述

vLLM是一个高效、灵活且易于使用的大语言模型(LLM)推理和服务框架,专注于优化大规模语言模型的推理性能。

vLLM是一个专注于大语言模型推理的高性能框架,通过创新的PagedAttention 机制和深度优化,显著提升了推理效率和内存利用率。无论是工业级应用还是学术研究,vLLM 都提供了一个强大且灵活的工具,帮助用户更高效地部署和运行大语言模型。

核心特点

1.高效的内存管理:

通过PagedAttention机制,vLLM将注意力计算中的键值对(KV Cache)分页存储,类似于操作系统的虚拟内存管理。这种方式大大减少了内存碎片,提高了内存利用率。

支持动态批处理(Dynamic Batching),能够更高效地利用 GPU 资源。

2.高性能推理:

vLLM 针对大语言模型的推理进行了深度优化,支持高吞吐量和低延迟的推理任务。

在相同硬件条件下,vLLM 的推理速度通常比传统框架(如 Hugging Face Transformers)快数倍。

3.易用性:

提供简洁的 API,支持快速部署和集成。

兼容 Hugging Face 模型库,用户可以轻松加载和运行预训练的大语言模型(如 LLaMA、GPT 等)。

4.可扩展性:

支持多 GPU 推理,能够处理超大规模的模型。

适用于多种应用场景,如聊天机器人、文本生成、代码补全等。

5.开源:

vLLM 是一个开源项目,代码托管在 GitHub 上,社区活跃,持续更新。

环境准备

在开始之前,需要准备好运行环境。以下是本次运行的软硬件配置:

硬件详情

GPU:32GB显存(以FP16加载模型大约14G + 额外显存)      内存:100GB      存储:1024GB   

软件详情

操作系统:Linux(如:Ubuntu 22.04)   Python:3.10   CUDA:12.4   PyTorch:2.5.1   vLLM:最新版本(0.7.2)   

安装vLLM

首先,需要安装vLLM框架及其依赖。

1:创建虚拟环境

conda create -n vllm python=3.10      conda activate vllm   

2:安装 PyTorch

查看当前服务器GPU的CUDA版本信息:

# nvidia-smi   Thu Feb 13 02:23:14 2025          +-----------------------------------------------------------------------------------------+   | NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.4     |   |-----------------------------------------+------------------------+----------------------+   | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |   | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |   |                                         |                        |               MIG M. |   

这里CUDA版本:12.4,访问PyTorch官网下载CUDA版本安装对应的PyTorch,这里选择下载PyTorch最新版本2.5.1

conda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia   
pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu124   

验证安装:如果输出版本号,说明安装成功。

# python -c "import torch;print(torch.__version__)"   2.5.1+cu124   

注意:根据你的CUDA版本安装对应的PyTorch

3:安装vLLM

pip install vllm   

验证安装:如果输出版本号,说明安装成功。

# python -c "import vllm; print(vllm.__version__)"   0.7.2   

注意:经测试,最新版vllm的安装会自动适配合适的PyTorch自动安装

下载模型

Hugging Face

vLLM支持直接从Hugging Face加载模型,可以使用以下代码下载并加载模型。

1.安装Hugging Face Transformers(安装vllm时会默认会自动安装)

pip install transformers   

2.下载模型

from transformers import AutoModelForCausalLM, AutoTokenizer      # 指定下载路径   cache_dir = "/root/models"      # 加载模型和分词器,并指定缓存路径      model_name = "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B"   model = AutoModelForCausalLM.from_pretrained(model_name, cache_dir=cache_dir)   tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir=cache_dir)   

Models Sope

如果使用Hugging Face下载模型存在网络问题,可以使用modelscope,使用以下代码下载并加载模型。

1.安装modelscope

pip install modelscope   

2.下载模型

from modelscope import snapshot_download      model_dir = snapshot_download('deepseek-ai/DeepSeek-R1-Distill-Qwen-7B', cache_dir='/root/models', revision='master')   

使用vLLM进行模型推理

当把模型下载到本地后,就可以使用vLLM进行模型推理任务了。

模型推理的实现大概可分为以下几个过程:

 1.加载预训练的语言模型 (DeepSeek-R1-Distill-Qwen-7B)  
  
 2.定义一个输入提示语,并设置生成文本的参数 (温度、top_p、最大 token 数、停止 token)3.使用加载的模型生成文本,解析生成的文本  
  
 4.提取思考内容和回答内容 (如果存在 </think> 标签),打印原始输入提示语、思考内容和回答内容。

具体实现代码如下:

from vllm import LLM, SamplingParams  # 导入 vllm 库,用于加载和运行大型语言模型   from transformers import AutoTokenizer  # 导入 transformers 库,用于加载 tokenizer      if __name__ == "__main__":       model = '/root/work/models/DeepSeek-R1-Distill-Qwen-7B'  # 指定模型名称或指定模型路径这里指定的是模型路径       tokenizer = None #  初始化 tokenizer 为 None          text = ["先有鸡还是先有蛋?<think>\n", ]  # 定义输入文本列表这里只有一个提示语       # 批量推理    input_texts = [        "深度学习的优势是什么?",        "如何训练一个神经网络?",    ]          llm = LLM(model=model, tokenizer=tokenizer, max_model_len=2048, dtype="half", gpu_memory_utilization=0.7, trust_remote_code=True)       # 创建 LLM 对象       # model: 模型路径或名称       # tokenizer: tokenizer 对象,如果为 None,vllm 会尝试自动加载       # max_model_len: 模型上下文长度的最大值       # dtype: 模型权重和激活的数据类型 "half" 表示使用 FP16 精度,可以减少内存占用,加快推理速度       # gpu_memory_utilization: vllm 引擎使用的 GPU 内存比例0.7 表示使用 70% 的 GPU 内存       # trust_remote_code: 是否信任远程代码对于某些模型,需要设置为 True          sampling_params = SamplingParams(temperature=0.6, top_p=0.95, max_tokens=8192)       # 创建 SamplingParams 对象,用于设置生成文本的参数       # temperature: 控制生成文本的随机性值越高,随机性越高       # top_p:  nucleus sampling 的参数,用于控制生成文本的多样性       # max_tokens: 生成文本的最大 token 数量          outputs = llm.generate(text, sampling_params)  # 使用 LLM 对象生成文本          #print(outputs)  # 打印原始输出结果          for output in outputs:  # 遍历每个输出           prompt = output.prompt  # 获取原始输入提示语           generated_text = output.outputs[0].text  # 获取生成的文本              if r"</think>" in generated_text:  # 检查生成的文本中是否包含 "</think>" 标签               think_content, answer_content = generated_text.split(r"</think>")  # 如果包含,则分割文本为思考内容和回答内容           else:               think_content = ""  # 否则,思考内容为空               answer_content = generated_text  # 回答内容为生成的全部文本                       # 打印原始输入提示语的原始字符串表示形式        # !r用于打印字符串的原始表示形式,对于调试和查看特殊字符很有帮助        print(f"Prompt: {prompt!r}")           print(f"Think: {think_content!r}")            print(f"Answer: {answer_content!r}")   

推理结果如下:

在这里插入图片描述

在这里插入图片描述

注意:建议每个prompt都需要以<think>\n结尾

启动API服务

只需要简单的命令以及相关参数即可加载DeepSeek-R1-Distill-Qwen-7B模型,并启动类似OpenAI的API服务:

python -m vllm.entrypoints.openai.api_server    --model /models/DeepSeek-R1-Distill-Qwen-7B     --served-model-name DeepSeekR1    --host 0.0.0.0     --port 8000   --dtype float16   --gpu_memory_utilization 0.7   

参数说明

--model DeepSeek-R1-Distill-Qwen-7B  :指定要加载的模型      --served-model-name DeepSeekR1 :指定模型名称      --host 0.0.0.0 :指定服务绑定的 IP 地址(默认 0.0.0.0 表示监听所有网络接口)      --port 8000 :指定服务端口(默认 8000--gpu_memory_utilization 0.7 :设置GPU内存利用率,根据环境调整,重要!!!      --dtype float16 :数据类型(有的显卡等级不支持某数据类型会报错,如bfloat16。根据提示指定数据类型即可,如:half)   

其他常见可选参数

--enforce-eager true:禁用CUDA优化提升兼容性      --api-key xxx :API访问密钥      --max-model-len 2048  :指定模型的最大上下文长度      --tensor-parallel-size 8:指定多 GPU 并行推理的 GPU 数量   

使用API进行推理

API接口

启动服务后,可以通过HTTP请求调用API,以下是VLLM提供的API接口,前提是启动模型能支持相关功能!

INFO 02-18 01:54:55 launcher.py:29] Route: /openapi.json, Methods: GET, HEAD   INFO 02-18 01:54:55 launcher.py:29] Route: /docs, Methods: GET, HEAD   INFO 02-18 01:54:55 launcher.py:29] Route: /docs/oauth2-redirect, Methods: GET, HEAD   INFO 02-18 01:54:55 launcher.py:29] Route: /redoc, Methods: GET, HEAD   INFO 02-18 01:54:55 launcher.py:29] Route: /health, Methods: GET   INFO 02-18 01:54:55 launcher.py:29] Route: /ping, Methods: POST, GET   INFO 02-18 01:54:55 launcher.py:29] Route: /tokenize, Methods: POST   INFO 02-18 01:54:55 launcher.py:29] Route: /detokenize, Methods: POST   INFO 02-18 01:54:55 launcher.py:29] Route: /v1/models, Methods: GET   INFO 02-18 01:54:55 launcher.py:29] Route: /version, Methods: GET   INFO 02-18 01:54:55 launcher.py:29] Route: /v1/chat/completions, Methods: POST   INFO 02-18 01:54:55 launcher.py:29] Route: /v1/completions, Methods: POST   INFO 02-18 01:54:55 launcher.py:29] Route: /v1/embeddings, Methods: POST   INFO 02-18 01:54:55 launcher.py:29] Route: /pooling, Methods: POST   INFO 02-18 01:54:55 launcher.py:29] Route: /score, Methods: POST   INFO 02-18 01:54:55 launcher.py:29] Route: /v1/score, Methods: POST   INFO 02-18 01:54:55 launcher.py:29] Route: /rerank, Methods: POST   INFO 02-18 01:54:55 launcher.py:29] Route: /v1/rerank, Methods: POST   INFO 02-18 01:54:55 launcher.py:29] Route: /v2/rerank, Methods: POST   INFO 02-18 01:54:55 launcher.py:29] Route: /invocations, Methods: POST   

模型列表

通过curl命令查看当前的模型列表,返回一个JSON格式的响应,包含可用的模型列表。

curl http://localhost:8000/v1/models   

文本生成(/v1/completions)

用于生成单条文本

curl -X POST "http://localhost:8000/v1/completions" \       -H "Content-Type: application/json" \       -d '{           "model": "DeepSeekR1",           "prompt": "什么是深度学习?",           "max_tokens": 200,           "temperature": 0.7       }'   

聊天生成(/v1/chat/completions)

用于生成对话式文本

curl -X POST "http://localhost:8000/v1/chat/completions" \       -H "Content-Type: application/json" \       -d '{           "model": "DeepSeekR1",           "messages": [               {"role": "system", "content": "你是一个助手。"},               {"role": "user", "content": "什么是深度学习?"}           ],           "max_tokens": 200,           "temperature": 0.7       }'   

Python脚本请求接口

vLLM可以作为一个实现了OpenAI API协议的服务器进行部署。这使得vLLM可以直接替代使用OpenAI API的应用程序。

OpenAI Completions API

from openai import OpenAI   client = OpenAI(       base_url="http://localhost:8000/v1",       api_key="Bearer xxxx",   )      completion = client.completions.create(       model="DeepSeekR1",       prompt="什么是深度学习?"       )      print(completion)   

OpenAI Chat API

from openai import OpenAI   client = OpenAI(       base_url="http://localhost:8000/v1",       api_key="Bearer xxxx",   )      completion = client.chat.completions.create(     model="DeepSeekR1",     messages=[       {"role": "user", "content": "什么是深度学习?"}     ]   )      print(completion)   

vllm serve命令大全

该命令用于启动与OpenAI兼容的服务器,命令的具体使用说明如下:

``# vllm serve -h   INFO 02-13 03:22:49 __init__.py:190] 自动检测到平台 cuda。   用法: vllm serve <model_tag> [选项]      位置参数:     model_tag             要服务的模型标签      选项:     --additional-config ADDITIONAL_CONFIG                           指定平台其他配置,JSON 格式。不同平台可能支持不同的配置。请确保配置对您使用的平台有效。输入格式如 {"config_key":"config_value"}     --allow-credentials   允许凭据。     --allowed-headers ALLOWED_HEADERS                           允许的标头。     --allowed-local-media-path ALLOWED_LOCAL_MEDIA_PATH                           允许 API 请求从服务器文件系统指定的目录读取本地图像或视频。这是一个安全风险。只应在受信任的环境中启用。     --allowed-methods ALLOWED_METHODS                           允许的方法。     --allowed-origins ALLOWED_ORIGINS                           允许的来源。     --api-key API_KEY       如果提供,服务器将要求在标头中提供此密钥。     --block-size {8,16,32,64,128}                           令牌块大小,用于连续的令牌块。这在 neuron 设备上会被忽略,并设置为 `--max-model-len`。在 CUDA 设备上,仅支持最大为 32 的块大小。在 HPU 设备上,块大小默认为 128--calculate-kv-scales                           启用 kv-cache-dtype 为 fp8 时动态计算 k_scale 和 v_scale。如果 calculate-kv-scales 为 false,则 scale 将从模型检查点加载(如果可用)。否则,scale 将默认为 1.0--chat-template CHAT_TEMPLATE                           聊天模板的文件路径,或指定模型的单行模板。     --chat-template-content-format {auto,string,openai}                           在聊天模板中呈现消息内容的格式。                           * "string" 将内容呈现为字符串。例如:"Hello World"                           * "openai" 将内容呈现为字典列表,类似于 OpenAI 模式。例如:[{"type": "text", "text": "Hello world!"}]     --code-revision CODE_REVISION                           用于 Hugging Face Hub 上的模型代码的特定修订版本。它可以是分支名称、标签名称或提交 ID。如果未指定,将使用默认版本。     --collect-detailed-traces COLLECT_DETAILED_TRACES                           有效选项为 model,worker,all。仅当设置 `--otlp-traces-endpoint`时,设置此项才有意义。如果设置,它将收集指定模块的详细跟踪。这涉及使用可能代价高昂和/或阻塞的操作,因此可能会影响性能。     --compilation-config COMPILATION_CONFIG, -O COMPILATION_CONFIG                           torch.compile 的模型配置。当它是一个数字 (0, 1, 2, 3) 时,它将被解释为优化级别。注意:0 级是没有任何优化的默认级别。1 级和 2 级仅用于内部测试。3 级是建议用于生产的级别。要指定完整的编译配置,请使用 JSON 字符串。按照传统编译器的惯例,使用 -O 而不加空格也受支持。-O3 等同于 -O 3--config CONFIG         从配置文件读取 CLI 选项。必须是 YAML 格式,包含以下选项:https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html#cli-reference     --config-format {auto,hf,mistral}                           要加载的模型配置的格式。                           * "auto" 将尝试以 hf 格式加载配置(如果可用),否则将尝试以 mistral 格式加载。     --cpu-offload-gb CPU_OFFLOAD_GB                           每个 GPU 要卸载到 CPU 的空间(GiB)。默认为 0,表示不卸载。直观地,此参数可以看作是增加 GPU 内存大小的一种虚拟方式。例如,如果您有一个 24 GB 的 GPU,并将其设置为 10,那么实际上您可以将其视为一个 34 GB 的 GPU。然后,您可以使用 BF16 权重加载一个 13B 模型,这至少需要 26GB 的 GPU 内存。请注意,这需要快速的 CPU-GPU 互连,因为模型的一部分在每次模型前向传递中都会从 CPU 内存即时加载到 GPU 内存。     --device {auto,cuda,neuron,cpu,openvino,tpu,xpu,hpu}                           vLLM 执行的设备类型。     --disable-async-output-proc                           禁用异步输出处理。这可能会导致性能下降。     --disable-custom-all-reduce                           参见 ParallelConfig。     --disable-fastapi-docs                           禁用 FastAPI 的 OpenAPI 模式、Swagger UI 和 ReDoc 端点。     --disable-frontend-multiprocessing                           如果指定,将在与模型服务引擎相同的进程中运行 OpenAI 前端服务器。     --disable-log-requests                           禁用日志请求。     --disable-log-stats   禁用日志统计。     --disable-logprobs-during-spec-decoding [DISABLE_LOGPROBS_DURING_SPEC_DECODING]                           如果设置为 True,则在推测解码期间不会返回令牌对数概率。如果设置为 False,则根据 SamplingParams 中的设置返回对数概率。如果未指定,则默认为 True。禁用推测解码期间的对数概率可以通过跳过提案抽样、目标抽样以及确定接受的令牌后的对数概率计算来减少延迟。     --disable-mm-preprocessor-cache                           如果为 true,则禁用多模态预处理器/映射器的缓存。(不建议)     --disable-sliding-window                           禁用滑动窗口,限制为滑动窗口大小。     --distributed-executor-backend {ray,mp,uni,external_launcher}                           用于分布式模型工作程序的后端,可以是“ray”或“mp”(多进程)。如果 pipeline_parallel_size 和 tensor_parallel_size 的乘积小于或等于可用 GPU 的数量,则将使用“mp”以保持在单个主机上进行处理。否则,如果安装了 Ray,这将默认为“ray”,否则将失败。请注意,tpu 仅支持 Ray 进行分布式推理。     --download-dir DOWNLOAD_DIR                           下载并加载权重的目录,默认为 huggingface 的默认缓存目录。     --dtype {auto,half,float16,bfloat16,float,float32}                           模型权重和激活的数据类型。                           * "auto" 将对 FP32 和 FP16 模型使用 FP16 精度,对 BF16 模型使用 BF16 精度。                           * "half" 用于 FP16。推荐用于 AWQ 量化。                           * "float16" 与 "half" 相同。                           * "bfloat16" 用于在精度和范围之间取得平衡。                           * "float" 是 FP32 精度的简写。                           * "float32" 用于 FP32 精度。     --enable-auto-tool-choice                           为受支持的模型启用自动工具选择。使用 `--tool-call-parser` 指定要使用的解析器。     --enable-chunked-prefill [ENABLE_CHUNKED_PREFILL]                           如果设置,则可以根据 max_num_batched_tokens 对预填充请求进行分块。     --enable-lora         如果为 True,则启用对 LoRA 适配器的处理。     --enable-lora-bias    如果为 True,则启用 LoRA 适配器的偏置。     --enable-prefix-caching, --no-enable-prefix-caching                           启用自动前缀缓存。使用 `--no-enable-prefix-caching` 显式禁用。     --enable-prompt-adapter                           如果为 True,则启用对 PromptAdapters 的处理。     --enable-prompt-tokens-details                           如果设置为 True,则在 usage 中启用 prompt_tokens_details。     --enable-reasoning    是否启用模型的 reasoning_content。如果启用,模型将能够生成推理内容。     --enable-request-id-headers                           如果指定,API 服务器将在响应中添加 X-Request-Id 标头。注意:这会降低高 QPS 的性能。     --enable-sleep-mode   启用引擎的睡眠模式。(仅支持 cuda 平台)     --enforce-eager       始终使用 eager-mode PyTorch。如果为 False,将混合使用 eager 模式和 CUDA 图以获得最大的性能和灵活性。     --fully-sharded-loras                           默认情况下,只有一半的 LoRA 计算通过张量并行进行分片。启用此选项将使用完全分片的层。在高序列长度、最大 rank 或张量并行大小时,这可能更快。     --generation-config GENERATION_CONFIG                           生成配置的文件夹路径。默认为None,不加载任何生成配置,将使用 vLLM 默认值。如果设置为“auto”,则将从模型路径加载生成配置。如果设置为文件夹路径,则将从指定的文件夹路径加载生成配置。如果 generation config 中指定了 `max_new_tokens`,则它将设置所有请求的输出令牌数的服务器范围限制。     --gpu-memory-utilization GPU_MEMORY_UTILIZATION                           用于模型执行器的 GPU 内存比例,范围为 0 到 1。例如,值为 0.5 表示 50% 的 GPU 内存利用率。如果未指定,则使用默认值 0.9。这是每个实例的限制,仅适用于当前的 vLLM 实例。无论您是否在同一 GPU 上运行另一个 vLLM 实例,都没有关系。例如,如果您在同一 GPU 上运行两个 vLLM 实例,则可以为每个实例将 GPU 内存利用率设置为 0.5。     --guided-decoding-backend {outlines,lm-format-enforcer,xgrammar}                           默认情况下,哪个引擎将用于引导解码(JSON 模式/正则表达式等)。目前支持 https://github.com/outlines-dev/outlines, https://github.com/mlc-ai/xgrammar, 和 https://github.com/noamgat/lm-format-enforcer。可以通过 guided_decoding_backend 参数在每个请求中覆盖。     --hf-overrides HF_OVERRIDES                           HuggingFace 配置的额外参数。这应该是一个 JSON 字符串,将被解析为字典。     --host HOST             主机名。     --ignore-patterns IGNORE_PATTERNS                           加载模型时要忽略的模式。默认为 `original/**/*` 以避免重复加载 llama 的检查点。     --kv-cache-dtype {auto,fp8,fp8_e5m2,fp8_e4m3}                           kv 缓存存储的数据类型。如果为“auto”,将使用模型数据类型。CUDA 11.8+ 支持 fp8 (=fp8_e4m3) 和 fp8_e5m2。ROCm (AMD GPU) 支持 fp8 (=fp8_e4m3)。     --kv-transfer-config KV_TRANSFER_CONFIG                           分布式 KV 缓存传输的配置。应该是一个 JSON 字符串。     --limit-mm-per-prompt LIMIT_MM_PER_PROMPT                           对于每个多模态插件,限制每个提示允许的输入实例数。需要一个逗号分隔的项目列表,例如:`image=16,video=2` 允许每个提示最多 16 个图像和 2 个视频。默认为每个模态 1。     --load-format {auto,pt,safetensors,npcache,dummy,tensorizer,sharded_state,gguf,bitsandbytes,mistral,runai_streamer}                           要加载的模型权重的格式。                           * “auto” 将尝试以 safetensors 格式加载权重,如果 safetensors 格式不可用,则回退到 pytorch bin 格式。                           * “pt” 将以 pytorch bin 格式加载权重。                           * “safetensors” 将以 safetensors 格式加载权重。                           * “npcache” 将以 pytorch 格式加载权重并存储 numpy 缓存以加速加载。                           * “dummy” 将使用随机值初始化权重,这主要用于分析。                           * “tensorizer” 将使用 CoreWeave 的 tensorizer 加载权重。有关更多信息,请参阅“示例”部分中的 Tensorize vLLM Model 脚本。                           * “runai_streamer” 将使用 Run:aiModel Streamer 加载 Safetensors 权重。                           * “bitsandbytes” 将使用 bitsandbytes 量化加载权重。     --logits-processor-pattern LOGITS_PROCESSOR_PATTERN                           可选的正则表达式模式,指定可以通过 `logits_processors` 额外完成参数传递的有效 logits 处理器限定名。默认为 None,它不允许任何处理器。     --long-lora-scaling-factors LONG_LORA_SCALING_FACTORS                           指定多个缩放因子(可以与基本模型缩放因子不同 - 请参阅例如 Long LoRA),以允许多个使用这些缩放因子训练的 LoRA 适配器同时使用。如果未指定,则只允许使用基本模型缩放因子训练的适配器。     --lora-dtype {auto,float16,bfloat16}                           LoRA 的数据类型。如果为 auto,将默认为基本模型数据类型。     --lora-extra-vocab-size LORA_EXTRA_VOCAB_SIZE                           LoRA 适配器中可以存在的最大额外词汇量大小(添加到基本模型词汇表)。     --lora-modules LORA_MODULES [LORA_MODULES ...]                           LoRA 模块配置,可以是“name=path”格式或 JSON 格式。                           示例(旧格式):`'name=path'`                           示例(新格式):`{"name": "name", "path": "lora_path", "base_model_name": "id"}`     --max-cpu-loras MAX_CPU_LORAS                           存储在 CPU 内存中的最大 LoRA 数量。必须大于等于 max_loras。默认为 max_loras。     --max-log-len MAX_LOG_LEN                           日志中打印的最大提示字符数或提示 ID 号码。默认值:无限制     --max-logprobs MAX_LOGPROBS                           如果 SamplingParams 中指定了 logprobs,则返回的最大对数概率数。     --max-lora-rank MAX_LORA_RANK                           最大 LoRA rank。     --max-loras MAX_LORAS                           单个批次中的最大 LoRA 数量。     --max-model-len MAX_MODEL_LEN                           模型上下文长度。如果未指定,将从模型配置中自动派生。     --max-num-batched-tokens MAX_NUM_BATCHED_TOKENS                           每次迭代的最大批处理令牌数。     --max-num-seqs MAX_NUM_SEQS                           每次迭代的最大序列数。     --max-parallel-loading-workers MAX_PARALLEL_LOADING_WORKERS                           以多个批次顺序加载模型,以避免在使用张量并行和大模型时出现 RAM OOM。     --max-prompt-adapter-token MAX_PROMPT_ADAPTER_TOKEN                           PromptAdapters 的最大令牌数。     --max-prompt-adapters MAX_PROMPT_ADAPTERS                           批次中 PromptAdapters 的最大数量。     --max-seq-len-to-capture MAX_SEQ_LEN_TO_CAPTURE                           CUDA 图覆盖的最大序列长度。当序列的上下文长度大于此值时,我们将回退到 eager 模式。此外,对于编码器-解码器模型,如果编码器输入的序列长度大于此值,我们将回退到 eager 模式。     --middleware MIDDLEWARE                           要应用于应用程序的其他 ASGI 中间件。我们接受多个 --middleware 参数。该值应该是导入路径。如果提供了一个函数,vLLM 将使用 ``@app.middleware('http')` 将其添加到服务器。如果提供了一个类,vLLM 将使用 ``app.add_middleware()` 将其添加到服务器。     --mm-processor-kwargs MM_PROCESSOR_KWARGS                           多模态输入映射/处理的覆盖,例如图像处理器。例如:`{"num_crops": 4}`。     --model MODEL           要使用的 huggingface 模型的名称或路径。     --model-impl {auto,vllm,transformers}                           要使用的模型实现。                           * “auto” 将尝试使用 vLLM 实现(如果存在),如果没有 vLLM 实现可用,则回退到 Transformers 实现。                           * “vllm” 将使用 vLLM 模型实现。                           * “transformers” 将使用 Transformers 模型实现。     --model-loader-extra-config MODEL_LOADER_EXTRA_CONFIG                           模型加载器的额外配置。这将传递给与所选 load_format 对应的模型加载器。这应该是一个 JSON 字符串,将被解析为字典。     --multi-step-stream-outputs [MULTI_STEP_STREAM_OUTPUTS]                           如果为 False,则多步将在所有步骤结束后流式传输输出。     --ngram-prompt-lookup-max NGRAM_PROMPT_LOOKUP_MAX                           推测解码中 ngram 提示查找的最大窗口大小。     --ngram-prompt-lookup-min NGRAM_PROMPT_LOOKUP_MIN                           推测解码中 ngram 提示查找的最小窗口大小。     --num-gpu-blocks-override NUM_GPU_BLOCKS_OVERRIDE                           如果指定,则忽略 GPU 分析结果并使用此数量的 GPU 块。用于测试抢占。     --num-lookahead-slots NUM_LOOKAHEAD_SLOTS                           推测解码所需的实验性调度配置。这将在未来被推测配置取代;它的存在是为了在此之前启用正确性测试。     --num-scheduler-steps NUM_SCHEDULER_STEPS                           每个调度器调用的最大前向步数。     --num-speculative-tokens NUM_SPECULATIVE_TOKENS                           在推测解码中,从草稿模型中抽样的推测令牌数。     --otlp-traces-endpoint OTLP_TRACES_ENDPOINT                           OpenTelemetry 跟踪将发送到的目标 URL。     --override-generation-config OVERRIDE_GENERATION_CONFIG                           以 JSON 格式覆盖或设置生成配置。例如:`{"temperature": 0.5}`。如果与 --generation-config=auto 一起使用,则覆盖参数将与模型中的默认配置合并。如果 generation-config 为 None,则仅使用覆盖参数。     --override-neuron-config OVERRIDE_NEURON_CONFIG                           覆盖或设置 neuron 设备配置。例如:`{"cast_logits_dtype": "bloat16"}`。     --override-pooler-config OVERRIDE_POOLER_CONFIG                           覆盖或设置池化模型的池化方法。例如:`{"pooling_type": "mean", "normalize": false}`。     --pipeline-parallel-size PIPELINE_PARALLEL_SIZE, -pp PIPELINE_PARALLEL_SIZE                           流水线阶段数。     --port PORT             端口号。     --preemption-mode PREEMPTION_MODE                           如果为“recompute”,则引擎通过重新计算执行抢占;如果为“swap”,则引擎通过块交换执行抢占。     --prompt-adapters PROMPT_ADAPTERS [PROMPT_ADAPTERS ...]                           格式为 name=path 的提示适配器配置。可以指定多个适配器。     --qlora-adapter-name-or-path QLORA_ADAPTER_NAME_OR_PATH                           QLoRA 适配器的名称或路径。     --quantization {aqlm,awq,deepspeedfp,tpu_int8,fp8,ptpc_fp8,fbgemm_fp8,modelopt,marlin,gguf,gptq_marlin_24,gptq_marlin,awq_marlin,gptq,compressed-tensors,bitsandbytes,qqq,hqq,experts_int8,neuron_quant,ipex,quark,moe_wna16,None}, -q {aqlm,awq,deepspeedfp,tpu_int8,fp8,ptpc_fp8,fbgemm_fp8,modelopt,marlin,gguf,gptq_marlin_24,gptq_marlin,awq_marlin,gptq,compressed-tensors,bitsandbytes,qqq,hqq,experts_int8,neuron_quant,ipex,quark,moe_wna16,None}                           用于量化权重的方法。如果为 None,我们首先检查模型配置文件中的 `quantization_config` 属性。如果该属性为 None,我们假设模型权重未被量化,并使用 `dtype` 来确定权重的   数据类型。     --ray-workers-use-nsight                           如果指定,则使用 nsight 来分析 Ray 工作程序。     --reasoning-parser {deepseek_r1}                           根据您使用的模型选择推理解析器。这用于将推理内容解析为 OpenAI API 格式。`--enable-reasoning` 是必需的。     --response-role RESPONSE_ROLE                           如果 `request.add_generation_prompt=true`,则返回的角色名称。     --return-tokens-as-token-ids                           当指定 `--max-logprobs` 时,将单个令牌表示为“token_id:{token_id}”形式的字符串,以便可以识别不是 JSON 可编码的令牌。     --revision REVISION      要使用的特定模型版本。它可以是分支名称、标签名称或提交 ID。如果未指定,将使用默认版本。     --root-path ROOT_PATH   当应用程序位于基于路径的路由代理后面时,FastAPI root_path。     --rope-scaling ROPE_SCALING                           JSON 格式的 RoPE 缩放配置。例如,`{"rope_type":"dynamic","factor":2.0}`     --rope-theta ROPE_THETA                           RoPE theta。与 `rope_scaling` 一起使用。在某些情况下,更改 RoPE theta 可以提高缩放模型的性能。     --scheduler-delay-factor SCHEDULER_DELAY_FACTOR                           在调度下一个提示之前应用延迟(延迟因子乘以先前提示延迟)。     --scheduling-policy {fcfs,priority}                           要使用的调度策略。“fcfs”(先到先服务,即按到达顺序处理请求;默认)或“priority”(根据给定优先级(值越低表示越早处理)和到达时间决定任何平局)。     --seed SEED             操作的随机种子。     --served-model-name SERVED_MODEL_NAME [SERVED_MODEL_NAME ...]                           API 中使用的模型名称。如果提供多个名称,服务器将响应任何提供的名称。响应的 model 字段中的模型名称将是此列表中的第一个名称。如果未指定,模型名称将与 `--model` 参数相同。请注意,此名称也将用于 prometheus 指标的 `model_name` 标签内容,如果提供多个名称,则指标标签将采用第一个名称。     --skip-tokenizer-init                           跳过 tokenizer 和 detokenizer 的初始化。     --spec-decoding-acceptance-method {rejection_sampler,typical_acceptance_sampler}                           指定在推测解码期间用于草稿令牌验证的接受方法。支持两种类型的接受例程:1) RejectionSampler,它不允许更改草稿令牌的接受率,2) TypicalAcceptanceSampler,它是可配置的,允许更高的接受率,但质量较低,反之亦然。     --speculative-disable-by-batch-size SPECULATIVE_DISABLE_BY_BATCH_SIZE                           如果入队请求数大于此值,则禁用新传入请求的推测解码。     --speculative-disable-mqa-scorer                           如果设置为 True,则 MQA scorer 将在推测中被禁用,并回退到批次扩展。     --speculative-draft-tensor-parallel-size SPECULATIVE_DRAFT_TENSOR_PARALLEL_SIZE, -spec-draft-tp SPECULATIVE_DRAFT_TENSOR_PARALLEL_SIZE                           推测解码中草稿模型的张量并行副本数。     --speculative-max-model-len SPECULATIVE_MAX_MODEL_LEN                           草稿模型支持的最大序列长度。超过此长度的序列将跳过推测。     --speculative-model SPECULATIVE_MODEL                           推测解码中要使用的草稿模型的名称。     --speculative-model-quantization {aqlm,awq,deepspeedfp,tpu_int8,fp8,ptpc_fp8,fbgemm_fp8,modelopt,marlin,gguf,gptq_marlin_24,gptq_marlin,awq_marlin,gptq,compressed-tensors,bitsandbytes,qqq,hqq,experts_int8,neuron_quant,ipex,quark,moe_wna16,None}                           用于量化推测模型权重的方法。如果为 None,我们首先检查模型配置文件中的 `quantization_config` 属性。如果该属性为 None,我们假设模型权重未被量化,并使用 `dtype` 来确定权重的数据类型。     --ssl-ca-certs SSL_CA_CERTS                           CA 证书文件。     --ssl-cert-reqs SSL_CERT_REQS                           是否需要客户端证书(请参阅 stdlib ssl 模块)。     --ssl-certfile SSL_CERTFILE                           SSL 证书文件的文件路径。     --ssl-keyfile SSL_KEYFILE                           SSL 密钥文件的文件路径。     --swap-space SWAP_SPACE                           每个 GPU 的 CPU 交换空间大小 (GiB)。     --task {auto,generate,embedding,embed,classify,score,reward}                           用于模型的任务。每个 vLLM 实例只支持一个任务,即使同一个模型可以用于多个任务。当模型只支持一个任务时,可以使用 `"auto"`来选择它;否则,您必须明确指定要使用的任务。     --tensor-parallel-size TENSOR_PARALLEL_SIZE, -tp TENSOR_PARALLEL_SIZE                           张量并行副本数。     --tokenizer TOKENIZER     要使用的 huggingface tokenizer 的名称或路径。如果未指定,将使用模型名称或路径。     --tokenizer-mode {auto,slow,mistral,custom}                           tokenizer 模式。                           * “auto” 将使用快速 tokenizer(如果可用)。                           * “slow” 将始终使用慢速 tokenizer。                           * “mistral” 将始终使用 `mistral_common` tokenizer。                           * “custom” 将使用 --tokenizer 选择预注册的 tokenizer。     --tokenizer-pool-extra-config TOKENIZER_POOL_EXTRA_CONFIG                           tokenizer 池的额外配置。这应该是一个 JSON 字符串,将被解析为字典。如果 tokenizer_pool_size 为 0,则忽略。     --tokenizer-pool-size TOKENIZER_POOL_SIZE                           用于异步 tokenization 的 tokenizer 池大小。如果为 0,将使用同步 tokenization。     --tokenizer-pool-type TOKENIZER_POOL_TYPE                           用于异步 tokenization 的 tokenizer 池类型。如果 tokenizer_pool_size 为 0,则忽略。     --tokenizer-revision TOKENIZER_REVISION                           要使用的 huggingface tokenizer 的修订版本。它可以是分支名称、标签名称或提交 ID。如果未指定,将使用默认版本。     --tool-call-parser {granite-20b-fc,granite,hermes,internlm,jamba,llama3_json,mistral,pythonic} 或在 --tool-parser-plugin 中注册的名称                           根据您使用的模型选择工具调用解析器。这用于将模型生成的工具调用解析为 OpenAI API 格式。`--enable-auto-tool-choice` 是必需的。     --tool-parser-plugin TOOL_PARSER_PLUGIN                           指定用于将模型生成的工具解析为 OpenAI API 格式的工具解析器插件,可以在 `--tool-call-parser` 中使用此插件中注册的名称。     --trust-remote-code   信任来自 huggingface 的远程代码。     --typical-acceptance-sampler-posterior-alpha TYPICAL_ACCEPTANCE_SAMPLER_POSTERIOR_ALPHA                           TypicalAcceptanceSampler 中用于令牌接受的基于熵的阈值的缩放因子。通常默认为 --typical-acceptance-sampler-posterior-threshold 的平方根,即 0.3。     --typical-acceptance-sampler-posterior-threshold TYPICAL_ACCEPTANCE_SAMPLER_POSTERIOR_THRESHOLD                           设置要接受的令牌的后验概率的下限阈值。此阈值由 TypicalAcceptanceSampler 用于在推测解码期间做出抽样决策。默认为 0.09。     --use-v2-block-manager                           [已弃用] 块管理器 v1 已被删除,现在默认使用 SelfAttnBlockSpaceManager(即块管理器 v2)。将此标志设置为 True 或 False 对 vLLM 行为没有影响。     --uvicorn-log-level {debug,info,warning,error,critical,trace}                           uvicorn 的日志级别。     --worker-cls WORKER_CLS                           用于分布式执行的工作程序类。     -h, --help            显示此帮助消息并退出   ``

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐