大模型部署方案当前大模型应用已从实验阶段转向规模化落地而部署方案的选择直接决定了服务性能、成本和安全边界。本文将全面解析LLM大语言模型、Embedding文本向量化、Rerank语义重排序三类核心模型的标准化RESTful接口部署方案。大模型部署技术全景图大模型部署包含三大技术层级计算层GPU选型消费级卡/专业卡/裸金属集群框架层推理引擎vLLM/Ollama/TEI服务层API接口OpenAI兼容/自定义RESTful其中Embedding与Rerank作为RAG检索增强生成流水线的核心组件直接影响语义理解精度。最新研究表明优化后的Rerank可使问答准确率提升35%。以下为三类模型部署方案对比概览|模型类型|代表模型|典型部署方案|接口标准化||------------|------------|----------------|------------|--------------||LLM| DeepSeek-R1、GPT-OSS | Ollama本地部署/vLLM/llama.cpp | OpenAI兼容 ||Embedding| multilingual-e5 | DockerTEL/Infinity | 自定义RESTful ||Rerank| bge-reranker | TEI工具链/Infinity | 专用POST接口 |LLM部署从本地轻量到云端高性能方案1Ollama本地部署轻量级首选适用环境个人开发/中小企业内部工具部署流程# 安装Ollamaollama pull deepseek-coder:6.7b-q4_0# 量化版仅需4.1GBollama run deepseek-coder优点数据完全本地化满足金融/医疗等隐私敏感场景支持断网运行响应延迟2秒内存需求低32B模型仅需32GB内存缺点模型能力受限32B版性能仅为671B满血版的20%长文本生成可能降至1-2 token/s实践建议搭配FastAPI封装OpenAI格式接口app.post(/v1/chat)defchat_endpoint(request:ChatRequest):return{response:ollama.generate(request.prompt)}Ollama安装包https://ollama.com/download方案2vLLM适用环境高并发服务vLLM ​​主要推荐和支持在 Linux 操作系统上安装和运行Windows只能通过WSL2​​在 WSL 的 Ubuntu 终端中更新软件包列表并安装 。官方文档pip install vllmpython -m vllm.entrypoints.api_server–model /path/to/MiniCPM3-4B–served-model-name MiniCPM3-4B–host 0.0.0.0-port 8847或者vllm serve–model /path/to/MiniCPM3-4B–served-model-name MiniCPM3-4B–host 0.0.0.0-port 8847vllm serve是 vllm.entrypoints.openai.api_server 的命令行包装CLI 别名简化了启动流程。核心功能完全相同均提供 /v1/chat/completions、/v1/completions 等 OpenAI 标准接口路径支持流式输出、动态批处理Token-Level Batching和分布式部署。优点动态批处理提升吞吐量3-5倍原生支持OpenAI协议无缝替换ChatGPT可通过docker部署只需增加容器副本达到横向扩展llama.cpp见文章量化模型部署工具llama.cppEmbedding模型向量化服务的容器化实践DockerTEI标准化方案部署步骤dockerrun-d-p7965:7965--gpusall\engchina/embeddings-api:multilingual-e5-large-instructEmbedding镜像docker pull engchina/embeddings-apiDocker infinity方案docker run -itd --gpus ‘“device8,9”’-e HF_ENDPOINThttps://hf-mirror.com-p 7997:7997swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/michaelf34/infinity:latestv2–model-id BAAI/bge-large-zh-v1.5–model-id BAAI/bge-reranker-large–port 7997接口测试curl -X POST http://localhost:7965/v1/embeddings \ -H Content-Type: application/json \ -d {input: 大模型部署方案对比}响应特征{data:[{embedding:[0.017,-0.032,...],// 1024维向量index:0}],model:text-embedding-3-large}优势支持多语言文本向量化提供float/int8两种精度格式单容器QPS可达120T4 GPURerank模型RAG精度提升关键技术价值在检索增强生成中Rerank通过语义重排序将Top1准确率提升40%HuggingFace TEI部署方案text-embeddings-router --model-id BAAI/bge-reranker-large--port8080调用示例importrequests payload{query:LLM部署方案,texts:[Ollama本地教程...,vLLM集群方案...]}responserequests.post(http://localhost:8080/rerank,jsonpayload)print(response.json()[0][score])# 输出相关性分数Transformers原生部署Transformers 是Hugging Face开源的Python 库用于自然语言处理NLP和现在多模态模型的 加载、训练和推理库。Transformers 库提供了一套完整的工具链从模型加载LLM/Embedding/Reranker→ 优化量化/硬件加速→ 服务封装API/生产工具→ 部署容器化/云平台全面支持大模型的工业级落地。其核心功能是从 Hugging Face Hub 或本地便捷地 from_pretrained() 加载模型。提供统一的 API如 pipeline, AutoModel, AutoTokenizer与成千上万个预训练模型交互是模型研究、实验、原型开发和简单应用的基石和标准。大型语言模型LLM加载方式通过 AutoModelForCausalLM生成任务如 GPT或 AutoModelForSeq2SeqLM如 T5加载预训练模型支持本地路径或 Hugging Face Hub 模型 ID。示例代码:fromtransformersimportAutoModelForCausalLM,AutoTokenizer modelAutoModelForCausalLM.from_pretrained(meta-llama/Llama-3-8B-Instruct)tokenizerAutoTokenizer.from_pretrained(model_name)# 某些模型也可以使用AutoModle加载例如OpenBMB/MiniCPM3-4BfromtransformersimportAutoModel,AutoTokenizer modelAutoModel.from_pretrained(model_path,trust_remote_codeTrue)tokenizerAutoTokenizer.from_pretrained(model_path,trust_remote_codeTrue)importtorchimportjsonimportaiohttpfromPILimportImagefrompathlibimportPathfromtypingimportList,DictfromtransformersimportAutoModel,AutoTokenizerfrom.baseimportBaseLLMfromtypingimportList,DictclassHuggingFaceServer(BaseLLM):def__init__(self,model_path,deviceNone)-None:self._modelAutoModel.from_pretrained(model_path,trust_remote_codeTrue)self._tokenizerAutoTokenizer.from_pretrained(model_path,trust_remote_codeTrue)ifdevice:self._model.to(device)eliftorch.cuda.is_available():self._model.cuda()asyncdefarun(self,messages:List[Dict[str,str]],stream:bool,**kargs):Run the model with messages and return the response. Args: messages (List[Dict[str, str]]): List of input messages Example: [ {role: user, content: [hello, /path/to/image.jpg]}, {role: assistant, content: [This is a landscape photo]} ] stream (bool): Whether to use streaming output Example: True Returns: If streamFalse, returns complete response: Example: {data: This is a beautiful landscape photo} If streamTrue, returns generator with incremental responses: Example: yield {data: This is} yield {data: a beautiful} yield {data: landscape photo} new_messages[]formsginmessages:role,contentmsg[role],msg[content]ifisinstance(content,list):content[Image.open(item)iflen(item)256andPath(item).exists()elseitemforitemincontent]new_messages.append(dict(rolerole,contentcontent))ifnotstream:answerself._model.chat(imageNone,msgsnew_messages,tokenizerself._tokenizer,streamstream,samplingTrue,)return{data:answer}else:returnself._stream_response(new_messages)def_stream_response(self,messages):answerself._model.chat(imageNone,msgsmessages,tokenizerself._tokenizer,streamTrue,samplingTrue,)foriteminanswer:ifnotitem:continueyielddict(dataitem)defrun(self,messages:List[Dict[str,str]],stream:bool,**kargs):Run the model with a list of messages and return the response. Args: messages (List[Dict[str, str]]): List of input messages Each message contains role and content fields: - role: Message role, can be user or assistant - content: Message content, can be a list of text or image paths Example: [ {role: user, content: [hello, /path/to/image.jpg]}, {role: assistant, content: [This is a landscape photo]} ] stream (bool): Whether to use streaming output True: Returns a generator that yields responses incrementally False: Returns complete response at once Returns: When streamFalse: Returns complete response dict: {data: complete response text} When streamTrue: Returns generator yielding responses: {data: partial response text} def_chat(self,messages,streamFalse):returnself._model.chat(imageNone,msgsmessages,tokenizerself._tokenizer,streamstream,samplingTrue,)defstream_response():answer_chat(self,messages,stream)foriteminanswer:ifnotitem:continuedatadict(dataitem)yieldfdata:{data}\n\nprint(item,end,flushTrue)ifstream:returnstream_response()else:answer_chat(self,messages)print(answer)return{data:answer}文本嵌入模型Embedding加载方式使用 transformers 或 sentence-transformers 库适用于语义搜索、聚类等任务。示例代码modelAutoModel.from_pretrained(model_name,trust_remote_codeTrue)tokenizerAutoTokenizer.from_pretrained(model_name,trust_remote_codeTrue)重排序模型Reranker加载方式通过 AutoModelForSequenceClassification 实现对检索结果进行相关性重排。示例代码modelAutoModelForSequenceClassification.from_pretrained(BAAI/bge-reranker-large)tokenizerAutoTokenizer.from_pretrained(model_name_or_path,cache_dircache_dir,trust_remote_codeTrue)使用 FastAPI 或 Flask 封装模型为 RESTful 接口。示例代码importjsonimportargparseimporttracebackimporturllib.parsefromPILimportImagefrompathlibimportPathfromloguruimportloggerfromflaskimportFlask,request,Response,stream_with_contextfromapp.ultrarag.modules.llm.huggingface_likeimportHuggingFaceServerclassMicroServer:A micro server implementation for handling chat requests with HuggingFace models.def__init__(self,model_path:str,device:str): Initialize the server with a HuggingFace model. Args: model_path (str): Path to the model files device (str): Device to run the model on (e.g., cpu, cuda) ifnotPath(model_path).exists():raiseValueError(fmodel path:{model_path}not exist!)self.llmHuggingFaceServer(model_pathmodel_path,devicedevice)self.appFlask(__name__)self.app.add_url_rule(/chat,view_funcself.process,methods[get,post])defprocess(self): Process incoming chat requests, handling both text and image inputs. Returns: Response: Flask response object containing either streaming or non-streaming chat response try:# Parse request datadatajson.loads(request.form.get(data,{}))messagesdata.get(messages)streamdata.get(stream)# Process image files if presentname2imgdict()foriteminrequest.files.values():ifimagenotinitem.content_type:continuekeyurllib.parse.unquote(item.filename)name2img[key]Image.open(item)logger.info(fimages files:{[nforninname2img.keys()]})# Replace image references with actual image objectsifname2img:img_messages[]formsginmessages:role,contentmsg[role],msg[content]new_content[name2img.get(item,item)foritemincontent]img_messages.append(dict(rolerole,contentnew_content))else:img_messagesmessages logger.info(fmessages:{img_messages})respself.llm.run(messagesimg_messages,streamstream)ifstream:returnResponse(stream_with_context(resp),mimetypetext/event-stream)else:returnrespexceptExceptionase:err_msgtraceback.format_exc()returnResponse(err_msg,status500)defrun_server(self,host:str,port:int): Start the Flask server. Args: host (str): Server host address port (int): Server port number try:self.app.run(hosthost,portport)except:print(traceback.format_exc())if__name____main__:argsargparse.ArgumentParser()args.add_argument(-host,requiredTrue,typestr,helpserver host)args.add_argument(-port,requiredTrue,typeint,helpserver port)args.add_argument(-model_path,requiredTrue,typestr,helpmodel file path)args.add_argument(-device,requiredFalse,default,typestr,helpmodel device)argsargs.parse_args()serverMicroServer(model_pathargs.model_path,deviceargs.device)server.run_server(hostargs.host,portargs.port)对比Transformers 库提供了一套完整的工具链从模型加载LLM/Embedding/Reranker→ 优化量化/硬件加速→ 服务封装API/生产工具→ 部署容器化/云平台全面支持大模型的工业级落地。开发者可根据场景选择。transformers部署模型与vllmollamainfinity_emb等工具部署模型的关系Hugging Face Transformers部署灵活性极高模型研究、实验、原型开发和简单应用的 基石和标准。部署灵活性极高可以完全控制推理的每一个环节。性能非最优其默认的推理方式尤其是自回归生成没有对高并发、内存管理、计算优化等生产环境需求做深度优化。例如在处理大量并发请求时其 KV Cache 内存管理效率较低。需要自行搭建服务需要自己用 FastAPI、Flask 等 Web 框架将 transformers 的推理代码封装成 API 服务并处理并发、批处理、监控等生产级问题。简单来说transformers 解决了“如何正确地调用模型”的问题但没有完全解决“如何高效、大规模地服务模型”的问题。专业化工具 (vLLM, Ollama, Infinity-emb)为生产而生的优化这些工具建立在 transformers 等库的基础之上针对模型部署和生产服务 的特定痛点进行了深度优化。vLLM 大规模语言模型LLM服务的性能王者与 Transformers 的关系可以看作是 transformers 推理功能的一个 高性能替代后端。它重写了模型推理的核心部分特别是 attention 和内存管理。核心创新PagedAttention 算法。它借鉴了操作系统内存分页的思想来高效管理 KV Cache几乎完全消除了内存碎片从而在高并发场景下实现了极高的吞吐量Tokens per Second。极致性能尤其是在批量处理多个并发请求方面性能远超原生 transformers。开源代码可查可定制。API 兼容其 API Server 通常兼容 OpenAI API 格式易于集成。专注 LLM主要为自回归生成式 LLM 设计。Ollama 本地模型的用户体验专家与 Transformers 的关系Ollama 在底层很可能使用了 transformers 或 ggml 等库来实际运行模型。它的价值不在于底层创新而在于极致的用户体验和封装。核心创新无与伦比的易用性。通过简单的命令行工具ollama run自动处理模型的下载、加载、版本管理和运行。它提供了一个非常简单的 REST API 供应用调用。开箱即用极大降低了在本地尤其是个人电脑上运行大模型的门槛。强大的社区模型库轻松运行各种量化后的模型。本地优先设计初衷是为了在开发者的笔记本电脑或本地服务器上运行而非大型数据中心。轻量级相比 vLLM它更侧重于快速启动和易用性而不是极致的多用户并发性能。Infinity 嵌入Embedding模型的性能专家与 Transformers 的关系它专门针对 sentence-transformers基于 transformers 这类嵌入模型进行了终极优化。核心创新将嵌入模型的推理速度推向了硬件极限。通过极度精细的 GPU 并行化、批处理优化和量化实现了每秒处理数百万个文本段的超高吞吐量。专精一地只做嵌入模型推理并做到了世界顶尖水平。为 RAG 优化是构建检索增强生成RAG系统时用于文档编码document indexing和查询编码query encoding的绝佳选择。API 服务直接提供一个高性能的嵌入向量生成 API。结语部署方案没有最好只有最合适个人开发者首选Ollama6.7B量化版成本趋近于零中小企业Docker Compose编排Embedding/Rerank云平台LLM大型企业自建昇腾超节点集群实现千卡级协同计算未来趋势随着MoE架构普及和4位量化技术成熟消费级设备运行百亿模型将成为可能。但在可预见的未来混合部署模式关键业务本地化通用能力上云仍是平衡安全与成本的最优解。愿你我都能在各自的领域里不断成长勇敢追求梦想同时也保持对世界的好奇与善意!