
推理引擎大模型【免费下载链接】FlexGenRunning large language models on a single GPU for throughput-oriented scenarios.项目地址https://gitcode.com/gh_mirrors/fl/FlexGen点击查看免费下载本文基于 FlexGen 仓库中flexgen/apps/目录下的应用文档与配套源码系统讲解如何在单 GPU 上利用 FlexGen 运行 OPT 系列大模型完成三类典型任务交互式文本补全Completion、数据清洗Data Wrangling含实体匹配、数据补全与错误检测以及 HELM 大规模评测基准如 MMLU 场景。读完本文你将掌握三个可运行的入口脚本completion.py、data_wrangle_run.py、helm_run.py的完整命令行参数、FlexGen 六元组 offload 策略--percent的配置方法以及如何在 16GB 显存等受限硬件上跑通 6.7B/30B/175B 级模型并解读其吞吐数据。一、apps 目录与核心概念速览flexgen/apps/是 FlexGen 面向实际应用场景提供的开箱即用示例集合目录结构如下flexgen/apps/completion.py单机文本补全入口演示用 OPT 模型完成句子flexgen/apps/helm_run.pyHELM 评测场景执行器可跑 MMLU、WikiFact、XSUM 等大规模评测flexgen/apps/data_wrangle/数据清洗任务实体匹配 EM、数据补全 DI、错误检测 ED的完整实现与基准脚本flexgen/apps/helm_fast_test.py 与 flexgen/apps/helm_passed_30b.shHELM 场景清单与批量跑测脚本。在深入各场景前必须先理解 FlexGen 的核心编程模型这些概念在三个入口脚本中被反复使用均来自 flexgen/flex_opt.pyExecutionEnv执行环境通过ExecutionEnv.create(offload_dir)创建负责管理 CPU/GPU/NVMe SSD 之间的张量搬运线程脚本结束后需调用env.close_copy_threads()关闭拷贝线程见 completion.py。OptLMOPT 模型封装OptLM(model_name, env, path, policy)加载模型--path指向权重缓存目录~/opt_weights若没有缓存权重FlexGen 会自动从 HuggingFace 下载。Policyoffload 策略对象其核心字段是六元组百分比percent在 flex_opt.py 中定义为权重在 GPU/CPU、注意力缓存KV cache在 GPU/CPU、激活值在 GPU/CPU 的占比剩余比例100 - w_gpu - w_cpu自动落到 NVMe 磁盘w_disk_percent见 flex_opt.py。量化压缩--compress-weight/--compress-cache分别对权重和 KV 缓存做分组量化默认配置为 4-bit、group_size64权重按group_dim0分组、缓存按group_dim2分组非对称量化可在 completion.py 与 helm_run.py 中看到一致的构造方式。三个脚本都通过argparse暴露相同的一组 FlexGen 参数这是本文所有命令的基础参数默认值含义--modelfacebook/opt-6.7bcompletion/facebook/opt-1.3bhelm、data_wrangle模型名--path~/opt_weights权重路径无缓存时自动下载--offload-dir~/flexgen_offload_dir张量 offload 目录--percent100 0 100 0 100 0六个数权重 GPU%、权重 CPU%、缓存 GPU%、缓存 CPU%、激活 GPU%、激活 CPU%--pin-weightTrue是否将 CPU 权重固定在不可换页的内存中--cpu-cache-compute关闭是否在 CPU 上计算注意力缓存--compress-weight关闭是否对权重做 4-bit 量化压缩--compress-cache关闭是否对 KV 缓存做 4-bit 量化压缩--gpu-batch-size16单轮 GPU batch 大小--num-gpu-batches1GPU batch 批次数二者乘积即有效批量二、场景一Completion 文本补全flexgen/apps/README.md 给出的首个示例是文本补全在一台拥有32GB 系统内存 24GB 显存的机器上直接跑 OPT-30B 与 OPT-66Bpython completion.py --model facebook/opt-30b --percent 100 0 100 0 100 0 --compress-weight python completion.py --model facebook/opt-66b --percent 50 10 100 0 100 0 --compress-weight两个命令的差异恰好演示了 offload 策略的调整思路OPT-30B约 60GB 权重显存足够时优先使用100 0 100 0 100 0即权重、缓存、激活全部放 GPU配合--compress-weight将权重压到 4-bit进一步降低显存占用OPT-66B约 132GB 权重单卡显存已不足以全量放权重因此改用50 10 100 0 100 0——50% 权重放 GPU、10% 放 CPU、剩余 40% 由 FlexGen 自动 offload 到 NVMe 磁盘同时保持缓存与激活 100% 在 GPU 上保证推理吞吐。从 completion.py 源码可以看到脚本内置了两组 QA 风格的示例 prompt如2004 年奥运会在哪里举办从文本中抽取机场代码并做了以下配置使用AutoTokenizer.from_pretrained(facebook/opt-30b, padding_sideleft)加载左填充分词器关闭 BOS tokentokenizer.add_bos_token False以换行符\n的 token id 作为生成停止符stop tokenizer(\n).input_ids[0]将 prompt 统一 padding 到 128 长度后调用model.generate(input_ids, do_sampleTrue, temperature0.7, max_new_tokens32, stopstop)见 completion.py。运行后脚本会打印首尾两条生成结果与分隔线最后调用env.close_copy_threads()优雅关闭 offload 线程。该脚本是最轻量的 FlexGen 上手路径改--model即可在不同规模的 OPT 模型间切换--percent则负责按你的显存/内存比例分配负载。三、场景二Data Wrangling 数据清洗任务3.1 任务背景与安装FlexGen 对数据清洗任务的支持实现了 HazyResearch 的 fm_data_tasks 项目思路覆盖三类任务详见 flexgen/apps/data_wrangle/README.mdEntity MatchEM实体匹配判断两条记录是否指向同一实体如 Fodors-Zagats、Beer、iTunes-Amazon、Walmart-Amazon、Amazon-Google、DBLP-ACM、DBLP-GoogleScholar 等 7 个数据集Data ImputationDI数据补全根据已有字段补全缺失属性值如 Restaurant补 city与 Buy补 manufacturerError DetectionED错误检测发现数据中的拼写/取值错误如 Hospital 数据集。安装分两步对应 install.shcd data_wrangle bash install脚本会安装pandas1.4.2、sentence-transformers2.2.2、rich12.2.0、pyarrow7.0.0等依赖并创建data/目录、从fm-data-tasks的公开存储桶下载datasets.tar.gz后解压。数据集目录与任务的映射关系定义在 flexgen/apps/data_wrangle/utils/constants.py如entity_matching/structured/Beer→entity_matching各数据集要丢弃的列、补全列也集中在此文件中便于按需定制。3.2 单查询与批量查询两种运行模式主程序 flexgen/apps/data_wrangle/data_wrangle_run.py 通过--batch_run标志切换两种模式见 data_wrangle_run.py单查询模式single_query_test逐条构造 prompt 并调用model.generate用于验证结果正确性。仓库提供了快速验证脚本bash test_single_query_case.sh验证 Restaurant 数据补全任务在 OPT-6.7B 上的输出bash test_single_query_all_opt6.7b.sh对 OPT-6.7B 跑完所有任务的单条样例prompt 统一 pad 到 32 长度。批量查询模式batch_query_test一次性处理全部样本同时记录总耗时与吞吐用于测试 FlexGen 的吞吐性能bash test_batch_query_case.sh验证 Restaurant 任务批量模式bash test_batch_query_all_opt6.7b.sh/test_batch_query_all_opt30b.sh/test_batch_query_all_opt175b.sh分别在三种规模模型上跑完整测试集。以 test_batch_query_all_opt6.7b.sh 中的实体匹配任务为例Fodors-Zagatspython3 ./data_wrangle_run.py \ --num_run 189 --num_trials 1 --nan_tok --do_test \ --sample_method manual \ --data_dir data/datasets/entity_matching/structured/Fodors-Zagats \ --batch_run --pad-to-seq-len 744 --model facebook/opt-6.7b \ --percent 100 0 100 0 100 0 --gpu-batch-size 2 --num-gpu-batches 1OPT-6.7B 全部任务均采用100 0 100 0 100 0全 GPU 策略OPT-30B 脚本改用10 90 0 100 0 100权重 10% GPU 90% CPU缓存与激活全 CPU见 test_batch_query_all_opt30b.shOPT-175B 则使用--pin-weight 0 --percent 0 50 0 0 0 100权重全放 CPU 并 offload 磁盘、激活全 CPU见 test_batch_query_all_opt175b.sh并通过增大--gpu-batch-size与--num-gpu-batches的乘积换取更高批量吞吐。各任务差异参数一览以 6.7B 脚本为例任务数据集--num_run--pad-to-seq-len--max_tokens--gpu-batch-sizeEM: Fodors-Zagats1897443默认2EM: Beer915923默认2EM: iTunes-Amazon1095293默认2EM: Walmart-Amazon2007483默认2EM: Amazon-Google2008763默认1EM: DBLP-ACM20012743默认1EM: DBLP-GoogleScholar20012093默认1DI: Restaurant8612358DI: Buy65488102ED: Hospital2002003默认5从 data_wrangle_run.py 源码可见批量模式的内部逻辑先逐条 tokenize 并记录max_prompt_seq_length再统一 padding 后按flexgen_batch_size gpu_batch_size * num_gpu_batches切分成多个 mini-batch 循环调用model.generate吞吐按两个口径统计output_throughput num_run * max_tokens / total_time与total_throughput (num_run * max_prompt_seq_length num_run * max_tokens) / total_time即输入 输出 token 合计。每次 trial 结束后预测、查询、ground-truth 会以 feather 格式落盘指标Prec/Recall/Acc/F1 及其均值方差写入metrics.json见 data_wrangle_run.py。3.3 提示构造方式提示词由 flexgen/apps/data_wrangle/utils/prompt_utils.py 负责构造支持三种--sample_methodrandom/manual/validation_clusters默认randommanual使用各数据集预定义的固定前缀模板get_manual_prompt见 prompt_utils.pyrandom从训练集中随机采样--k条带标签样例作为 few-shot 前缀get_random_promptvalidation_clusters基于 sentence embedding 聚类挑选难样本作为提示get_validation_prompt使用sentence-transformers/sentence-t5-base。其余相关参数还包括--kprompt 中示例条数默认 1、--sep_tok属性-值对分隔符默认.、--nan_tok缺失值记号默认nan、--temperature默认 0.0、--max_tokens默认 3、--stop_token默认\n以及--num_trials重复试验次数默认 1等见 data_wrangle_run.py。3.4 基准测试结果flexgen/apps/data_wrangle/README.md 明确指出此类任务的特点输入序列很长1231274 token而输出很短3/5/10 token推理时间几乎全部消耗在 prefill 阶段因此基准采用输入 输出 token 合计的吞吐口径。实验环境为单张 T416GBGPU、200GB DRAM、1.5TB NVMe SSD与 HELM 基准采用相同设置。OPT-6.7B 结果任务测试样本输入长度输出长度耗时 (s)输入输出吞吐 (token/s)EM: Fodors-Zagats1897443109.5561281.871EM: Beer91592342.0871272.360EM: iTunes-Amazon109529359.467966.178EM: Walmart-Amazon2007483126.5381186.992EM: Amazon-Google2008763144.5931215.828EM: DBLP-ACM20012743207.5131230.767EM: DBLP-GoogleScholar20012093232.651097.78DI: Restaurant86123510.397984.865DI: Buy654881043.077739.876ED: Hospital200200330.1371347.203OPT-30B 结果任务测试样本输入长度输出长度耗时 (s)输入输出吞吐 (token/s)EM: Fodors-Zagats1897443541.550248.287EM: Beer915923238.58224.450EM: iTunes-Amazon1095293267.639198.775EM: Walmart-Amazon2007483682.635220.030EM: Amazon-Google2008763799.514219.884EM: DBLP-ACM200127431119.272228.184EM: DBLP-GoogleScholar200120931271.534190.636DI: Restaurant86123560.310169.790DI: Buy6548810185.882160.747ED: Hospital2002003158.329256.429OPT-175B 结果任务测试样本输入长度输出长度耗时 (s)输入输出吞吐 (token/s)EM: Fodors-Zagats18974433928.31034.228EM: Beer9159231356.78635.083EM: iTunes-Amazon10952931569.06233.906EM: Walmart-Amazon20074834171.31936.008EM: Amazon-Google20087634893.57235.925EM: DBLP-ACM200127437624.72633.496EM: DBLP-GoogleScholar200120938275.82829.290DI: Restaurant861235648.76216.968DI: Buy65488102086.96114.317ED: Hospital20020031154.13335.178三组数据可以清晰看出模型规模从 6.7B → 30B → 175B吞吐量大致以约 5 倍、再约 6 倍的速度递减但即便在单张 16GB T4 上OPT-175B 也能以 30 token/s 左右的合计吞吐完成全部 10 个数据清洗任务——这正是 FlexGen 通过 CPU/磁盘 offload 换来的单卡跑大模型能力。四、场景三HELM 大规模评测基准4.1 入口命令与参数flexgen/apps/README.md 展示了用 FlexGen 运行 HELM 的 MMLUMassive Multitask Language Understanding场景示例python3 helm_run.py --description mmlu:modeltext,subjectabstract_algebra,data_augmentationcanonical \ --pad-to-seq-len 512 --model facebook/opt-30b \ --percent 20 80 0 100 0 100 \ --gpu-batch-size 48 --num-gpu-batches 3 --max-eval-instance 100该命令的关键配置--pad-to-seq-len 512统一 padding 长度--percent 20 80 0 100 0 100将 20% 权重放 GPU、80% 放 CPU、缓存与激活全部放 CPU对应 helm_passed_30b.sh 中 OPT-IML-30B 的评测设置--gpu-batch-size 48 --num-gpu-batches 3使有效批量为 144--max-eval-instance 100限制评测实例数。helm_run.py 在helmHELM 0.2.1 版本之上做了完整适配其执行流水线对应 helm_run.py 的run_entry函数为通过RunEntry(description, ...)与run_entries_to_run_specs将场景描述解析为RunSpec用自定义OptTokenizer包装 HuggingFace tokenizer见 helm_run.py创建 HELM adapter 与 scenario拉取评测实例get_batches将全部 prompt 按pad_to_seq_len统一 padding并按gpu_batch_size * num_gpu_batches的有效批量切分成多个 batch见 helm_run.py若输入超长会按 256 的倍数自动向上取整重新 paddingexecute初始化ExecutionEnv与Policy后逐 batch 调用model.generatedo_sampleTrue温度从 HELM 请求映射而来stop 序列映射为eos_token_id见 helm_run.py将生成结果重组为 HELM 的RequestResult/ScenarioState交由 HELM metric 评估默认取第一个 metric并把run_spec.json、scenario.json、scenario_state.json、stats.json、per_instance_stats.json等产物写入--run-path默认runs目录。4.2 已通过的 HELM 场景清单helm_fast_test.py 维护了一份经过验证的 HELM 场景清单passed列表涵盖阅读理解/问答boolq、narrative_qa、quac、natural_qa、commonsense、truthful_qa、msmarco、babi_qa知识/推理mmlu如subjectabstract_algebra、wikifact、math、gsm、synthetic_reasoning、synthetic_reasoning_natural、lsat_qa、med_qa文本分类/毒性imdb、raft、civil_comments、real_toxicity_prompts、bbq、bold摘要summarization_cnndm、summarization_xsum_sampled语言学/语法blimp、wikitext_103、twitter_aae、dyck_language数据清洗entity_matching如datasetBeer、entity_data_imputation如datasetBuy其他legal_support、lextreme、lex_glue、copyright、disinformation、synthetic_efficiency。helm_passed_30b.sh 则给出了在 OPT-IML-30B 上的完整实测命令例如 WikiFact 与 MMLUmodelfacebook/opt-iml-30b # WikiFact (plaintiff)约 10 分钟 time python3 helm_run.py --description wikifact:modeltext,k5,subjectplaintiff \ --model $model --percent 20 80 0 100 0 100 --gpu-batch-size 96 --num-gpu-batches 3 --cpu \ --max-eval-instance 96 # MMLU (abstract_algebra)约 31 分钟 time python3 helm_run.py --description mmlu:modeltogether/opt-175b,subjectabstract_algebra,data_augmentationcanonical \ --model $model --percent 20 80 0 100 0 100 --gpu-batch-size 48 --num-gpu-batches 3 --cpu \ --max-eval-instance 100注意脚本中还包含--cpu标志与modeltogether/opt-175b这类来自 HELM 描述约定的占位字段直接照搬仓库脚本即可复现若自行构造--description建议以 helm_fast_test.py 的passed清单为模板并用--max-eval-instance控制评测规模。从 helm_fast_test.py 可看到其快速验证做法先用facebook/opt-125m 全 GPU 策略 --max-eval-instance 10验证场景跑通再切换到目标大模型做完整评测。五、offload 策略选型建议基于仓库实测配置综合三个场景的脚本可以归纳出仓库实测验证过的--percent配置规律模型规模典型配置适用硬件假设出处OPT-6.7B100 0 100 0 100 016GB 显存即可全 GPUtest_batch_query_all_opt6.7b.shOPT-30B10 90 0 100 0 100/20 80 0 100 0 100单 T4 大内存test_batch_query_all_opt30b.sh、helm_passed_30b.shOPT-66B50 10 100 0 100 0--compress-weight24GB 显存 32GB 内存flexgen/apps/README.mdOPT-175B0 50 0 0 0 100--pin-weight 0单 T4 200GB DRAM NVMe SSDtest_batch_query_all_opt175b.sh选型要点均有源码依据六元组之和不必等于 100——权重的剩余比例会落到 NVMe 磁盘w_disk_percent见 flex_opt.py这是 FlexGen 单卡跑百亿级模型的关键机制数据清洗/评测类任务输入很长、输出很短prefill 占绝对主导此时把激活与缓存放在算力更强的设备GPU 或高带宽内存通常收益更大量化压缩--compress-weight/--compress-cache可在不显著牺牲精度的前提下进一步压低显存峰值与 offload 策略叠加使用批量吞吐通过--gpu-batch-size × --num-gpu-batches控制OPT-175B 脚本中单任务批量最高达 90如 Restaurant 的86 × 1、Hospital 的50 × 4。六、总结flexgen/apps/为 FlexGen 提供了三个可直接落地的应用入口completion.py适合快速验证补全效果与 offload 配置data_wrangle_run.py含配套install.sh与 6 个测试脚本覆盖实体匹配、数据补全、错误检测三类数据清洗任务并在单张 T4 上实测了 6.7B/30B/175B 的吞吐数据helm_run.py将 FlexGen 接入 HELM 评测体系可稳定运行 MMLU、WikiFact、XSUM 等数十个场景。三者共享同一套Policy--percent六元组 offload 编程模型掌握了本文的参数表与配置规律即可在受限单卡环境下按需组合出适合自己硬件预算的单卡大模型推理方案。更深入的调度与 offload 实现细节可继续阅读 flexgen/flex_opt.py 与仓库根目录 README.md。赞分享推理引擎大模型【免费下载链接】FlexGenRunning large language models on a single GPU for throughput-oriented scenarios.项目地址https://gitcode.com/gh_mirrors/fl/FlexGen点击查看免费下载相关推荐FlexGen 数据整理应用实战用单 GPU 运行实体匹配、数据补全与错误检测FlexGen 数据整理应用实战用单 GPU 运行实体匹配、数据补全与错误检测 本指南以 FlexGen 仓库内置的 data_wrangle 应用为例系统推理引擎大模型4个真实场景实战用stats4cj从数据清洗到分位数分析的完整流程4个真实场景实战用stats4cj从数据清洗到分位数分析的完整流程 stats4cj 是一个基于仓颉语言实现的数学统计库内置总体/样本均值、总体/样本方差、数据分析科学计算Password Safe安全审计指南如何验证你的密码库完整性Password Safe安全审计指南如何验证你的密码库完整性 Password Safe是一款广受欢迎的安全密码管理器帮助用户安全存储和管理各类密码信息。上一篇Rsbuild项目中的Bundle体积优化指南下一篇终极AVKit视频播放框架实战指南从iOS8到现代iOS开发的演进之路 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考