当前位置: 首页 > news >正文

大模型-vllm的知识点记录-1

1.1 关键点记录

--generation-config

python examples/offline_inference/basic/generate.py --generation-config--generation-config 参数用于指定调用 LLM.get_default_sampling_params() 时加载生成配置的路径。若设置为 'auto',则从模型路径加载生成配置。若设置为文件夹路径,则从指定路径加载配置。若不提供该参数,则使用 vLLM 默认值。

若生成配置中指定了 max_new_tokens,则会在服务器范围内对所有请求的输出 token 数量施加限制。

分布式推理:

确认 Infiniband 是否正常工作的一种方法是运行 vLLM 时设置 NCCL_DEBUG=TRACE 环境变量,例如 NCCL_DEBUG=TRACE vllm serve ... 并检查日志中的 NCCL 版本和使用的网络。如果你在日志中看到 [send] via NET/Socket,这意味着 NCCL 使用原始 TCP Socket,这对于跨节点张量并行来说并不高效。如果你在日志中看到 [send] via NET/IB/GDRDMA,这意味着 NCCL 使用 Infiniband 与 GPU-Direct RDMA,可以高效运行。

metrics:查询终端节点以从服务器获取最新指标

curl http://0.0.0.0:8000/metrics

1.2 VLLM server 参数:

https://vllm.hyper.ai/docs/inference-and-serving/engine_args

usage: vllm serve [-h] [--model MODEL][--task {auto,generate,embedding,embed,classify,score,reward,transcription}][--tokenizer TOKENIZER] [--hf-config-path HF_CONFIG_PATH][--skip-tokenizer-init] [--revision REVISION][--code-revision CODE_REVISION][--tokenizer-revision TOKENIZER_REVISION][--tokenizer-mode {auto,slow,mistral,custom}][--trust-remote-code][--allowed-local-media-path ALLOWED_LOCAL_MEDIA_PATH][--download-dir DOWNLOAD_DIR][--load-format {auto,pt,safetensors,npcache,dummy,tensorizer,sharded_state,gguf,bitsandbytes,mistral,runai_streamer}][--config-format {auto,hf,mistral}][--dtype {auto,half,float16,bfloat16,float,float32}][--kv-cache-dtype {auto,fp8,fp8_e5m2,fp8_e4m3}][--max-model-len MAX_MODEL_LEN][--guided-decoding-backend GUIDED_DECODING_BACKEND][--logits-processor-pattern LOGITS_PROCESSOR_PATTERN][--model-impl {auto,vllm,transformers}][--distributed-executor-backend {ray,mp,uni,external_launcher}][--pipeline-parallel-size PIPELINE_PARALLEL_SIZE][--tensor-parallel-size TENSOR_PARALLEL_SIZE][--enable-expert-parallel][--max-parallel-loading-workers MAX_PARALLEL_LOADING_WORKERS][--ray-workers-use-nsight] [--block-size {8,16,32,64,128}][--enable-prefix-caching | --no-enable-prefix-caching][--disable-sliding-window] [--use-v2-block-manager][--num-lookahead-slots NUM_LOOKAHEAD_SLOTS] [--seed SEED][--swap-space SWAP_SPACE] [--cpu-offload-gb CPU_OFFLOAD_GB][--gpu-memory-utilization GPU_MEMORY_UTILIZATION][--num-gpu-blocks-override NUM_GPU_BLOCKS_OVERRIDE][--max-num-batched-tokens MAX_NUM_BATCHED_TOKENS][--max-num-partial-prefills MAX_NUM_PARTIAL_PREFILLS][--max-long-partial-prefills MAX_LONG_PARTIAL_PREFILLS][--long-prefill-token-threshold LONG_PREFILL_TOKEN_THRESHOLD][--max-num-seqs MAX_NUM_SEQS] [--max-logprobs MAX_LOGPROBS][--disable-log-stats][--quantization {aqlm,awq,deepspeedfp,tpu_int8,fp8,ptpc_fp8,fbgemm_fp8,modelopt,nvfp4,marlin,gguf,gptq_marlin_24,gptq_marlin,awq_marlin,gptq,compressed-tensors,bitsandbytes,qqq,hqq,experts_int8,neuron_quant,ipex,quark,moe_wna16,None}][--rope-scaling ROPE_SCALING] [--rope-theta ROPE_THETA][--hf-overrides HF_OVERRIDES] [--enforce-eager][--max-seq-len-to-capture MAX_SEQ_LEN_TO_CAPTURE][--disable-custom-all-reduce][--tokenizer-pool-size TOKENIZER_POOL_SIZE][--tokenizer-pool-type TOKENIZER_POOL_TYPE][--tokenizer-pool-extra-config TOKENIZER_POOL_EXTRA_CONFIG][--limit-mm-per-prompt LIMIT_MM_PER_PROMPT][--mm-processor-kwargs MM_PROCESSOR_KWARGS][--disable-mm-preprocessor-cache] [--enable-lora][--enable-lora-bias] [--max-loras MAX_LORAS][--max-lora-rank MAX_LORA_RANK][--lora-extra-vocab-size LORA_EXTRA_VOCAB_SIZE][--lora-dtype {auto,float16,bfloat16}][--long-lora-scaling-factors LONG_LORA_SCALING_FACTORS][--max-cpu-loras MAX_CPU_LORAS] [--fully-sharded-loras][--enable-prompt-adapter][--max-prompt-adapters MAX_PROMPT_ADAPTERS][--max-prompt-adapter-token MAX_PROMPT_ADAPTER_TOKEN][--device {auto,cuda,neuron,cpu,openvino,tpu,xpu,hpu}][--num-scheduler-steps NUM_SCHEDULER_STEPS][--use-tqdm-on-load | --no-use-tqdm-on-load][--multi-step-stream-outputs [MULTI_STEP_STREAM_OUTPUTS]][--scheduler-delay-factor SCHEDULER_DELAY_FACTOR][--enable-chunked-prefill [ENABLE_CHUNKED_PREFILL]][--speculative-model SPECULATIVE_MODEL][--speculative-model-quantization {aqlm,awq,deepspeedfp,tpu_int8,fp8,ptpc_fp8,fbgemm_fp8,modelopt,nvfp4,marlin,gguf,gptq_marlin_24,gptq_marlin,awq_marlin,gptq,compressed-tensors,bitsandbytes,qqq,hqq,experts_int8,neuron_quant,ipex,quark,moe_wna16,None}][--num-speculative-tokens NUM_SPECULATIVE_TOKENS][--speculative-disable-mqa-scorer][--speculative-draft-tensor-parallel-size SPECULATIVE_DRAFT_TENSOR_PARALLEL_SIZE][--speculative-max-model-len SPECULATIVE_MAX_MODEL_LEN][--speculative-disable-by-batch-size SPECULATIVE_DISABLE_BY_BATCH_SIZE][--ngram-prompt-lookup-max NGRAM_PROMPT_LOOKUP_MAX][--ngram-prompt-lookup-min NGRAM_PROMPT_LOOKUP_MIN][--spec-decoding-acceptance-method {rejection_sampler,typical_acceptance_sampler}][--typical-acceptance-sampler-posterior-threshold TYPICAL_ACCEPTANCE_SAMPLER_POSTERIOR_THRESHOLD][--typical-acceptance-sampler-posterior-alpha TYPICAL_ACCEPTANCE_SAMPLER_POSTERIOR_ALPHA][--disable-logprobs-during-spec-decoding [DISABLE_LOGPROBS_DURING_SPEC_DECODING]][--model-loader-extra-config MODEL_LOADER_EXTRA_CONFIG][--ignore-patterns IGNORE_PATTERNS][--preemption-mode PREEMPTION_MODE][--served-model-name SERVED_MODEL_NAME [SERVED_MODEL_NAME ...]][--qlora-adapter-name-or-path QLORA_ADAPTER_NAME_OR_PATH][--show-hidden-metrics-for-version SHOW_HIDDEN_METRICS_FOR_VERSION][--otlp-traces-endpoint OTLP_TRACES_ENDPOINT][--collect-detailed-traces COLLECT_DETAILED_TRACES][--disable-async-output-proc][--scheduling-policy {fcfs,priority}][--scheduler-cls SCHEDULER_CLS][--override-neuron-config OVERRIDE_NEURON_CONFIG][--override-pooler-config OVERRIDE_POOLER_CONFIG][--compilation-config COMPILATION_CONFIG][--kv-transfer-config KV_TRANSFER_CONFIG][--worker-cls WORKER_CLS][--worker-extension-cls WORKER_EXTENSION_CLS][--generation-config GENERATION_CONFIG][--override-generation-config OVERRIDE_GENERATION_CONFIG][--enable-sleep-mode] [--calculate-kv-scales][--additional-config ADDITIONAL_CONFIG] [--enable-reasoning][--reasoning-parser {deepseek_r1}]

1.3 性能调优

https://vllm.hyper.ai/docs/performance/optimization

1. V 缓存空间。当有足够的 KV 缓存空间再次可用时,被抢占的请求将重新计算。发生这种情况时,会打印以下警告:

WARNING 05-09 00:49:33 scheduler.py:1057] Sequence group 0 is preempted by PreemptionMode.SWAP mode because there is not enough KV cache space. This can affect the end-to-end performance. Increase gpu_memory_utilization or tensor_parallel_size to provide more KV cache memory. total_cumulative_preemption_cnt=1

虽然这种机制确保了系统的稳健性,但抢占和重新计算可能会对端到端延迟有不利影响。如果您经常遇到 vLLM 引擎的抢占,请考虑以下操作:

  • 增加 gpu_memory_utilization。 vLLM 使用内存的 gpu_memory_utilization% 预分配 GPU 缓存。提高此利用率,您可以提供更多的 KV 缓存空间。

  • 减少 max_num_seqsmax_num_batched_tokens。这可以减少批量中并发请求的数量,从而需要更少的 KV 缓存空间。

  • 增加 tensor_parallel_size。该方法对模型权重进行了分片,因此每个 GPU 都有更多的内存用于 KV 缓存。

  • 增加 pipeline_parallel_size。该方法将模型层分布到多个 GPU,减少每个 GPU 上模型权重所需的内存,从而间接为 KV 缓存释放更多内存。

还可以通过 vLLM 公开的 Prometheus 指标来监控抢占请求的数量。此外,您可以通过设置 disable_log_stats=False 来记录抢占请求的累积数量。

2. 分块预填充

vLLM 支持实验性功能——分块预填充。分块预填充允许将大预填充分块成更小的块,并将它们与解码请求一起批处理。

您可以通过在命令行中指定 --enable-chunked-prefill 或在 LLM 构造函数中设置 enable_chunked_prefill=True 来启用该功能。

llm = LLM(model="meta-llama/Llama-2-7b-hf", enable_chunked_prefill=True) # 设置 max_num_batched_tokens 来调整性能。# 注意:2048 是分块预填充的 max_num_batched_tokens 默认值。 
llm = LLM(model="meta-llama/Llama-2-7b-hf", enable_chunked_prefill=True, max_num_batched_tokens=2048)

默认情况下,vLLM 调度程序会优先考虑预填充,并且不会将预填充和解码分批处理到同一批次。此策略优化了 TTFT(time to the first token,第一个 token 的时间),但会导致 ITL(inter token latency,token 间延迟)变慢和 GPU 利用率低下。

一旦启用分块预填充,策略就会更改为优先考虑解码请求在安排任何预填充之前,它会将所有待处理的解码请求分批处理。当有可用的 token_budget (max_num_batched_tokens) 时,它会安排待处理的预填充。如果最后一个待处理的预填充请求无法放入 max_num_batched_tokens,则会将其分块。

该策略有两个好处:

  • 它改进了 ITL 和生成解码,因为解码请求更优先。

  • 它通过将计算绑定 (预填充) 和内存绑定 (解码) 请求定位到同一批次,可以实现更好的 GPU 利用率。

可以通过更改 max_num_batched_tokens 调整性能。默认情况下,它设置为 512,在初始基准测试中,它在 A100 上具有最佳 ITL(llama 70B 和 mixtral 8x22B)。较小的 max_num_batched_tokens 可以实现更好的 ITL,因为中断解码的预填充较少。较高的 max_num_batched_tokens 可以实现更好的 TTFT,因为您可以在批次中添加更多预填充。

  • 如果 max_num_batched_tokensmax_model_len 相同,则几乎等同于默认调度策略 (但是它仍然优先考虑解码)。

  • 请注意, max_num_batched_tokens 的默认值 (512) 针对 ITL 进行了优化,并且它的吞吐量可能低于默认调度程序。

建议您设置 max_num_batched_tokens > 2048 提高吞吐量。

http://www.dtcms.com/a/577764.html

相关文章:

  • 哪些网站是用织梦做的php做的直播网站
  • 为云原生加速:深入解析PoleFS分布式缓存系统BlobCache
  • xml方式实现AOP
  • XML签名
  • 云原生基石的试金石:基于 openEuler 部署 Docker 与 Nginx 的全景实录
  • 浏阳网站建设卷云网络南和网站seo
  • postgresql pg_upgrade源码阅读--doing
  • oracle导出 导入
  • 如何自己做个简单网站wordpress 中国提速
  • 程序安装包在ubuntu安装教程,以opencv安装为例
  • Linux 服务器内存监控与优化指南
  • APP应用怎么选择游戏盾
  • 医院网站建设联系方式为企业做一件小事
  • 天津建设网投标网站群晖 wordpress 怎么映射到外网
  • HCIP AI 认证含金量高吗?报考条件是什么?
  • WebActiveX浅析
  • 普中51单片机学习笔记-点亮第一个LED
  • 光子精密QM系列闪测仪——为精准而生,为智造而来
  • docker 下搭建 nacos
  • 【stm32简单外设篇】- EC11 旋转编码器(带按键)
  • R语言机器学习算法实战系列(三十)多组ROC曲线分析教程
  • Linux使用tomcat发布vue打包的dist或html
  • 网站设计大概在什么价位营销型网站设计稿
  • map和set,咕咕咕!
  • .net 面试题目
  • 多光谱图像融合:IHS、PCA与小波变换的MATLAB实现
  • Responder工具在内网渗透中的应用
  • 公积金网站怎么做增员做一个网站的价格
  • 如何解析网站十堰响应式网站建设
  • 海光K100对决NVIDIA A800,AI算力谁更强?