[特殊字符] 用 Docker 和 Kubernetes 部署大模型(LLM)服务:从零到一全攻略【踩坑必读】

一文讲清楚如何正确提交Pull Request,附真实案例 刚参加了一次开源项目,不知道如何正确提交pull request,在此记录一下。 阅读详情

📋 摘要

大家好,我是默语博主🙋‍♂️!
在AI浪潮🌊汹涌的今天,越来越多小伙伴想自己部署大语言模型(LLM),比如 HuggingFace 的 transformers、LLaMA、Mistral 系列。但是,如何用 Docker、Kubernetes 快速稳定地部署,同时避免踩坑⚠️,成为很多技术人的痛点。
本篇文章聚焦Docker部署大模型服务与Kubernetes集群实战,包含详细教程、常见错误分析、轻量镜像优化🎯、并发请求处理方法等,当然也有Java代码演示!
【关键词】:Docker部署LLM、Kubernetes部署大模型、LLM API服务、Docker轻量化、Java访问大模型API

博主 默语带您 Go to New World.
✍ 个人主页—— 默语 的博客👦🏻 优秀内容
《java 面试题大全》
《java 专栏》
《idea技术专区》
《spring boot 技术专区》
《MyBatis从入门到精通》
《23种设计模式》
《经典算法学习》
《spring 学习》
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨


默语是谁?

大家好,我是 默语,别名默语博主,擅长的技术领域包括Java、运维和人工智能。我的技术背景扎实,涵盖了从后端开发到前端框架的各个方面,特别是在Java 性能优化、多线程编程、算法优化等领域有深厚造诣。

目前,我活跃在CSDN、掘金、阿里云和 51CTO等平台,全网拥有超过15万的粉丝,总阅读量超过1400 万。统一 IP 名称为 默语 或者 默语博主。我是 CSDN 博客专家、阿里云专家博主和掘金博客专家,曾获博客专家、优秀社区主理人等多项荣誉,并在 2023 年度博客之星评选中名列前 50。我还是 Java 高级工程师、自媒体博主,北京城市开发者社区的主理人,拥有丰富的项目开发经验和产品设计能力。希望通过我的分享,帮助大家更好地了解和使用各类技术产品,在不断的学习过程中,可以帮助到更多的人,结交更多的朋友.


我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

默语:您的前沿技术领航员

👋 大家好,我是默语!
📱 全网搜索“默语”,即可纵览我在各大平台的知识足迹。

📣 公众号“默语摸鱼”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。

💬 微信端添加好友“Solitudemind”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。

📅 最新动态:2025 年 4月 22 日

快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


📢 用 Docker 和 Kubernetes 部署大模型(LLM)服务:从零到一全攻略【踩坑必读】



在这里插入图片描述

✨ 引言

随着 LLM 的广泛应用,企业内部部署模型成为刚需,但部署过程中常遇到资源不足、镜像太大、依赖冲突等问题💥。
为了让大家少踩坑、少掉头发🧠,这篇文章带你从本地Docker搭建到生产级K8s部署,手把手演示,包括 Java 调用接口小案例。
准备好了吗?🎯 Let’s go!


📦 1. 环境准备

1.1 基础环境要求

为了顺利部署,需要准备如下环境🛠️:

工具版本要求说明
Docker≥ 24.0推荐使用最新版,兼容性更好
Kubernetes≥ 1.28支持GPU调度更完善
Helm≥ 3.12Kubernetes包管理工具
Java SDK≥ 17用来开发调用API的小程序
Python≥ 3.10训练/微调模型

小提示⚡:如果需要GPU支持,记得安装 NVIDIA Docker Toolkit 哦!


🛠️ 2. 使用 Docker 部署 LLM API 服务

2.1 选择模型框架

目前主流的开源模型库有:

  • 🤗 HuggingFace Transformers
  • 🦙 LLaMA系列
  • 🐍 OpenAI-compatible接口(如vLLM)

👉 本文以 HuggingFace 的 transformers 为例。

2.2 Dockerfile 编写

为了减小镜像体积🚀,可以这样写一个基于 python:3.10-slim 的 Dockerfile:

FROM python:3.10-slim

# 安装基础依赖
RUN apt-get update && apt-get install -y gcc

# 安装模型推理所需库
RUN pip install torch==2.1.2 transformers==4.38.1 fastapi uvicorn

# 复制API服务代码
COPY ./app /app

# 设置工作目录
WORKDIR /app

# 运行API服务
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

✅ 小心! 大模型如 xformers 会导致 Docker build 失败(需要 CUDA 环境,注意兼容性)。


⚡ 3. 常见部署问题与解决办法

问题错误信息解决方案
镜像太大“no space left on device”使用 multi-stage build,或者迁移到大磁盘
Docker build失败“xformers incompatible”确认 CUDA 版本匹配;或者关闭 xformers
容器启动超慢加载模型太慢在镜像构建时预加载模型,或者 volume 挂载
内存爆炸OOMKilled限制 batch size,分配更大内存

小建议🌟:可以用docker system prune清理无用缓存,释放空间。


☸️ 4. 使用 Kubernetes 部署 LLM 服务

4.1 基础架构设计

建议部署结构:

[Ingress] -> [Service] -> [Pod (LLM API Server + GPU)]
  • Ingress 负责外部访问
  • Service 做负载均衡
  • Pod 跑模型服务,可以绑定 GPU

4.2 K8s Deployment 示例

用下面的 Deployment YAML 文件,可以快速部署一个 LLM API服务:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: llm-server
spec:
  replicas: 2
  selector:
    matchLabels:
      app: llm
  template:
    metadata:
      labels:
        app: llm
    spec:
      containers:
      - name: llm-api
        image: your-dockerhub/llm-api:latest
        ports:
        - containerPort: 8000
        resources:
          limits:
            nvidia.com/gpu: 1

注意小心💥:GPU资源需要你的K8s节点配置好NVIDIA device plugin!


☕ 5. Java代码示例:如何访问 LLM API

假设你的 LLM 服务已经部署在 http://localhost:8000/generate,下面用 Java 调用接口:

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class LLMClient {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://localhost:8000/generate");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Type", "application/json");

            String inputJson = "{\"prompt\": \"Hello, world!\"}";
            try (OutputStream os = conn.getOutputStream()) {
                os.write(inputJson.getBytes(StandardCharsets.UTF_8));
            }

            int responseCode = conn.getResponseCode();
            System.out.println("Response Code : " + responseCode);

            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

📌小注意:如果接口有认证Token,需要在Header里加上Authorization: Bearer xxx哦!


🧠 6. 如何构建轻量化的 LLM 镜像

大模型镜像动不动就 10GB+,影响部署效率🚀,所以要尽量优化:

  • 使用 python:slim 或 debian:bullseye-slim 基础镜像

  • 减少不必要的 Python 库

  • 采用 多阶段构建(multi-stage build)

  • 模型文件(如 .bin)挂载外部 Volume,不内置镜像

举个例子📦:

dockerfile复制编辑FROM python:3.10-slim as builder
RUN pip install torch transformers

FROM python:3.10-slim
COPY --from=builder /usr/local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages
COPY ./app /app

这样可以显著缩小镜像体积!(一般能减少30%~50%)


🏁 总结

部署大模型服务,看似简单,实际中会遇到各种资源限制、依赖问题、性能瓶颈⚙️。
本篇用实际操作🔨,从 Docker 到 Kubernetes、从环境搭建到 Java接入,帮助你完整掌握部署流程。
记得:资源监控🖥️、异常处理机制💣、并发优化🚀,这些都是上线后要长期关注的!


🔖 参考资料



如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;( 联系微信:Solitudemind )

点击下方名片,加入 IT 技术核心学习团队。一起探索科技的未来,共同成长。

为了让您拥有更好的交互体验,特将这行文字设置为可点击样式:点击下方名片,加入 IT
技术核心学习团队。一起探索科技的未来,共同成长。

chatgpt本地部署 中小型公司的自动化流水线相关,搭建tapd+jenkins+gitlab+sonarqube+docker+jmeter+ansible这一套流水线的东西。期望的样子就是,从代码提交到测试、扫描、构建、部署等一系列操作都是自动化的. 阅读详情

相关推荐

【大模型工程局】深度解密:DeepSeek Janus Pro如何重新定义多模态AI的未来?

Janus Pro的发布标志着多模态人工智能技术迈向新的应用与研究阶段。从强大的OCR功能与地标识别,到支持LaTeX解析与精细化图像生成,该模型为学术界和工业界带来了广阔的想象空间。尽管仍面临一些技术与合规挑战,但Janus Pro所展现的高可扩展性和开放生态,为研究者与从业者提供了宝贵的探索平台。在未来的多模态时代,人工智能将进一步与人类社会的方方面面深度融合。我们期待DeepSeek和社区力量的持续迭代,使Janus Pro不断进化,去应对更丰富多样的应用需求。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 2689

Pull Request 到底是个啥?

PR 的全称是 Pull Request, 经常用 Github 的同学对这个肯定很熟悉了。Github 聚集了 4000 万开发者, 过亿的开源项目, 如果想给别人的开源仓库贡献代码, 通常是先 fork 别人的项目, 然后本地修改完成提交到自己的个人 fork 仓库, 最后提交 PR 等待别人合入你的代码。Github 的工作流:fork 工作流我们重点看一下第 6 步, 小明写完代码了想合入到原作者的仓库, 新建了一个"pull request", 拉请求?

云满笔记 1万+

5.4 磁悬浮轴承控制系统仿真:在MATLAB/Simulink中搭建包含功放、传感器模型的闭环系统模型,进行稳定性与动态性能仿真

磁悬浮轴承控制系统仿真方法 摘要:磁悬浮轴承控制系统仿真需建立包含转子动力学、传感器、控制器、功率放大器和电磁执行器的高保真非线性模型。通过MATLAB/Simulink搭建闭环系统,重点建模传感器带宽限制与噪声、功放饱和特性以及电磁力非线性。仿真分析包括时域阶跃响应、扰动抑制测试,频域稳定性分析(伯德图、奈奎斯特图),以及参数摄动下的鲁棒性验证。关键要验证控制算法在非线性因素影响下的稳定性和动态性能,为实际系统实现提供可靠依据。仿真中需特别注意物理量单位一致性和数字控制离散化效应。

技术工作者 1093

SqlSugar 3.分组去重

文章目录1.普通分组查询(用where)2.聚合对象条件筛选(用Having)3.Distinct使用4.分组获取第一条4.1 MySql、Sqlite写法4.2 SqlServer、Oracle写法5.特殊日期分组 1.普通分组查询(用where) var list1 = db.Queryable<Student>().GroupBy(it => new { it.Name }) .Where(it => it.StudentId > 2)

DotNeter-Hpf的博客 8650

嵌入式主板系统配置实战:OTG切换、双网共存与开机自启详解

在嵌入式Linux系统开发中,系统配置是连接硬件平台与应用功能的关键桥梁。其核心原理在于通过内核参数、文件系统接口和系统服务等机制,实现对硬件资源和系统行为的精细控制。掌握这些配置技术,对于提升开发效率、保障系统稳定性和实现产品差异化至关重要。无论是工业物联网网关、智能终端还是边缘计算设备,都需要对网络、USB、启动项等基础功能进行可靠配置。本文聚焦于嵌入式主板开发中的高频需求,例如OTG功能模式切换、双网共存路由策略以及基于systemd的开机自启动实现,通过具体的命令和脚本示例,为开发者提供一套可直接复

weixin_30827827的博客 310

R语言实战:5分钟搞定NHANES数据库的加权分析与可视化(附完整代码)

本文提供了一份R语言实战指南,帮助研究者在5分钟内完成NHANES数据库的加权分析与可视化。通过详细的代码示例,涵盖数据获取、清洗、加权分析和可视化全流程,特别适合公共卫生和流行病学研究者快速掌握复杂抽样数据的处理方法。

www00的博客 246

GitHub pull request(傻瓜式入门版)

Pull Request(拉取请求)是一种非常重要的协作机制,它是 Git 和 GitHub 等代码托管平台中常见的功能。在开源项目中,Pull Request 被广泛用于参与社区贡献,从而促进项目的发展。

feverfew1的博客 1万+

NSIS教程(6): 使用第三方插件

NSIS内置了很多指令,这些指令可以满足我们基本需求,但难免会遇到NSIS没有内置的功能,如进程操作,后台运行(即多线程),7z压缩等等,这个时候我们就需要借助第三方插件来满足我们所需要的功能了。 一、插件获取 NSIS官方收录插件的网址是:http://nsis.sourceforge.net/Category:Plugins,我们可以在这个网站上查找和下载我们需要的插件,该网站上针对每

while(1) { smile(); } 9万+

Pull request 如何使用

最近在工作中提交代码时,要求需要交给领导来review,因此需要提交一个pull request,因此作为学习,整理出一个流程。

luo981695830的博客 2634

麒麟操作系统提示“默认密钥环已上锁”的解决办法

麒麟操作系统提示“默认密钥环已上锁”的解决办法

太极淘的博客 1万+

一文看懂EMMC原理及工作过程

CMD:用于设备初始化和命令传输的双向通道, CMD信号有2种工作模式:1#:漏极开路--->用于初始化模式2#:推拉--->用于快速命令传输其中命令从eMMC主机控制器发送到eMMC设备,响应从设备发送到主机。DAT [7:0]:双向数据信号,模式包括:1(DAT0);默认情况下,通电或重置后,只有DAT0用于数据传输。DAT信号在推挽模式下工作,eMMC设备包括数据线DAT1-DAT7的内部上拉。进入4位模式后,设备立即断开线路DAT1、DAT2和DAT3的内部上拉;

Airer_00的博客 2018

Pull Request 到底是什么意思

Pull Request 到底是什么意思 Pull Request 实在是一个令人难以理解的词,尽管学会PR很长时间了,自己也知道是什么意思了,但自己语言天赋实在是菜,不能白话出来,直到今天看到知乎上的一个回答,才恍然:我改了你们的代码,请拉回去看看吧。 PR 的直译是:拉取请求。无论从英文还是中文来说这个词都挺令人费解的,初见这个词可能会理解为一个动词:从某个地方拉取某个什么请求,理解通畅但完全是丈二和尚摸不着头脑,啥意思这个;然后不完全小白会理解为:一个目的为拉取的请求,重点是请求,这个没错,但前面的拉

水东流 1万+

深入解析:使用Python进行T矩阵散射计算的完整指南

在物理学和工程学中,散射是一个至关重要的概念。当波(无论是光波、声波还是其他类型的波)遇到一个障碍物时,它会在多个方向上散开。为了理解和预测这种行为,我们需要进行数学建模和计算。其中,T矩阵方法是一种非常有效的工具。在开始计算之前,我们需要定义一些基础函数。"""计算T矩阵的一个元素。参数:- wave_vector: 波矢- scatterer_position: 散射体的位置- scatterer_properties: 散射体的性质(如大小、形状等)返回:- T矩阵的一个元素。

qq_38334677的博客 1044

git工作流指南:Pull Request工作流

Pull Requests是Bitbucket上方便开发者之间协作的功能。提供了一个用户友好的Web界面,在集成提交的变更到正式项目前可以对变更进行讨论。 开发者向团队成员通知功能开发已经完成,Pull Requests是最简单的用法。开发者完成功能开发后,通过Bitbucket账号发起一个Pull Request。这样让涉及这个功能的所有人知道,要去做Code Review和合

Code-lover's Learning Notes 1733

Unity之ASE如何实现UV扰动闪电效果

UV扰动,顾名思义,就是通过干扰原贴图的UV,使UV发生变化,导致贴图出现会动的效果,如果我们贴图和扰动的速度调整的刚好合适的话,会出现一些非常棒的效果,比如下图所示的闪电效果:好了,一个简单的UV扰动就讲完了,同学们可以发挥想象力,我们是否可以利用UV扰动的原理,做一点别的炫酷的效果出来,比如,交错流动,流光效果等等。很期待你的留言,这篇文章就到这里,希望对你有所帮助。

TxNet 1781

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Git拉取请求:Git pull Request

分支是 git 中的一项功能,有助于提供独立的开发路线并鼓励并行贡献。Git 中的分支创建分支机构删除分支(本地和远程)拉取请求是 git 中的一项功能,允许您为某人的 git 存储库做出贡献。当您创建拉取请求时,它会通知维护者查看要合并到其存储库中的代码。假设您正在开发任何功能,并且在完成该功能后,您将通过提出拉取请求来通知团队成员您所做的代码更改。拉取请求通知所有团队成员,应审查代码并将其合并到 master 分支中。git 的这一特性有助于改善协作、鼓励反馈和建立对代码更改的信心。

新华编程特战队 2986

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

《Git与Github使用笔记》第12章 Pull Request的使用

12.1 Pull Request概述 可能很多朋友都不知道Pull Request是啥意思? Github官方文档的定义如下: Pull Request 是一种通知机制。你修改了他人的代码,将你的修改通知原来的作者,希望他合并你的修改,这就是 Pull Request,简称PR。 Pull Request 本质上是一种软件的合作方式,是将涉及不同功能的代码,纳入主干的一种流程。这个过程中,还可以进行讨论、审核和修改代码。 12.2 Pull Request流程 第一步:Fork源 Fork源项目到自己

不问归期的博客 3691

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Git——pull request提交实战

github上有很多优秀的开源项目,很多时候我们不仅仅只是满足于使用,同时也想一起参与开源项目的开发,贡献自己的代码。今天这篇文章就给大家介绍一下如何在github上提交PR,让我们一起为开源社区做贡献。

庄小焱 9454

一篇文章教你使用Docker本地化部署Chatgpt(非api,速度非常快!!!)及裸连GPT的方式(告别镜像GPT)

第一种方法:使用Docker本地化部署 第二种方法:不部署项目,直接连接

立志做一个高产且细节博主 3万+

SqlSugar 与 Linq <一>

Where(g => g.Count() > 1)// 取每组多条记录。//1--剔除列表中,每组有多条记录的所有组,保留仅出现一次的所有记录。//4--剔除list2中所有list1。//5--多条记录中,取最新一条。

wenyuhua2的专栏 1069

Git 发送Pull Request请求

Tips:Fork是将别人的代码复制到自己的仓库中,把它变成我们自己的独立代码仓库,然后在自己的仓库里进行开发,修改提交等操作。Fork之后可以向原作者提交Pull Request请求,把自己修改后的代码提交到原作者的代码仓库中,帮忙原作者完善项目。最后再回顾一下Pull Request的作用:你下载了别人的代码,进行修改完善后想让别人接纳你的新代码 ,那么你上传文件并提出请求。原作者接受你的代码后,在他的仓库里就可以看到你的新代码咯!Step 7: 最后,在原作者的仓库里可以找到你上传的文件。

2202_75336422的博客 1444

Git进阶系列 | 3. 基于Pull Request实现更好的协作

想想所有的开源项目,如果你有一个新特性的想法,或者如果想提交一个补丁,pull request是一个很好的方式来展示想法,而不必加入这个项目并成为主要贡献者。你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。Git是最流行的代码版本控制系统,这一系列文章介绍了一些Git的高阶使用方式,从而帮助我们可以更好的利用Git的能力。

残星说梦话 1163

T-SQL 高级应用之数据汇总(聚合函数之2 group by) .

1、概述2、原始表3、简单Group By4、Group By 和 Order By5、Group By中Select指定的字段限制6、Group By All7、Group By与聚合函数8、Having与Where的区别9、Compute 和 Compute By 1、概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分

SelfImprovement 4242

Janus Pro:DeepSeek 开源革新,多模态 AI 的未来

在人工智能的快速发展中,Janus Pro 如一颗新星般吸引着全球开发者和创意工作者的注意。作为 DeepSeek 开发的开源多模态AI框架,Janus Pro 自2025年1月发布以来,已经在多个领域展现了其卓越的性能和无限的潜力。Janus Pro 的核心优势在于其独特的架构设计,它结合了解耦的视觉编码框架和统一的Transformer架构,以及SigLIP-L视觉编码器,这使得它在处理图像和文本相关任务时,能够以前所未有的灵活性和性能进行工作。

程序员泥瓦匠 4216

sql group by,order by

1、sum(*) 后group by,先分组,然后组内部求和; 2、where 必须在group by前面,筛选where条件再分组; 3、group by 后加order by,先分组再组外部排序; 4、having后加聚合函数(因为where后面不能加聚合函数),where和having可以一起使用。

我是谁 563
上一篇: 90%的Java程序员都踩过的内存坑,你还敢说自己稳了吗?
下一篇: 自己开发一个ChatGPT插件并本地部署【超详细指南】
默语佬
默语佬 优质创作者: 编程框架、人工智能、Java技术领域 优质创作者: 编程框架、人工智能、Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 21万+粉丝 1372原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

默语佬

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

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

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

打赏作者

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

抵扣说明:

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

余额充值