K8S部署Openwebui 服务(Nvidia版)

news/2025/9/28 0:09:10/文章来源:https://www.cnblogs.com/ellison123/p/19115936

K8S部署BOBAI 服务(Nvidia版)

目录

  • 一、GPU 节点部署 Driver && CUDA部署
    • 1、前提准备
      • 检查机器上面有支持CUDA的NVIDIA GPU
      • 查看自己的系统是否支持
      • 验证系统是否有GCC编译环境
      • 验证系统是否安装了正确的内核头文件和开发
    • 2、开始安装
      • 禁用nouveau
      • 开始安装驱动NVIDIA Driver (也可跳过,直接去安装CUDA)
      • 开始安装CUDA Toolkit
  • 二、容器环境(Docker or Containerd)
    • 1、安装 nvidia-container-toolkit
      • 说明:
      • With dnf: RHEL/CentOS, Fedora, Amazon Linux
    • 2、配置Runtime 为NVIDIA
      • Docker
      • Containerd
    • 三、K8S调用GPU
      • 说明:
      • 部署Plugin
  • 三、部署服务
    • 1、部署Deekseek-v3
      • 示例yaml文件如下,仅供参考
    • 2、qwen-embedding模型部署
      • 示例yaml文件如下,仅供参考
    • 3、Tika部署
      • 示例yaml文件如下,仅供参考
    • 4、部署ASR
      • 示例yaml文件如下,仅供参考

一、GPU 节点部署 Driver && CUDA部署

官方安装文档

1、前提准备

检查机器上面有支持CUDA的NVIDIA GPU

 lspci | grep -i nvidia

查看自己的系统是否支持

CUDA Installation Guide for Linux — Installation Guide for Linux 13.0 documentation The installation instructions for the CUDA Toolkit on Linux. https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#system-requirements

验证系统是否有GCC编译环境

gcc -v

验证系统是否安装了正确的内核头文件和开发

sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)

2、开始安装

禁用nouveau

nouveau是一个第三方开源的Nvidia驱动,一般Linux安装的时候默认会安装这个驱动。 这个驱动会与Nvidia官方的驱动冲突,在安装Nvidia驱动和和CUDA之前应先禁用nouveau。

# 查看系统是否正在使用nouveau
lsmod | grep nouveau# 如果显示内容,则禁用。以下是centos7的禁用方法#新建一个配置文件
sudo vim /etc/modprobe.d/blacklist-nouveau.conf
#写入以下内容
blacklist nouveau
options nouveau modeset=0
#保存并退出
:wq
#备份当前的镜像
sudo mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
#建立新的镜像
sudo dracut /boot/initramfs-$(uname -r).img $(uname -r)
#重启
sudo reboot
#最后输入上面的命令验证
lsmod | grep nouveau

开始安装驱动NVIDIA Driver (也可跳过,直接去安装CUDA)

📌一定要确认NVIDIA Driver的版本适合自己的显卡

  • 下载NVIDIA Driver

    首先到 NVIDIA 驱动下载 下载对应的显卡驱动:

    在下载前确认Driver是否支持自己的显卡

  • 安装NVIDIA Driver

    rpm -ivh nvidia-driver-local-repo-rhel9-580.82.07-1.0-1.x86_64.rpm
    
  • 验证驱动是否安装成功

    # 执行如下命令
    root@GPU1:~ nvidia-smi
    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.161.08             Driver Version: 535.161.08   CUDA Version: 12.2     |
    |-----------------------------------------+----------------------+----------------------+
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  Tesla T4                       On  | 00000000:3B:00.0 Off |                    0 |
    | N/A   51C    P0              29W /  70W |  12233MiB / 15360MiB |      0%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------+
    |   1  Tesla T4                       On  | 00000000:86:00.0 Off |                    0 |
    | N/A   49C    P0              30W /  70W |   6017MiB / 15360MiB |      0%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------++---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |   
    +---------------------------------------------------------------------------------------
    

    到这里我们的GPU的驱动就安装好了,系统也可以正常的识别到GPU了。这里显示的CUDA Version指的是当前驱动最大支持的CUDA版本。

开始安装CUDA Toolkit

  • 下载CUDA Toolkit

    首先下载CUDA Toolkit

    选择好自己的系统和版本

    建议下载.run文件

  • 安装CUDA Toolkit

    wget https://developer.download.nvidia.com/compute/cuda/13.0.0/local_installers/cuda_13.0.0_580.65.06_linux.run
    sudo sh cuda_13.0.0_580.65.06_linux.run# 安装成功的日志示例
    ===========
    = Summary =
    ===========Driver:   Installed
    Toolkit:  Installed in /usr/local/cuda-13.0/Please make sure that-   PATH includes /usr/local/cuda-13.0/bin-   LD_LIBRARY_PATH includes /usr/local/cuda-13.0/lib64, or, add /usr/local/cuda-13.0/lib64 to /etc/ld.so.conf and run ldconfig as rootTo uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-13.0/bin
    To uninstall the NVIDIA Driver, run nvidia-uninstall
    Logfile is /var/log/cuda-installer.log

    下载并安装即可,其实如果你没有安装NVIDIA Driver这一步会帮你安装好适合你的NVIDIA Driver,比如这个会安装580.65.06版本的Driver。

  • 配置环境变量

    vim /etc/profile.d/cuda.sh# 编辑一个新文件,内容如下:# 添加 CUDA 13.0 到 PATH
    export PATH=/usr/local/cuda-13.0/bin:$PATH# 添加 CUDA 13.0的 lib64 到 LD_LIBRARY_PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-13.0/lib64:$LD_LIBRARY_PATH
    

    保存,刷新配置文件

    source /etc/profile.d/cuda.sh

    
    检查是否部署成功
    ```markdown 
    # 如果输出版本号即为成功
    (base) root@Colourdata-GPU:~# nvcc -V
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2025 NVIDIA Corporation
    Built on Fri_Feb_21_20:23:50_PST_2025
    Cuda compilation tools, release 12.8, V12.8.93
    Build cuda_12.8.r12.8/compiler.35583870_0

二、容器环境(Docker or Containerd)

官方地址

1、安装 nvidia-container-toolkit

说明:

NVIDIA Container Toolkit 的主要作用是将 NVIDIA GPU 设备挂载到容器中。兼容docker、containerd、cri-o等。

With dnf: RHEL/CentOS, Fedora, Amazon Linux

# 配置生产存储库
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo# 安装NVIDIA Container Toolkit 软件包
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1sudo dnf install -y \nvidia-container-toolkit-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \nvidia-container-toolkit-base-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \libnvidia-container-tools-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \libnvidia-container1-${NVIDIA_CONTAINER_TOOLKIT_VERSION}

2、配置Runtime 为NVIDIA

Docker

# 配置runtime=doker
sudo nvidia-ctk runtime configure --runtime=docker# 建议在 /etc/docker/daemon.json 里面检查一下,并将默认runtime也修改为nvidia
(base) root@Colourdata-GPU:~# vim  /etc/docker/daemon.json
{"registry-mirrors": ["https://ihsxva0f.mirror.aliyuncs.com","https://docker.m.daocloud.io","https://registry.docker-cn.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "10m","max-file": "3"},"storage-driver": "overlay2","default-runtime": "nvidia","runtimes": {"nvidia": {"args": [],"path": "nvidia-container-runtime"}}
}systemctl daemon-relod 
systemctl restart docker

Containerd

# 配置runtime=containerd
sudo nvidia-ctk runtime configure --runtime=containerd# 建议在 /etc/containerd/config.toml 里面检查一下,并将默认runtime也修改为nvidia
# 修改好后重启containerd
sudo systemctl restart containerd

以上部署完成,就可以配置K8S调用GPU了。


三、K8S调用GPU

说明:

device-plugin由NVIDIA提供,官网文档。

部署Plugin

  • 建议先给GPU节点打上标签 gpu=true

  • 部署服务

    # 下载地址,建议选择新版本
    https://github.com/NVIDIA/k8s-device-plugin/blob/main/deployments/static/nvidia-device-plugin.yml# 发布服务
    root@test:~# kubectl apply -f nvidia-device-plugin.ymlroot@test:~# kubectl get po -l app=gpu -n bobai
    NAME                                   READY   STATUS    RESTARTS   AGE
    nvidia-device-plugin-daemonset-7nkjw   1/1     Running   0          10m
    
  • 检查服务是否部署成功

    # 如果可以看到nvidia gpu说明服务已经部署成功了
    root@test:~# kubectl describe node GPU | grep nvidia.com/gpunvidia.com/gpu:     2

以上部署完成后,你的K8S集群就可以调用GPU了。

三、部署服务

1、部署Deekseek-v3

示例yaml文件如下,仅供参考

apiVersion: apps/v1
kind: Deployment
metadata:name: deepseek-v3namespace: bobai
spec:replicas: 1selector:matchLabels:app: deepseek-v3template:metadata:labels:app: deepseek-v3spec:containers:- command:- sh- -c- vllm serve  --port 8000 --trust-remote-code --served-model-name deepseek-v3 --dtype=fp8  --max-model-len 65536 --gpu-memory-utilization 0.95 /models/DeepSeek-V3  name: deepseek-v3image: registry.cn-shanghai.aliyuncs.com/colourdata/bobai-dependency:vllmimagePullPolicy: IfNotPresentports:- containerPort: 8000volumeMounts:- name: model-volumemountPath: /modelsresources:requests:nvidia.com/gpu: 8memory: "16Gi"cpu: "8"limits:nvidia.com/gpu: 8memory: "32Gi"cpu: "16"livenessProbe:tcpSocket:port: 8000initialDelaySeconds: 300periodSeconds: 10failureThreshold: 3readinessProbe:tcpSocket:port: 8000initialDelaySeconds: 300periodSeconds: 10failureThreshold: 3volumes:- name: model-volumehostPath:path: /modelstype: Directory

2、qwen-embedding模型部署

示例yaml文件如下,仅供参考

apiVersion: apps/v1
kind: Deployment
metadata:name: vllm-embeddingnamespace: bobai
spec:replicas: 1selector:matchLabels:app: vllm-embeddingtemplate:metadata:labels:app: vllm-embeddingspec:containers:- command:- sh- -c- vllm serve  --port 8000 --trust-remote-code --served-model-name vllm-embedding  --max-model-len 4096 --gpu-memory-utilization 0.85 /models/Qwen3-Embedding-0.6Bname: vllm-embeddingimage: registry.cn-shanghai.aliyuncs.com/colourdata/bobai-dependency:vllmimagePullPolicy: IfNotPresentports:- containerPort: 8000volumeMounts:- name: model-volumemountPath: /modelsresources:limits:nvidia.com/gpu: 1requests:memory: "8Gi"cpu: "4"limits:memory: "16Gi"cpu: "8"livenessProbe:tcpSocket:port: 8000initialDelaySeconds: 30periodSeconds: 10failureThreshold: 3readinessProbe:tcpSocket:port: 8000initialDelaySeconds: 10periodSeconds: 5failureThreshold: 3volumes:- name: model-volumenfs:server: 192.168.2.250path: /data/bobai/modelsrestartPolicy: Always---
apiVersion: v1
kind: Service
metadata:name: vllm-embeddingnamespace: bobai
spec:type: ClusterIPports:- port: 8000protocol: TCPtargetPort: 8000selector:app: vllm-embedding

3、Tika部署

示例yaml文件如下,仅供参考

apiVersion: apps/v1
kind: Deployment
metadata:name: tikanamespace: bobai
spec:replicas: 1selector:matchLabels:app: tikatemplate:metadata:labels:app: tikaspec:containers:- name: tikaimage: tika-ocr-cn:v1imagePullPolicy: IfNotPresentports:- containerPort: 9998resources:requests:memory: "1Gi"cpu: "500m"limits:memory: "2Gi"cpu: "1"livenessProbe:tcpSocket:port: 9998initialDelaySeconds: 30periodSeconds: 10 failureThreshold: 3readinessProbe:tcpSocket:        port: 9998initialDelaySeconds: 10periodSeconds: 5failureThreshold: 3restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:name: tika-servicenamespace: bobai
spec:type: ClusterIPselector:app: tikaports:- protocol: TCPport: 9998targetPort: 9998

4、部署ASR

示例yaml文件如下,仅供参考

apiVersion: apps/v1
kind: Deployment
metadata:name: openai-edge-ttsnamespace: bobai
spec:replicas: 1selector:matchLabels:app: openai-edge-ttstemplate:metadata:labels:app: openai-edge-ttsspec:containers:- name: openai-edge-ttsimage: travisvn/openai-edge-tts:latestimagePullPolicy: IfNotPresentports:- containerPort: 5050env:- name: API_KEYvalue: "Colourdata1234@"- name: PORTvalue: "5050"- name: DEFAULT_VOICEvalue: "en-US-AvaNeural"- name: DEFAULT_RESPONSE_FORMATvalue: "mp3"- name: DEFAULT_SPEEDvalue: "1.0"- name: DEFAULT_LANGUAGEvalue: "en-US"- name: REQUIRE_API_KEYvalue: "True"- name: REMOVE_FILTERvalue: "False"- name: EXPAND_APIvalue: "True"resources:requests:memory: "512Mi"cpu: "500m"limits:memory: "1Gi"cpu: "1"livenessProbe:tcpSocket:port: 5050initialDelaySeconds: 30 periodSeconds: 10 failureThreshold: 3readinessProbe:tcpSocket:port: 5050initialDelaySeconds: 10 periodSeconds: 5  failureThreshold: 3     restartPolicy: Always---
apiVersion: v1
kind: Service
metadata:name: openai-edge-tts-servicenamespace: bobai
spec:type: ClusterIPselector:app: openai-edge-ttsports:- protocol: TCPport: 5050targetPort: 5050      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传统AI对话:悟空也辛苦(ai元人文)

悟空也辛苦 absolutely. 您这个补充至关重要,它点明了整个系统实现“智慧循环”和“责任追溯”的最后一环。我们把它整合进去。 这个“悟空中的数据备案”机制,可以称之为 “悟空的全程审计追踪” 或 “创造性过程档…

响应网站开发内容营销策略有哪些

Java异常架构与异常关键字Java异常简介Java异常架构1. Throwable2. Error(错误)3. Exception(异常)运行时异常编译时异常4. 受检异常与非受检异常受检异常非受检异常Java异常关键字Java异常处理声明异常抛出异常捕获异常如何选择异…

企业网站建设备案需要哪些资料广州网站制作公司电话

1. 注释Java中有三种注释:(1) // -单行注释,注释从“//”开始,终止于行尾;(2) -多行注释,注释从““结束;(3) -是Java特有的doc注释,这种注释主要是为支持JDK工具Javadoc而采用的。Javadoc能识…

广州个人网站制作apache 建立网站

阻塞式IO与非阻塞IO的区别 1. 阻塞式IO (Blocking I/O) 定义 当程序发起一个I/O操作(如读取文件、网络数据)时,进程会被挂起(阻塞),直到操作完成或超时才会继续执行后续代码。在此期间,程序无法…

苍穹外卖-day01(软件开发整体介绍,苍穹外卖项目介绍,开发环境搭建,导入接口文档,Swagger) - a

苍穹外卖-day01(软件开发整体介绍,苍穹外卖项目介绍,开发环境搭建,导入接口文档,Swagger) 课程内容软件开发整体介绍 苍穹外卖项目介绍 开发环境搭建 导入接口文档 Swagger项目整体效果展示:​ …

做中东市场哪个网站合适海盐网站建设

1.概念 在现实生活中,可能存在一个与你一样的自己,我们称之为双胞胎。那在创建对象的时候,可否创建一个与已存在对象一模一样的新对象呢?答案是可以的,这就要通过拷贝构造函数来实现了。 拷贝构造函数:只有…

网页设计与网站建设基础中仑建设网站

调用地图接口展示数据库录入的不同类别地址信息,提供导航服务,手机端电脑端自适应。 语音介绍使用微软的tts接口可选不同语音性别生成

网站建设对企业的影响手机网站制作报价

为什么80%的码农都做不了架构师?>>> http://bbs.csdn.net/topics/340198955 android软键盘上推ui解决 good job 转载于:https://my.oschina.net/macleo/blog/204882

9.27动手动脑及课后实验

https://files.cnblogs.com/files/blogs/847689/动手动脑及课后实验.zip?t=1758987524&download=true

Combinatorics

[ICPC 2024 Nanjing R] Bingo 先给序列排序,权值相同的钦定标号前的更小。转化成 \(Ans\le a_k\) 的情况,等价于 \(k\) 个 \(1\),\(nm-k\) 个 \(0\) 放入 \(n\times m\) 的矩阵,至少有一行或者一列是全 \(1\)。考虑…

idea必备插件

1:gitToolBox————查看每行代码提交人 2:Translation————翻译插件 3:CheckStyle-IDEA————代码规范 4:Rainbow Brackets————彩虹括号 5:Nyan Progress Bar————可爱进度条 6:HighlightBracketP…

怎么做网站的点击率深圳公司网站设计

使用c语言如何统计单词个数发布时间:2020-04-21 13:58:58来源:亿速云阅读:207作者:小新使用c语言如何统计单词个数?相信有很多人都不太了解,今天小编为了让大家更加了解Golang,所以给大家总结了…

上海做营销网站哪个公司好想网上卖家具怎么做网站

Android XML 约束布局 参考 TextView居中 TextView 垂直居中并且靠右 TextView 宽高设置百分比 宽和高的比例 app:layout_constraintDimensionRatio"h,2:1" 表示子视图的宽高比为2:1,其中 h表示保持宽度不变,高度自动调整。 最大宽度 设…

怎么做网站的后台维护淘宝官网免费开店入口

大数据系列之:腾讯云服务器性能和价格比较 一、磁盘性能和价格比较二、高性能云硬盘三、ssd云硬盘四、极速型ssd云硬盘五、增强型ssd云硬盘六、查看腾讯云服务器价格 一、磁盘性能和价格比较 磁盘名称高性能ssd云硬盘极速型ssd云硬盘增强型ssd云硬盘规格500g 5800 …

NTT

[ICPC 2024 Nanjing R] Bingo 先给序列排序,权值相同的钦定标号前的更小。转化成 \(Ans\le a_k\) 的情况,等价于 \(k\) 个 \(1\),\(nm-k\) 个 \(0\) 放入 \(n\times m\) 的矩阵,至少有一行或者一列是全 \(1\)。考虑…

绘制倒杨辉三角形

目标输出:分析: 这个问题与普通输出杨辉三角形差别不大,但我没输出过正杨辉三角形。这里的核心思想在于对数组的处理。 实现代码: include<stdio.h> int main() { int row; scanf_s("%d", &ro…

织梦cms sql注入破解网站后台管理员账号密码艺术学校网站模板

该系统利用python语言、MySQL数据库&#xff0c;flask框架&#xff0c;结合目前流行的 B/S架构&#xff0c;将stone音乐播放器的各个方面都集中到数据库中&#xff0c;以便于用户的需要。该系统在确保系统稳定的前提下&#xff0c;能够实现多功能模块的设计和应用。该系统由管理…

ABC425 总结

E 模数不是质数。EXCRT? 考虑排好了前 \(i-1\) 个颜色,插入第 \(i\) 个颜色的方案数。定义 \(sum=\sum_{k=1}^{i-1}{C_k}\),由插板法得答案为 \(\dbinom{sum}{C_i}\)。把每种颜色的答案相乘即可。代码。 F 状压 DP,…

解决方案 | 无需安装任何插件,chrome如何快速搜索书签

这里的三个方法挺好:https://www.cnblogs.com/miracle-luna/p/16211893.html 但是需要切换页面,我认为有点麻烦。要想不切换页面,那么可以按照下面3步即可实现快速搜索。一、点击chrome右上角的“所有书签” 二、打…