想象你开了一家米其林餐厅,只有一位超级大厨,却没有调度系统。客人一批批涌进来,每位客人从点菜到吃完,厨房都只服务他一个人:菜做完了上一桌,才开始下一桌,锅灶在等待中一次次空烧,客人在位上干等,翻台率惨不忍睹。后来你请来一位“中央厨房调度台”——它把所有客人的点单揉在一起,让大厨同时翻炒几道菜,谁先熟先出锅,空出来的灶位立刻补上新单;它还允许先上一道开胃菜让客人边吃边等主菜。这位调度台,就是本文的主角 TGI(Text Generation Inference),HuggingFace 开源的文本生成推理服务框架。整篇文章,我们用“中央厨房”这条主线,带你从零看懂 TGI 为什么能提升大模型服务的并发、延迟与成本表现。

岗位关联

学完本文,你能彻底看懂 TGI 的架构与核心机制,轻松把 HuggingFace 大模型部署成高并发生产服务,在从后端转向 AI 工程化时占据主动权。

目录
  1. 可视化演示
  2. 框架定位
  3. 核心机制
  4. 性能优化
  5. 部署实践
  6. 生产运维
  7. 生态协同
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示TGI连续批处理动态调度请求的过程,以及路由器-队列-分片的服务架构数据流

本节配有交互动效(进入视口后自动加载,约 3KB)。

TGI: 连续批处理动态调度 请求动态加入批次,无需等待整批完成 完成的请求立即离开,新请求即时填入 throughput = N \u00D7 tokens/s 连续批处理显著提升GPU利用率

框架定位

想象你开了一家米其林餐厅,没有调度系统时,后厨忙成一片:每一位客人从点单到吃完,厨师只服务他一个人,做完一桌才开始下一桌,锅灶在等待中空烧,客人在位上干等。TGI(Text Generation Inference)就是 HuggingFace 为“大模型后厨”打造的中央调度台,它把成百上千个客人的请求安排得明明白白,让唯一的“超级大厨”(GPU)时刻在炒菜。

TGI 是 HuggingFace 开源的文本生成推理服务框架。所谓推理,就是模型已经训练好、出了师,只负责实际回答问题和生成文本;所谓服务,就是把大模型封装成一个可以随时通过网络接口调用的“餐厅”。它的设计目标有三个:高并发(同时服务很多客人)、低首字延迟(第一道菜尽快上)、易部署(一键支起后厨)。它天然嵌入 HuggingFace 生态:模型地址填一个 HF Hub 上的模型 ID,框架自动下载、加载、开火,无需手工搬运文件。

要衡量一家“推理餐厅”的运营水平,最核心的指标是吞吐量——单位时间内完成多少桌客人的完整请求:

吞吐量就像餐厅翻台率:每完成一桌客人,桌椅就能腾出来接待下一位。TGI 的一切优化——连续批处理、张量并行、量化——最终都是为了让这个分子更大、分母更小。理解了这一点,后面的每一节都是在拆解“如何翻台如飞”。

吞吐量=N完成Δt\displaystyle \text{吞吐量} = \frac{N_{\text{完成}}}{\Delta t}
吞吐量公式:就像餐厅的翻台率,分子是这段时间里真正吃完走人的桌数,分母是营业时长,两者相除就是单位时间的接待能力。
  1. 分子-完成的请求数表示在一个统计窗口内,服务端成功生成完整回答并返回给客户的请求总数,它是“翻台”的直接成果
    N完成N_{\text{完成}}
  2. 分母-时间窗口表示统计吞吐量所跨越的时长,通常以秒或分钟为单位,时间越短越能反映瞬时峰值能力
    Δt\Delta t
  3. 比值-吞吐速率两者相除得到单位时间完成的请求数,吞吐量越高,说明同一份 GPU 算力接待的客人越多
    吞吐量=N完成Δt\text{吞吐量} = \frac{N_{\text{完成}}}{\Delta t}

核心机制

后厨最大的瓶颈不是菜做不好,而是空等。传统餐厅的做法是:一桌客人的所有菜做完,厨师才开始做下一桌。于是每道菜之间的间隙,锅是冷的。TGI 的连续批处理(Continuous Batching)让厨师一次给多桌同时开火,谁的一道菜先熟就先出锅,同时立刻把空出来的灶位让给排队的客人——GPU 永远在忙。

流式输出则是“先上一道开胃菜”:模型每生成一个 token(一个词或半个词),服务端立刻通过 SSE(Server-Sent Events)把这块内容推给客户端,用户看到的是“一个字一个字往外蹦”的生成过程,而不是枯等十几秒后一次性看到长文。前缀缓存则是“把常点的菜提前备好”:许多请求共享相同的系统提示词,TGI 缓存这些前缀的 KV 状态,后续请求直接复用,省去重复计算,排队时间显著缩短。

连续批处理到底省在哪?可以用 GPU 利用率这个公式概括:

传统动态批处理像“凑齐一桌才开席”,连续批处理则是“有人离席就补位”,翻台率自然天差地别。配合流式输出的“先上开胃菜”和前缀缓存的“提前备料”,中央厨房的每一口锅都冒着热气。

U=N活跃请求N最大并行\displaystyle U = \frac{N_{\text{活跃请求}}}{N_{\text{最大并行}}}
利用率公式:好比后厨同时开火的锅数占全部锅位的比例,比例越高,说明厨师和灶台越没有闲着。
  1. 分子-活跃请求数当前正在生成 token、尚未结束的请求数量,它们占着厨房的锅位在做菜
    N活跃请求N_{\text{活跃请求}}
  2. 分母-最大并行数GPU 显存和算力能够同时容纳的请求上限,它由模型大小、显存容量和批处理参数共同决定
    N最大并行N_{\text{最大并行}}
  3. 比值-忙碌程度两者相除得到 GPU 的忙碌比例,越接近 1 说明空转越少,连续批处理的目标就是把这个比值持续顶高
    U=N活跃请求N最大并行U = \frac{N_{\text{活跃请求}}}{N_{\text{最大并行}}}

性能优化

一个超级大厨忙不过来怎么办?两种思路:一是多请几位厨师,每人负责一道工序——这就是张量并行;二是用平价替代食材降低成本——这就是量化。张量并行把模型的权重矩阵切分到多张 GPU 上,每张卡负责一部分计算,通过高速互联交换中间结果,相当于把一道复杂的佛跳墙拆成四个灶台同时炖。量化则是把模型参数的位宽从 fp16(16 位浮点)压缩到 int8 甚至 int4,显存占用按位宽等比例缩小,推理速度随之提升。TGI 支持 awq、gptq、eetq 等多种量化方式,启动时用一个 --quantize 参数就能一键开启。

动态批处理(Dynamic Batching)则像餐厅按客流高峰动态排班:TGI 在运行时实时聚合到达的请求,把当前可并行计算的 token 全部塞进一个 batch;当有请求生成完最后一个 token,就把它从 batch 中移除,并把新请求加入。请求不用再等“整批结束”,服务端有了更强的吞吐弹性。

量化为什么能省钱?看显存估算公式:

平价食材加上流水线合作,让原本只有土豪餐厅才养得起的招牌菜,寻常人家也能端上桌。张量并行解决“装不下”,量化解决“买不起”,动态批处理解决“忙不均”,三者配合,一家 AI 餐厅就能用有限的灶台服务更多客人。

M推理≈P×b8\displaystyle M_{\text{推理}} \approx \frac{P \times b}{8}
显存估算公式:模型权重占用的显存约等于参数量乘以每个参数占用的比特数,再除以 8 换算成字节。位宽减半,显存直接减半。
  1. 分子-参数量与位宽的乘积把每个参数占用的比特数乘上总参数量,得到全部权重需要的总比特数
    P×bP \times b
  2. 除以 8 得到字节数计算机里 1 字节等于 8 比特,除以 8 后得到以字节为单位的显存占用,方便与显卡容量对比
    P×b8\frac{P \times b}{8}
  3. 近似符号-只算大头公式只估算权重主占用,没算 KV 缓存和激活显存,但足以量化决策时看清量化的收益
    M推理≈P×b8M_{\text{推理}} \approx \frac{P \times b}{8}

部署实践

支起这套中央厨房有多简单?得益于 Docker 镜像,TGI 像“即插即用的后厨集装箱”。一条 docker run 命令就能把服务拉起来:指定模型 ID、分配显存、设置最大批处理 token 数、开启量化,然后厨房就轰隆隆地开始运转了。

启动后,TGI 暴露 REST 和 gRPC 接口。模型加载通常自动完成,可以先调用 /info 确认模型就绪,随后通过 /generate 拿到完整回答,或通过 /generate_stream 拿到流式输出。对调用方来说,只需一个 HTTP 请求,厨房就会把做好的菜端出来。

部署时最怕什么?并发开太多,显存爆了,整个容器直接 OOM 重启。估算一个服务节点最多能同时接待多少并发请求,可以用这个公式:

这个公式就像后厨的“锅位预算”:灶台总数定了,心里就有数同时开几口锅,不会把厨房挤爆。部署 TGI 从来不是玄学,而是一次有预算的开门营业。

Cmax=MGPU−M基础M每份\displaystyle C_{\text{max}} = \frac{M_{\text{GPU}} - M_{\text{基础}}}{M_{\text{每份}}}
并发容量公式:拿总显存减去模型和框架的固定开销,再除以每个并发请求的平均显存开销,就得到可以同时接待的上限。
  1. 分子-可用显存显卡总显存减去模型权重、KV 缓存的固定部分和框架常驻内存,得到能灵活分配给各请求的“浮动灶台”
    MGPU−M基础M_{\text{GPU}} - M_{\text{基础}}
  2. 分母-每份开销每个并发请求在推理过程中占用的平均显存,包括它自己的激活值和 KV 缓存增量
    M每份M_{\text{每份}}
  3. 比值-最大并发数两者相除得到服务节点的并发容量上限,超过它就可能发生显存溢出,低于它则 GPU 空转
    Cmax=MGPU−M基础M每份C_{\text{max}} = \frac{M_{\text{GPU}} - M_{\text{基础}}}{M_{\text{每份}}}
bash7 行
docker run --gpus all --shm-size 1g \  -p 8080:80 \  ghcr.io/huggingface/text-generation-inference:latest \  --model-id Qwen/Qwen2.5-7B-Instruct \  --max-batch-tokens 4096 \  --num-shard 1 \  --quantize awq

生产运维

餐厅开张只是第一步,难的是让翻台率长期保持在高位。生产环境里,后端工程师要用 nvidia-smi 或 TGI 内置的 Prometheus 监控盯住三件事:显存占用、GPU 利用率、排队请求数。显存是硬约束:批处理开太大会 OOM,开太小 GPU 会饿肚子,所以要经常根据监控曲线调整 --max-concurrent-requests 和 --max-batch-prefill-tokens 两个阀门,让火力刚好覆盖客流。

故障恢复方面,TGI 提供 /health 健康检查端点,配合 Kubernetes 的探针做自动重启;当单个副本 OOM 或崩溃时,负载均衡会自动把流量切换到其他副本。滚动更新时先扩容新副本再摘除旧副本,可以保证服务始终不中断,客人几乎无感。

这一切努力都指向同一个数学目标——可用性。可用性描述服务保持可用的水平:

可用性不是玄学,而是每一次故障都能快速拉闸、换灶、复业的结果。监控让你看得见风险,健康检查让你能自动止损,配置调优让你在稳定与效率之间找到平衡——这是中央厨房长期盈利的底气。

A=TupTup+Tdown\displaystyle A = \frac{T_{\text{up}}}{T_{\text{up}} + T_{\text{down}}}
可用性公式:正常运行时间占“正常运行加故障停机”总时间的比例。99.9% 的可用性,意味着一年里只有约 8.76 小时在修灶台。
  1. 分子-正常运行时间服务无故障、可正常接待请求的累计时长,它衡量“开门营业”的时间
    TupT_{\text{up}}
  2. 分母-总时间正常运行时间加上故障停机时间,代表统计周期内的全部营业时长
    Tup+TdownT_{\text{up}} + T_{\text{down}}
  3. 比值-可用性水平两者相除得到 0 到 1 之间的小数,乘以 100% 就是常见的“几个九”指标
    A=TupTup+TdownA = \frac{T_{\text{up}}}{T_{\text{up}} + T_{\text{down}}}

生态协同

TGI 之所以受欢迎,还因为它自带“中央厨房的供应链”。它和 HuggingFace Hub 无缝集成:--model-id 填上模型 ID,自动下载权重和 tokenizer,无需手动备份;也天然支持 safetensors 格式的并行加载,多卡场景加载速度大幅提升。对调用方来说,TGI 2.0 起支持 OpenAI 兼容的 /v1/chat/completions 接口,这意味着你不需要改写任何新代码——原来接 OpenAI 的客户端,直接把 base_url 换成 TGI 地址就能跑,迁移成本几乎为零。

监控方面,TGI 暴露 /metrics 给 Prometheus,提供 token 生成速率、排队长度、prefill 和 decode 耗时等丰富指标;也支持请求日志和链路追踪。这样你就可以在 Grafana 上直观看到“每道菜耗时多久、哪口锅最忙”,为调参提供数据依据。

流式场景下,用户感知的端到端延迟由两部分组成:等待第一个 token 的时间和后续每个 token 间隔的时间:

好的中央厨房不仅要菜好吃,还要能和所有外卖平台、食材供应商、质检系统无缝互通。TGI 的生态协同,让它在 HuggingFace 的供应链里如鱼得水,也让工程师的接入成本降到最低。

T总=T首token+(Ntoken−1)×T单token\displaystyle T_{\text{总}} = T_{\text{首token}} + (N_{\text{token}} - 1) \times T_{\text{单token}}
端到端延迟公式:总耗时等于首字等待时间加上后续每个字生成时间的总和。流式输出优化的正是首字时间,让客人先尝到第一口菜。
  1. 首字延迟从请求发出到收到第一个 token 的时间,它决定用户“有没有吃到第一口菜”,是体感的核心
    T首tokenT_{\text{首token}}
  2. 剩余 token 数量总共要生成的 token 数减去已经算过的第一个,得到后续还需要生成的个数
    Ntoken−1N_{\text{token}} - 1
  3. 乘单字时间并求和每个 token 的平均生成时间乘以剩余数量,再加回首字延迟,就是完整的端到端耗时
    T总=T首token+(Ntoken−1)×T单tokenT_{\text{总}} = T_{\text{首token}} + (N_{\text{token}} - 1) \times T_{\text{单token}}

AI 应用场景

智能客服大模型服务

阶段:模型部署与推理

解决的问题:传统客服系统依赖规则库,无法处理开放问题;直接部署大模型又面临并发不足、GPU 空转的尴尬。TGI 的连续批处理让大量客服请求同时被处理,流式输出让回复“边说边出”,用户不再对着转圈等待。

具体案例:某电商平台把微调后的 7B 模型部署为 TGI 服务,使用 /generate_stream 对接前端聊天窗口。高峰时段 500 并发,95% 首 token 延迟低于 1.5 秒,客服人力成本下降约四成。

企业内部知识库助手

阶段:推理性能优化

解决的问题:大量员工提问时共享同一段系统提示词和文档前缀,传统方案每次都完整重复计算,浪费大量算力。TGI 的前缀缓存让相同前缀的 KV 状态直接复用,重复劳动被消除。

具体案例:某企业部署 RAG 助手,系统提示词固定为 800 token,数百员工提问命中前缀缓存后,prefill 阶段耗时下降 60%,GPU 占用率明显降低。

低成本大模型服务化

阶段:推理成本压降

解决的问题:GPU 资源昂贵,用 fp16 原样部署大模型成本过高。通过 AWQ 量化配合动态批处理,在有限显卡上服务大模型成为可能。

具体案例:一家 AI 公司在两张 A10 显卡上量化部署 32B 模型,通过 TGI 的动态批处理支撑 200+ 并发问答请求,单次推理成本降至原来的四分之一。

Python 演示

python37 行
import jsonimport requests TGI_URL = "http://127.0.0.1:8080"  def stream_generate(prompt, max_new_tokens=64):    payload = {        "inputs": prompt,        "parameters": {            "max_new_tokens": max_new_tokens,            "stop": ["\n"]        }    }    with requests.post(        TGI_URL + "/generate_stream",        json=payload,        stream=True,        timeout=60    ) as resp:        for line in resp.iter_lines():            if not line:                continue            line = line.decode("utf-8")            if not line.startswith("data:"):                continue            data = line[len("data:"):].strip()            if data == "[DONE]":                break            token = json.loads(data).get("token", {}).get("text", "")            if token:                print(token, end="", flush=True)  if __name__ == "__main__":    prompt = "用一句话介绍西湖:"    stream_generate(prompt)
目的:该脚本向 TGI 服务的流式端点发送一个生成请求,并逐 token 打印模型回复,呈现“打字机”效果,是接入 TGI 的最简客户端模板。
  1. payload = {...}定义请求体,告诉 TGI 要生成什么、最多生成多少 token、遇到换行就停止。
  2. with requests.post(...)建立流式连接,stream=True 表示逐块接收响应而不是等全部完成。
  3. for line in resp.iter_lines():按行读取 SSE 数据流,每行是一次推送。
  4. if not line.startswith("data:"):SSE 协议中真正的数据行以 data: 开头,其余是注释或空行,直接跳过。
  5. data = line[len("data:"):].strip()去掉 data: 前缀,留下 JSON 字符串。
  6. if data == "[DONE]":这是 TGI 发出的流结束哨兵,收到后终止循环。
  7. token = json.loads(data).get("token", {}).get("text", "")从 JSON 中取出当前生成的 token 文本。
  8. print(token, end="", flush=True)不换行打印并立即刷新缓冲区,形成逐字输出的效果。

常见误区

误区TGI 名字里带“训练”(Training 的感觉),应该也能训模型吧?我能不能把微调脚本直接丢进去跑?

正解TGI 只是餐厅负责出菜的窗口,不做烹饪教学。它只做推理服务,训练要用 TRL、DeepSpeed 等专门框架。把训练任务塞给 TGI,只会得到“不支持的指令”报错。后厨做菜和厨师学校培训是两码事。

为何常见:TGI 全称 Text Generation Inference 中的 Inference 是推理而非训练,但初学者容易被名字误导。

误区批处理能提高吞吐,那我把 max-batch-tokens 拉到十万,一锅炒所有请求,肯定最快。

正解批处理越大,每个请求需要的 KV 缓存和激活显存越多,超过显存上限立刻 OOM,整个服务崩溃重启。这就像把几百个客人全塞进一个包间,挤到连上菜都走不过去。正确做法是根据显存监控和并发容量公式逐步调参,留出安全余量。

为何常见:直觉上“批量=效率”,却忽略了显存是硬约束,锅再多也得厨房装得下。

误区int8/int4 精度损失那么大,模型肯定变傻,生产环境绝对不能用。

正解对 7B 以上模型,AWQ/GPTQ 校准后的质量损失非常小,而显存节省、吞吐提升立竿见影。就像平价食材只要调味到位,九成客人吃不出差别。是否使用量化,应该用任务指标实测评估,而不是拍脑袋拒绝。

为何常见:误把量化和“粗暴截断小数”画等号,不知道量化有校准过程,专门保留了对推理最关键的权重分布。

误区SSE 每次只推一个 token,网络往返次数暴增,服务吞吐肯定明显下降。

正解模型的计算量完全没变,SSE 只是把输出切成小块推送,连续批处理照常进行。这就像后厨做菜速度不变,只是传菜员分几次端上桌,客人体验更好,厨房效率也没损失。

为何常见:把“网络传输方式”和“模型计算方式”混为一谈,忽略了吞吐瓶颈在 GPU 计算而非网络推送。

误区TGI 看起来这么“重”,一定至少 4 张 A100 才能跑起来,小团队根本玩不起。

正解TGI 支持单卡运行,甚至支持 CPU 推理;7B 小模型在普通游戏显卡上也能起服务。决定用几张卡的是模型大小和并发目标,而不是框架本身的门槛。餐厅可以只有一口锅,慢一点,但照样营业。

为何常见:看多了大模型多卡部署教程,产生“框架很贵”的错觉,其实 TGI 对资源要求非常弹性。

面试题

Q1. TGI 的中文全称是什么?

单选题 · easy

  • A.文本生成推理服务← 正确答案
  • B.张量图形推理引擎
  • C.技术图形解释系统
  • D.令牌生成推理器

答案:A。TGI 全称 Text Generation Inference,即文本生成推理服务,HuggingFace 开源,专为高并发文本生成设计。B 混淆了张量并行,C 和 D 属于杜撰项。它像中央厨房调度台一样,只负责把训练好的模型高效地“做菜上桌”。

Q2. 与传统的动态批处理相比,连续批处理最大的改进是什么?

单选题 · mid

  • A.请求结束立即腾出位置接纳新请求← 正确答案
  • B.把若干请求拼成大矩阵一起计算
  • C.允许用户按优先级插入执行队列
  • D.用多张显卡并行执行同一请求

答案:A。动态批处理要让整批请求全部结束后才释放资源;连续批处理是“有人离席就补位”,单个请求生成完最后一个 token 立刻移出批次并放入新请求,GPU 不再空转。B 是批处理共有的手段,C 和 D 是其他优化方向,不是连续批处理的核心。

Q3. TGI 的流式输出采用哪种推送机制?

单选题 · easy

  • A.SSE 服务端推送事件← 正确答案
  • B.WebSocket 全双工通道
  • C.长轮询 HTTP 请求
  • D.UDP 用户数据报文

答案:A。TGI 的 /generate_stream 端点基于 SSE(Server-Sent Events),服务端把每个 token 作为 data 行推给客户端,语义简单、无需额外握手,前端用 fetch 即可消费。WebSocket 虽也是全双工但 TGI 默认不依赖它,长轮询和 UDP 更不是推理服务的常规选择。

Q4. 在 24GB 显存的显卡上部署 7B 模型推理,下列哪种方式最可能显著降低显存占用?

单选题 · mid

  • A.采用 AWQ 量化后加载模型← 正确答案
  • B.调大 max-new-tokens 参数值
  • C.把 batch size 无限调大
  • D.换用参数量更大的模型

答案:A。AWQ 量化把权重位宽从 fp16 降到 int4/int8,显存直接减半以上,7B 模型在 24GB 卡上游刃有余。增大 max-new-tokens 会增加 KV 缓存,batch 过大会 OOM,换更大模型只会更占显存,三者都背道而驰。

Q5. 某模型 fp16 权重占用 14GB,改换成 int8 量化后权重约为多少?

单选题 · hard

  • A.约 7GB← 正确答案
  • B.约 14GB
  • C.约 3.5GB
  • D.约 28GB

答案:A。按显存估算公式 M ≈ P×b/8,位宽从 16 比特降到 8 比特,占用减半,14GB 变成约 7GB。C 是继续降到 int4 的结果,D 是升到 fp32 的结果,B 是没做量化的原值。

Q6. TGI 服务启动后,想一次性获得完整回答,应该调用哪个 REST 端点?

单选题 · mid

  • A./generate 完整回答← 正确答案
  • B./generate_stream 流式
  • C./info 模型信息查询
  • D./metrics 监控指标收集

答案:A。/generate 是同步端点,模型生成完整个回答后一次性返回;/generate_stream 是流式端点,逐 token 推送。B 适合打字机效果,C 用于查模型状态,D 是 Prometheus 抓指标用的,都不是“一次拿完整结果”的答案。

Q7. 下面哪些是 TGI 提升推理吞吐的核心手段?

多选题 · mid

  • A.连续批处理机制← 正确答案
  • B.前缀缓存复用← 正确答案
  • C.模型量化压缩← 正确答案
  • D.训练时数据增强

答案:ABC。连续批处理让 GPU 不空转,前缀缓存免除重复计算,量化降低显存和带宽压力,三者共同提升吞吐。数据增强属于训练阶段的数据手段,与推理服务框架 TGI 无关,属于混淆项。

Q8. 关于 TGI 与 HuggingFace 生态的协同,下列说法正确的有哪些?

多选题 · hard

  • A.自动从 Hub 下载模型权重← 正确答案
  • B.支持 safetensors 并行加载← 正确答案
  • C.兼容 OpenAI 风格的接口← 正确答案
  • D.内置完整的模型微调模块

答案:ABC。TGI 填模型 ID 后自动从 Hub 拉权重,支持 safetensors 多卡并行加载,2.0 起提供 OpenAI 兼容接口,迁移成本极低。D 错在 TGI 只推理不训练,微调不是它的职责,就像中央厨房不做烹饪教学。

Q9. 生产环境中判断 TGI 容器是否存活,应该调用哪个端点?

单选题 · easy

  • A./health 健康检查接口← 正确答案
  • B./generate 推理解析
  • C./metrics 监控指标采集
  • D./info 模型信息查询

答案:A。/health 专门用于健康检查,配合 K8s 探针探测,服务无响应就自动重启。B 是生成接口,C 是给 Prometheus 的指标接口,D 是查询模型信息的接口,都无法承担存活探针的职责。

Q10. 下列哪些参数会影响 TGI 服务的并发容量和显存占用?

多选题 · extreme

  • A.max-batch-tokens 批处理上限← 正确答案
  • B.max-concurrent-requests 并发上限← 正确答案
  • C.num-shard 显卡分片数量← 正确答案
  • D.max-input 输入长度限制

答案:ABC。max-batch-tokens 决定单次批处理最多容纳的 token 数,直接影响显存和吞吐;max-concurrent-requests 限制同时处理的请求数,是并发闸门;num-shard 决定如何把模型切分到多张卡,影响单卡显存水位。D 只限制单请求输入长度,不直接决定整体并发容量。