【大模型推理】vLLM推理库介绍及部署qwen2实战教程

前言

2023年6月,来自加州大学伯克利分校等机构的一个研究团队开源了 vLLM项目,其使用了一种新设计的注意力算法 PagedAttention,可让服务提供商轻松、快速且低成本地发布 LLM 服务。

在这里插入图片描述

在vLLM团队发布的论文中,详细解释了如何通过类似操作系统虚拟内存管理的机制来实现高效的 LLM 服务。该论文已被将于十月底在德国举办的 ACM 操作系统原理研讨会(SOSP 2023)接收:
在这里插入图片描述

vLLM: Efficient Memory Management for Large Language Model Serving with PagedAttention
CodePaper,UC Berkeley,Stanford University

现有情况分析

【大模型推理】KV Cache原理文章中,我们已经深入理解了大模型在实际推理过程,如何进行 KV Cache,从而提高推理效率的。但是大多数的 LLM 服务系统都没有高效地管理 KV Cache 内存,从而造成了 KV Cache 预分配内存空间浪费等问题,使得现有系统的方法极其低效。vLLM则提出了一套高效管理 KV Cache 的方法,实现了高吞吐量的分布式 LLM 服务引擎,并且几乎做到了 KV Cache 内存的零浪费。

限制模型推理性能的因素分析

我们知道 LLM 的核心是 基于自回归生成式的 Transformer 模型,可基于当前输入(prompt)和其之前输出的 token 序列生成下一个token,直到模型输出终止 token。对于每次请求,这个成本高昂的过程都会重复。这种按序列的生成过程会让工作负载受到内存限制,从而无法充分利用 GPU 的计算能力,并会限制服务的吞吐量。

我们可以通过批量方式,同时处理多个请求可以提高吞吐量。但是,要在单一批次中处理许多请求,就需要高效地管理每个请求所占用的内存空间。

举个例子,下图(左侧)展示了一个 13B 参数的 LLM(数据类型为BF16) 在一台 40GB RAM 的英伟达 A100 GPU 上的内存分布:

在这里插入图片描述

可以看到

  • 其 约65% 的内存都分配给了模型权重,而模型权重在提供服务期间是不会变化的
  • 约 30% 的内存是用于存储请求的动态状态。对 Transformer 而言,这些状态由与Attention机制关联的 KV Cache 构成,其表示用于生成序列中新输出 token 的之前 token 上下文信息
  • 其余占比很小的内存则是用于其它数据,比如激活值(评估 LLM 时创建的临时张量)

得出结论

  • 由于模型权重恒定不变,推理阶段激活值也只会占用少量内存,因此对 KV Cache的管理方式就成了 决定 最大批量大小 的关键因素
  • 如果管理方式很低效,KV Cache内存就会极大限制批量大小,并由此限制 LLM 的吞吐量,如上图(右侧)所示

默认KV Cache存在的问题

vLLM研究团队在论文中表示,他们观察到当前的 LLM 服务系统都没有高效地管理 KV 缓存内存,主要原因是它们会将请求的 KV Cache 保存在邻接的内存空间中,因为大多数深度学习框架都需要将张量存储在相邻连续的内存中

  • KV Cache 有其自己的独特性质:它会在模型生成新 token 的过程中随时间动态地增长和缩小,而且它的持续时间和长度是无法事先知晓的
  • 因此现有LLM推理服务系统,会根据请求的最大可能序列长度为请求静态分配一块内存,而不考虑请求的实际输入或最终输出长度,如下图所示:

在这里插入图片描述

这些特性使得现有LLM推理服务系统的方法极其低效,这主要体现在两方面:

1. 现有系统存在内部和外部内存碎片的问题

  • 内部内存无法充分被利用:为了将请求的 KV Cache 存储在连续的内存空间中,他们预先分配了具有请求最大长度(例如 2048 个令牌)的连续内存块。这可能会导致严重的内部碎片,因为请求的实际长度可能比其最大长度短得多。此外,即使提前知道实际长度,预分配效率仍然十分低下。由于整个预分配的内存块在请求的生命周期内被保留,其他较短的请求无法利用当前预分配但未使用的内存块的任何部分

  • 外部内存碎片:外部内存碎片也很重要,因为每个请求的预分配的大小可能不同。事实上,下图的分析结果表明,现有系统中只有 20.4% - 38.2% 的 KV Cache 预分配内存空间 用于存储实际token状态

在这里插入图片描述

2. 现有系统无法利用内存共享的机会

LLM服务经常使用先进的解码算法,例如并行采样( parallel sampling)和波束搜索( beam search),每个请求生成多个输出,如下图所示。在这些场景中,请求由多个序列组成,这些序列可以部分共享其 KV Cache。然而,在现有系统中,内存共享是不可能的,因为序列的 KV Cache 存储在单独的连续空间中。

在这里插入图片描述

vLLM基本原理

原理概述

为了解决上述限制,vLLM团队提出了一种注意力算法 PagedAttention;该算法的灵感来自操作系统(OS)解决内存碎片化和内存共享的方案:使用分页机制的虚拟内存

  • PagedAttention 会将请求的 KV Cache 分成一块块的,每一块(block)都包含一定数量 token 的 KV Cache。在 PagedAttention 中,KV Cache的块不一定要存储在相邻连续空间中
  • 这样一来,就能以一种更为灵活的方式来管理 KV Cache,就像是操作系统的虚拟内存:可以将那些块看作是分页,将 token 看作是字节,将请求视为进程。通过使用相对较小的块并按需分配它们,这种设计可以减少内部碎片。
  • 此外,它还能消除外部碎片,因为所有块的大小都相同。
  • 最后,它还能实现以块为粒度的内存共享;这种内存共享支持与同一请求相关的不同序列,甚至也支持不同的请求。

立足于 PagedAttention,该团队构建了一个高吞吐量的分布式 LLM 服务引擎 vLLM,其几乎做到了 KV 缓存内存的零浪费。vLLM 使用了块级的内存管理和抢占式的请求调度 —— 这些机制都是配合 PagedAttention 一起设计的。vLLM 支持 GPT、OPT 和 LLaMA 等各种大小的常用 LLM,包括那些超出单个 GPU 内存容量的 LLM。

  • vLLM 采用一种**集中式调度器(Scheduler)**来协调分布式 GPU 工作器(Worker)的执行
  • KV Cache Manager 由 PagedAttention 驱动,能以分页方式有效管理 KV Cache
  • 具体来说,KV Cache Manager 通过 Scheduler 发送的指令来管理 GPU 工作器上的物理 KV Cache内存

在这里插入图片描述

PagedAttention

PagedAttention的核心思想有两点:

1. 将连续的 KV Cache 存储在物理上非连续的内存空间中

PagedAttention 将 KV Cache 组织为 物理空间中 固定大小的 内存块,就像虚拟内存中的分页。在实际使用中,每次生产新的token时,计算得到的KV Cache 都会存储到当前已经分配但未被填满的块中,直到当前的快被占满。然后vLLM会重新分配一个新的内存块用于存储后续生成的 KV Cache。如下图所示:
在这里插入图片描述

2. 虚拟内存

在实际应用中,每个请求都有一个逻辑的KV Cache(看起来是连续的),vLLM会在后台维护一个 Block Table 映射表,用于将逻辑KV Cache映射到物理显存的KV Cache上。

在这里插入图片描述

在一个 KV 块中存储多个 token(块大小 > 1)可让 PagedAttention 核并行处理多个位置的 KV 缓存,由此可以提升硬件使用率并降低延迟。下图给出了 vLLM 管理两个序列的内存的示例:

在这里插入图片描述

共享内存机制

在许多成功的 LLM 应用中,LLM 服务必须要能提供更为复杂的解码场景 —— 有复杂的访问模式和更多的内存共享机会。下图展示了一个请求带有两个输出的并行编码的例子:

在这里插入图片描述

由于两个输出共享同一个 请求,所以 在生成之前,同一个请求 prompt 对应的 KV Cache 只会在物理显存中存储一份,存储的每个Block都会标记自己当前被几个请求引用。只有当标记为0时,这个Block占用的物理显存才会被释放。

  • 当Sample A1开始生成时,会触发Copy-on-Write机制,也就是他发现将要写入的Block的标记数为2(不是1),表示当前这个Block被两个请求所应用,所以不能直接写入,必须要copy一份到其他空闲的Block中,才能继续写入
  • 此时,原来将要写入的Block标记数就变为1,这样当Sample A2开始生成时,就会发现自己将要写入的Block标记数为1,就可以直接写入
  • 这样,两个请求就可以继续往后生成各自的结果,但是他们其实的prompt对应的KV Cache是共享的,这样就节省了显存占用

同样的,在Beam Search中也会有类似的方法来优化显存占用。

代码实现逻辑

详细讲解在:https://www.bilibili.com/video/BV1qE42157Rn/?spm_id_from=333.788&vd_source=3f020637bb31d79c22c18d05f6c067c8

初始化流程

在这里插入图片描述

推理流程

在这里插入图片描述

部署Qwen2实战教程

环境配置

https://docs.vllm.ai/en/latest/getting_started/installation.html#installation
vllm官网有两种环境配置方法:

  • pip直接安装
# (Recommended) Create a new conda environment.
conda create -n myenv python=3.10 -y
conda activate myenv

# Install vLLM with CUDA 12.1.
pip install vllm
  • 从源码编译安装
git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -e .  # This may take 5-10 minutes.

根据我的尝试,最好选第二种,从源码直接编译比较靠谱:

# (Recommended) Create a new conda environment.
conda create -n vllm python=3.10 -y
conda activate vllm

# git clone
git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -e .  # 这一步要花很长时间,亲测30分钟左右

后续运行程序出现bug,大多是是torch版本和cuda版本不兼容问题,建议直接重装。

我成功运行的环境信息为:

(vllm) root@autodl-container-:~/vllm# conda list
# packages in environment at /root/miniconda3/envs/vllm:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                        main    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
_openmp_mutex             5.1                       1_gnu    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
accelerate                0.34.2                   pypi_0    pypi
aiohappyeyeballs          2.4.0                    pypi_0    pypi
aiohttp                   3.10.5                   pypi_0    pypi
aiosignal                 1.3.1                    pypi_0    pypi
annotated-types           0.7.0                    pypi_0    pypi
anyio                     4.4.0                    pypi_0    pypi
async-timeout             4.0.3                    pypi_0    pypi
attrs                     24.2.0                   pypi_0    pypi
bzip2                     1.0.8                h5eee18b_6    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
ca-certificates           2024.7.2             h06a4308_0    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
certifi                   2024.8.30                pypi_0    pypi
charset-normalizer        3.3.2                    pypi_0    pypi
click                     8.1.7                    pypi_0    pypi
cloudpickle               3.0.0                    pypi_0    pypi
datasets                  2.21.0                   pypi_0    pypi
dill                      0.3.8                    pypi_0    pypi
diskcache                 5.6.3                    pypi_0    pypi
distro                    1.9.0                    pypi_0    pypi
exceptiongroup            1.2.2                    pypi_0    pypi
fastapi                   0.114.0                  pypi_0    pypi
filelock                  3.16.0                   pypi_0    pypi
frozenlist                1.4.1                    pypi_0    pypi
fsspec                    2024.6.1                 pypi_0    pypi
gguf                      0.9.1                    pypi_0    pypi
h11                       0.14.0                   pypi_0    pypi
httpcore                  1.0.5                    pypi_0    pypi
httptools                 0.6.1                    pypi_0    pypi
httpx                     0.27.2                   pypi_0    pypi
huggingface-hub           0.24.6                   pypi_0    pypi
idna                      3.8                      pypi_0    pypi
importlib-metadata        8.4.0                    pypi_0    pypi
interegular               0.3.3                    pypi_0    pypi
jinja2                    3.1.4                    pypi_0    pypi
jiter                     0.5.0                    pypi_0    pypi
jsonschema                4.23.0                   pypi_0    pypi
jsonschema-specifications 2023.12.1                pypi_0    pypi
lark                      1.2.2                    pypi_0    pypi
ld_impl_linux-64          2.38                 h1181459_1    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libffi                    3.4.4                h6a678d5_1    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libgcc-ng                 11.2.0               h1234567_1    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libgomp                   11.2.0               h1234567_1    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libstdcxx-ng              11.2.0               h1234567_1    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libuuid                   1.41.5               h5eee18b_0    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
llvmlite                  0.43.0                   pypi_0    pypi
lm-format-enforcer        0.10.6                   pypi_0    pypi
markupsafe                2.1.5                    pypi_0    pypi
mistral-common            1.3.4                    pypi_0    pypi
modelscope                1.18.0                   pypi_0    pypi
mpmath                    1.3.0                    pypi_0    pypi
msgpack                   1.0.8                    pypi_0    pypi
msgspec                   0.18.6                   pypi_0    pypi
multidict                 6.0.5                    pypi_0    pypi
multiprocess              0.70.16                  pypi_0    pypi
ncurses                   6.4                  h6a678d5_0    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
nest-asyncio              1.6.0                    pypi_0    pypi
networkx                  3.3                      pypi_0    pypi
numba                     0.60.0                   pypi_0    pypi
numpy                     1.26.4                   pypi_0    pypi
nvidia-cublas-cu12        12.1.3.1                 pypi_0    pypi
nvidia-cuda-cupti-cu12    12.1.105                 pypi_0    pypi
nvidia-cuda-nvrtc-cu12    12.1.105                 pypi_0    pypi
nvidia-cuda-runtime-cu12  12.1.105                 pypi_0    pypi
nvidia-cudnn-cu12         9.1.0.70                 pypi_0    pypi
nvidia-cufft-cu12         11.0.2.54                pypi_0    pypi
nvidia-curand-cu12        10.3.2.106               pypi_0    pypi
nvidia-cusolver-cu12      11.4.5.107               pypi_0    pypi
nvidia-cusparse-cu12      12.1.0.106               pypi_0    pypi
nvidia-ml-py              12.560.30                pypi_0    pypi
nvidia-nccl-cu12          2.20.5                   pypi_0    pypi
nvidia-nvjitlink-cu12     12.6.68                  pypi_0    pypi
nvidia-nvtx-cu12          12.1.105                 pypi_0    pypi
openai                    1.44.0                   pypi_0    pypi
openssl                   3.0.15               h5eee18b_0    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
outlines                  0.0.46                   pypi_0    pypi
packaging                 24.1                     pypi_0    pypi
pandas                    2.2.2                    pypi_0    pypi
partial-json-parser       0.2.1.1.post4            pypi_0    pypi
pillow                    10.4.0                   pypi_0    pypi
pip                       24.2            py310h06a4308_0    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
prometheus-client         0.20.0                   pypi_0    pypi
prometheus-fastapi-instrumentator 7.0.0                    pypi_0    pypi
protobuf                  5.28.0                   pypi_0    pypi
psutil                    6.0.0                    pypi_0    pypi
py-cpuinfo                9.0.0                    pypi_0    pypi
pyairports                2.1.1                    pypi_0    pypi
pyarrow                   17.0.0                   pypi_0    pypi
pycountry                 24.6.1                   pypi_0    pypi
pydantic                  2.9.0                    pypi_0    pypi
pydantic-core             2.23.2                   pypi_0    pypi
python                    3.10.14              h955ad1f_1    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
python-dateutil           2.9.0.post0              pypi_0    pypi
python-dotenv             1.0.1                    pypi_0    pypi
pytz                      2024.1                   pypi_0    pypi
pyyaml                    6.0.2                    pypi_0    pypi
pyzmq                     26.2.0                   pypi_0    pypi
ray                       2.35.0                   pypi_0    pypi
readline                  8.2                  h5eee18b_0    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
referencing               0.35.1                   pypi_0    pypi
regex                     2024.7.24                pypi_0    pypi
requests                  2.32.3                   pypi_0    pypi
rpds-py                   0.20.0                   pypi_0    pypi
safetensors               0.4.5                    pypi_0    pypi
sentencepiece             0.2.0                    pypi_0    pypi
setuptools                72.1.0          py310h06a4308_0    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
six                       1.16.0                   pypi_0    pypi
sniffio                   1.3.1                    pypi_0    pypi
sqlite                    3.45.3               h5eee18b_0    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
starlette                 0.38.5                   pypi_0    pypi
sympy                     1.13.2                   pypi_0    pypi
tiktoken                  0.7.0                    pypi_0    pypi
tk                        8.6.14               h39e8969_0    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
tokenizers                0.19.1                   pypi_0    pypi
torch                     2.4.0                    pypi_0    pypi
torchvision               0.19.0                   pypi_0    pypi
tqdm                      4.66.5                   pypi_0    pypi
transformers              4.44.2                   pypi_0    pypi
triton                    3.0.0                    pypi_0    pypi
typing-extensions         4.12.2                   pypi_0    pypi
tzdata                    2024.1                   pypi_0    pypi
urllib3                   2.2.2                    pypi_0    pypi
uvicorn                   0.30.6                   pypi_0    pypi
uvloop                    0.20.0                   pypi_0    pypi
vllm                      0.6.0+cu122              pypi_0    pypi
vllm-flash-attn           2.6.1                    pypi_0    pypi
watchfiles                0.24.0                   pypi_0    pypi
websockets                13.0.1                   pypi_0    pypi
wheel                     0.43.0          py310h06a4308_0    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
xformers                  0.0.27.post2             pypi_0    pypi
xxhash                    3.5.0                    pypi_0    pypi
xz                        5.4.6                h5eee18b_1    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
yarl                      1.11.0                   pypi_0    pypi
zipp                      3.20.1                   pypi_0    pypi
zlib                      1.2.13               h5eee18b_1    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main

单次推理

from vllm import LLM, SamplingParams

def get_completion(prompts, model, tokenizer=None, max_tokens=512, temperature=0.8, top_p=0.95, max_model_len=2048):
    stop_token_ids = [151329, 151336, 151338]
    # 创建采样参数。temperature 控制生成文本的多样性,top_p 控制核心采样的概率
    sampling_params = SamplingParams(temperature=temperature, top_p=top_p,  max_tokens=max_tokens, stop_token_ids=stop_token_ids)
    # 初始化 vLLM 推理引擎
    llm = LLM(model=model, tokenizer=tokenizer, max_model_len=max_model_len, quantization="AWQ", trust_remote_code=True)
    outputs = llm.generate(prompts, sampling_params)
    return outputs

if __name__ == "__main__":    
    # 初始化 vLLM 推理引擎
    model='/root/autodl-tmp/qwen2-72b-instruct-awq' # 指定模型路径
    
    text = ["你好,帮我介绍一下什么是大语言模型。",
            "可以给我将一个有趣的童话故事吗?"
            ]

    outputs = get_completion(text, model, temperature=0.8, top_p=0.95)

    # 输出是一个包含 prompt、生成文本和其他信息的 RequestOutput 对象列表。
    # 打印输出。
    for output in outputs:
        prompt = output.prompt
        generated_text = output.outputs[0].text
        print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

运行结果:

(vllm) root@autodl-container-:~/vllm# python inference_qwen2_awq.py 
INFO 09-11 11:33:51 awq_marlin.py:93] Detected that the model can run with awq_marlin, however you specified quantization=awq explicitly, so forcing awq. Use quantization=awq_marlin for faster inference
WARNING 09-11 11:33:51 config.py:335] awq quantization is not fully optimized yet. The speed can be slower than non-quantized models.
INFO 09-11 11:33:51 llm_engine.py:232] Initializing an LLM engine (v0.6.0) with config: model='/root/autodl-tmp/qwen2-72b-instruct-awq', speculative_config=None, tokenizer='/root/autodl-tmp/qwen2-72b-instruct-awq', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, override_neuron_config=None, rope_scaling=None, rope_theta=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.float16, max_seq_len=2048, download_dir=None, load_format=LoadFormat.AUTO, tensor_parallel_size=1, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=awq, enforce_eager=False, kv_cache_dtype=auto, quantization_param_path=None, device_config=cuda, decoding_config=DecodingConfig(guided_decoding_backend='outlines'), observability_config=ObservabilityConfig(otlp_traces_endpoint=None, collect_model_forward_time=False, collect_model_execute_time=False), seed=0, served_model_name=/root/autodl-tmp/qwen2-72b-instruct-awq, use_v2_block_manager=False, num_scheduler_steps=1, enable_prefix_caching=False, use_async_output_proc=True)
INFO 09-11 11:33:52 model_runner.py:915] Starting to load model /root/autodl-tmp/qwen2-72b-instruct-awq...
Loading safetensors checkpoint shards:   0% Completed | 0/11 [00:00<?, ?it/s]
Loading safetensors checkpoint shards:   9% Completed | 1/11 [00:00<00:08,  1.24it/s]
Loading safetensors checkpoint shards:  18% Completed | 2/11 [00:01<00:07,  1.16it/s]
Loading safetensors checkpoint shards:  27% Completed | 3/11 [00:02<00:07,  1.13it/s]
Loading safetensors checkpoint shards:  36% Completed | 4/11 [00:03<00:06,  1.12it/s]
Loading safetensors checkpoint shards:  45% Completed | 5/11 [00:04<00:05,  1.14it/s]
Loading safetensors checkpoint shards:  55% Completed | 6/11 [00:05<00:04,  1.13it/s]
Loading safetensors checkpoint shards:  64% Completed | 7/11 [00:05<00:03,  1.28it/s]
Loading safetensors checkpoint shards:  73% Completed | 8/11 [00:06<00:02,  1.26it/s]
Loading safetensors checkpoint shards:  82% Completed | 9/11 [00:07<00:01,  1.27it/s]
Loading safetensors checkpoint shards:  91% Completed | 10/11 [00:08<00:00,  1.24it/s]
Loading safetensors checkpoint shards: 100% Completed | 11/11 [00:09<00:00,  1.24it/s]
Loading safetensors checkpoint shards: 100% Completed | 11/11 [00:09<00:00,  1.21it/s]

INFO 09-11 11:34:02 model_runner.py:926] Loading model weights took 38.7602 GB
INFO 09-11 11:34:04 gpu_executor.py:122] # GPU blocks: 6239, # CPU blocks: 819
INFO 09-11 11:34:11 model_runner.py:1217] Capturing the model for CUDA graphs. This may lead to unexpected consequences if the model is not static. To run the model in eager mode, set 'enforce_eager=True' or use '--enforce-eager' in the CLI.
INFO 09-11 11:34:11 model_runner.py:1221] CUDA graphs can take additional 1~3 GiB memory per GPU. If you are running out of memory, consider decreasing `gpu_memory_utilization` or enforcing eager mode. You can also reduce the `max_num_seqs` as needed to decrease memory usage.
INFO 09-11 11:34:46 model_runner.py:1335] Graph capturing finished in 35 secs.
Processed prompts: 100%|████████████████████████████████████████| 2/2 [00:20<00:00, 10.44s/it, est. speed input: 0.86 toks/s, output: 24.19 toks/s]
Prompt: '你好,帮我介绍一下什么是大语言模型。', Generated text: ' 当代的大语言模型是通过大规模文本数据集训练的深度学习模型。这些模型通常使用Transformer架构,可以处理和理解自然语言,执行各种语言任务,例如生成文本、回答问题、翻译和编写代码。其中,大规模的预训练过程对于模型性能至关重要,它使模型能够学习到语言的丰富表达和深层次的语义特征。大语言模型在多个领域有着广泛的应用,如智能助手、内容生成、语言理解和对话系统等。它们的发展为自然语言处理和人工智能领域带来了巨大的进步。你如果还有其他问题,欢迎继续提出。'
Prompt: '可以给我将一个有趣的童话故事吗?', Generated text: ' 当然可以。这是一个关于勇气和智慧的故事。\n\n在遥远的王国里,有一座被称为“智慧森林”的神奇森林。传说中,森林深处藏着一个能实现愿望的魔法水晶,但谁能找到它却是个未知数,因为森林里住着一个邪恶的巫师。他用魔法迷宫和各种难题考验着每一个想要接近魔法水晶的旅人。\n\n有一天,一个小男孩,名叫彼得,决定踏上寻找魔法水晶的旅程。他的村庄正遭受干旱之苦,人们的生活日益艰难。他听说魔法水晶拥有改变一切的力量,便带着勇气和决心出发了。\n\n彼得穿过了茂密的树林,跨过了蜿蜒的小河,最终来到了迷宫的入口。他并没有被眼前的迷宫吓倒,而是深呼吸,开始思考。迷宫的墙壁上刻着谜题:“什么越洗越脏?”\n\n彼得想了一会儿,突然灵光一闪,他回答道:“是水。”谜题解开,一道门缓缓打开,显露出一条通往森林深处的小径。\n\n接着,彼得遇到了一个巨大的蜘蛛,它挡在了路中央,要求他回答问题才能通过:“我有八条腿,却永远无法在天空中飞翔,为什么?”\n\n彼得毫不犹豫地回答:“因为你是蜘蛛,而天空属于鸟儿。”蜘蛛满意地点了点头,让开了一条路。\n\n最终,彼得来到了魔法水晶前。他祈求水晶能够帮助他的村庄摆脱干旱,水晶发出耀眼的光芒,一道甘霖之雨从天而降,滋润了大地,村庄的人们欢呼雀跃。\n\n彼得带着智慧和勇气,成为了村庄的英雄,而他的故事也成为了智慧森林中一个永不磨灭的传说。这个故事告诉我们,勇气和智慧是战胜一切困难的关键。只有勇于面对挑战,用智慧解决问题,才能实现心中的愿望。'

从输出结果可以看到几个关键信息

  • 加载 qwen2_70b_awq 模型占用显存为38.7602 GB
  • 单次推理速度:speed input: 0.86 toks/s, output: 24.19 toks/s
  • 推理实际占用显存为
    在这里插入图片描述

参考资料

  • [1] https://www.bilibili.com/video/BV1kx4y1x7bu/?share_source=copy_web&vd_source=79b1ab42a5b1cccc2807bc14de489fa7
  • [2] https://www.jiqizhixin.com/articles/2023-09-25-14
  • [3] https://www.bilibili.com/video/BV1Vp421S7zg/?spm_id_from=333.337.search-card.all.click&vd_source=3f020637bb31d79c22c18d05f6c067c8
  • [4] https://www.bilibili.com/video/BV1BC411z7nH/?share_source=copy_web&vd_source=79b1ab42a5b1cccc2807bc14de489fa7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嗜睡的篠龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值