自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(131)
  • 收藏
  • 关注

原创 HAMi vGPU 原理分析 Part4:Spread&Binpack 高级调度策略实现

本文分析了HAMi调度器(v2.4.0)中Spread和Binpack高级调度策略的实现原理。HAMi通过节点调度策略(nodeSchedulerPolicy)和GPU调度策略(gpuSchedulerPolicy)两个维度控制资源分配方式。节点调度策略支持binpack(尽量集中)和spread(尽量分散)两种模式,通过helm部署时配置。核心调度逻辑在Filter接口中实现,包括资源需求计算、节点使用情况分析、以及基于策略的评分机制。HAMi采用k8s扩展调度器模式,通过webhook修改Pod调度器名

2025-09-09 12:24:46 646

原创 HAMi vGPU 原理分析 Part3:hami-scheduler 工作流程分析

本文分析了HAMi中的hami-scheduler工作流程。hami-scheduler通过Scheduler Extender方式实现自定义调度逻辑,主要包含以下关键点:1)Webhook将申请vGPU资源的Pod调度器改为hami-scheduler;2)hami-scheduler使用原生kube-scheduler镜像并配置Extender插件;3)Extender服务实现核心调度逻辑,包括资源计算和节点选择;4)异步任务负责GPU资源感知和节点Annotations更新。调度器支持spread和b

2025-07-31 09:26:49 842

原创 HAMi vGPU 原理分析 Part2:hami-webhook 原理分析

HAMi Scheduler原理分析:Webhook机制 本文是HAMi原理分析系列的第二篇,重点解析hami-scheduler的实现机制。HAMi通过自定义调度器hami-scheduler实现vGPU资源调度,并支持spread和binpack等高级调度策略。 核心内容: Webhook机制:HAMi通过MutatingWebhook自动修改Pod的调度器名称,确保使用vGPU的Pod由hami-scheduler调度 组件架构:hami-scheduler包含两个组件:hami-webhook(处理

2025-07-24 13:37:13 1080

原创 K8s 自定义调度器 Part1:通过 Scheduler Extender 实现自定义调度逻辑

摘要:本文介绍了如何通过Scheduler Extender扩展Kubernetes调度器实现自定义调度策略。K8s默认调度器通过spec.schedulerName支持多调度器,自定义调度逻辑可满足GPU分配、资源均衡、地理调度等特殊需求。扩展方法主要包括:1)基于调度框架开发新调度器;2)通过Scheduler Extender以HTTP服务扩展原调度器。后者通过配置KubeSchedulerConfiguration的extenders字段,实现零侵入式扩展,支持filter、prioritize和b

2025-07-16 13:49:41 1032

原创 开源 vGPU 方案 HAMi 原理分析 Part1:hami-device-plugin-nvidia 实现

本文分析了开源vGPU方案HAMi中的设备插件hami-device-plugin-nvidia实现原理。作为系列第一篇,重点解读了该插件的核心功能:与NVIDIA原生device-plugin不同,HAMi自定义实现是为了支持vGPU细粒度切分。文章从程序入口开始,介绍了基于CLI的启动命令配置,并指出分析device-plugin需要关注的三个关键环节:Register注册逻辑、ListAndWatch设备感知机制以及Allocate分配策略。后续将深入这些核心模块的实现细节,揭示HAMi如何通过定制设

2025-07-09 09:33:54 849

原创 开源 vGPU 方案 HAMi: core&memory 隔离测试

本文测试了开源vGPU方案HAMi的GPU核心与显存隔离功能。测试环境采用A40 GPU、K8s v1.23.17和HAMi v2.3.13,通过PyTorch的imagenet训练脚本验证隔离效果。 测试结果显示: 核心隔离:Pod实际使用的算力围绕设定值波动,但长期平均值与申请的gpucores基本一致; 显存隔离:当Pod申请超过设定的GPU显存时,会直接触发CUDA OOM错误。 测试方法是通过配置不同算力比例(30%和60%)的vGPU Pod,观察训练任务耗时变化。需注意需设置环境变量GPU_C

2025-07-04 09:16:32 942

原创 K8s v1.31 新特性:ImageVolume,允许将镜像作为 Volume 进行挂载

Kubernetes 1.31 引入了 ImageVolume 新特性(Alpha阶段),允许将OCI镜像直接挂载为Volume,从而加速AI/ML场景中的模型权重等工件分发。该功能解决了传统PVC存储跨命名空间重复下载大模型的问题,提升效率。使用前需部署Kubernetes 1.31集群并启用ImageVolume特性门控,目前仅CRI-O运行时支持。通过简单的YAML配置即可将镜像挂载到Pod中访问文件内容,为AI工作负载提供了更灵活的存储方案。

2025-06-18 13:17:45 408

原创 开源 vGPU 方案:HAMi,实现细粒度 GPU 切分

本文介绍了一种开源的GPU虚拟化方案HAMi(Heterogeneous AI Computing Virtualization Middleware)。相比于传统的TimeSlicing方案,HAMi不仅支持GPU共享,还能对GPU核心和显存进行细粒度隔离与限制(1%级别),确保各Pod获得相应资源。HAMi采用vCUDA方案,通过拦截CUDA/NVML API实现资源控制,当Pod使用超过申请量时会直接返回OOM。文章详细说明了HAMi的安装流程,包括先部署GPU Operator,再通过Helm添加r

2025-06-06 12:30:14 2337

原创 一文搞懂 GPU 共享方案: NVIDIA Time Slicing

本文介绍了GPU共享方案,特别是NVIDIA的Time Slicing技术,旨在通过超额订阅(oversubscription)实现多个Pod共享同一物理GPU,从而提升资源利用率。文章详细阐述了Time Slicing的配置步骤,包括创建Time Slicing配置、修改集群策略以启用Time Slicing,以及可选地为不同节点打上标签以应用不同策略。通过这种方式,可以在Kubernetes环境中实现GPU资源的共享,避免资源浪费。尽管Time Slicing方案存在内存和故障隔离的不足,但其简单易用的

2025-05-13 12:18:11 832

原创 大模型微调实战:通过 LoRA 微调修改模型自我认知

本文主要分享如何使用 LLaMAFactory 实现大模型微调,基于 Qwen1.5-1.8B-Chat 模型进行 LoRA 微调,修改模型自我认知。more本文的一个目的:基于模型进行微调,修改模型自我认证。修改前对于模型,用户问你是谁?时模型一般会回答我们希望在微调之后,对于同样的问题,模型能回答。

2025-04-16 12:46:59 789

原创 大模型微调基本概念指北

大模型微调,通常指有监督微调(Supervised Fine-Tuning, SFT),是在预训练模型(一般称为“基座模型”)的基础上进行的训练过程。预训练模型通常已经掌握了广泛的语言知识和语义表示,但为了让模型在特定任务或领域上表现得更好,我们会在特定任务的数据集上对其进行微调。1)Language Model,LM:一个预训练语言模型 LM,对基础模型微调得到一个微调后的模型使用人工标注的数据对预训练模型进行监督微调,以获得初始版本的生成模型。2)

2025-01-16 13:40:40 1495

原创 基于 Admission Webhook 实现 Pod DNSConfig 自动注入

本文主要分享如何使用 基于 Admission Webhook 实现自动修改 Pod DNSConfig,使其优先使用 NodeLocalDNS。more。

2025-01-09 12:44:17 981

原创 使用 NodeLocalDNS 提升集群 DNS 性能和可靠性

是一套 DNS 本地缓存解决方案。NodeLocal DNSCache 通过在集群节点上运行一个 DaemonSet 来提高集群 DNS 性能和可靠性。通过 dnsConfig 字段自定义Pod的dns配置,nameservers 中除了指定 NodeLocalDNS 之外还指定了 KubeDNS,这样即使 NodeLocalDNS 异常也不影响 Pod 中的 DNS 解析。

2025-01-06 13:36:29 837

原创 在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析

在 两篇文章中分别分享了在不同环境如何使用 GPU,以及在 k8s 中使用 GPU Operator 来加速部署。在 中则是分析了 Device Plugin 的实现原理。宿主机上的 GPU 是怎么能够被 K8s 中的 Pod 使用的。1)k8s 是如何感知到 GPU 的2)GPU 是如何分配给 Pod 的。

2024-12-19 15:04:00 1842

原创 自定义资源支持:K8s Device Plugin 从原理到实现

本文主要分析 k8s 中的 device-plugin 机制工作原理,并通过实现一个简单的 device-plugin 来加深理解。

2024-12-13 12:17:36 1282

原创 大模型推理指南:使用 vLLM 实现高效推理

大模型推理有多种方式比如最基础的 HuggingFace TransformersTGIvLLM其中,热度最高的应该就是 vLLM,性能好的同时使用也非常简单,本文就分享一下如何使用 vLLM 来启动大模型推理服务。根据 vLLM 官方博客所说:进行了 NVIDIA A10 GPU 上推理 LLaMA-7 B 和 在 NVIDIA A100 GPU(40 GB)上推理 LLaMA-13 B 两个实验,

2024-11-21 14:31:58 3004

原创 GPU 环境搭建指南:使用 GPU Operator 加速 Kubernetes GPU 环境搭建

上一篇文章GPU 使用指南:如何在裸机、Docker、K8s 等环境中使用 GPU分享了裸机、Docker 环境以及 K8s 环境中如何使用 GPU。整个流程还算比较简单,但是因为需要在节点上安装 GPU Driver、Container Toolkit 等组件,当集群规模较大时还是比较麻烦的。为了解决这个问题,NVIDIA 推出了。

2024-11-14 12:54:12 926

原创 GPU 环境搭建指南:如何在裸机、Docker、K8s 等环境中使用 GPU

仅以比较常见的 NVIDIA GPU 举例,系统为 Linux,对于其他厂家的 GPU 设备理论上流程都是一样的。省流:对于裸机环境,只需要安装对应的 GPU Driver 以及 CUDA Toolkit。对应 Docker 环境,需要额外安装 nvidia-container-toolkit 并配置 docker 使用 nvidia runtime。

2024-11-07 08:48:12 2649

原创 ArgoWorkflow教程(八)---基于 LifecycleHook 实现流水线通知提醒

本篇介绍一下 ArgoWorkflow 中的 ExitHandler 和 LifecycleHook 功能,可以根据流水线每一步的不同状态,执行不同操作,一般用于发送通知。比如当某个步骤,或者某个 Workflow 执行失败时,发送邮件通知。

2024-10-29 13:26:48 996

原创 ArgoWorkflow教程(七)---高效的步骤间文件共享策略

然后就是之前只分析了 Workflow、WorkflowTemplate 、template 3 者之间如何传递参数,今天继续分析一下步骤之间如何传递参数。要实现步骤间参数传递,需要实现两个功能:1)导出结果2)导入参数导出结果:将参数写入文件,然后以 artifact 保存到 s3导入参数:下一个 step 下载 artifact 并从中获取参数。确实可以实现功能,但是有点蹩脚,毕竟 artifact 主要是用于保存文件的。

2024-10-22 13:37:34 788

原创 ArgoWorkflow教程(六)---无缝实现步骤间参数传递

然后就是之前只分析了 Workflow、WorkflowTemplate 、template 3 者之间如何传递参数,今天继续分析一下步骤之间如何传递参数。要实现步骤间参数传递,需要实现两个功能:1)导出结果2)导入参数导出结果:将参数写入文件,然后以 artifact 保存到 s3导入参数:下一个 step 下载 artifact 并从中获取参数。确实可以实现功能,但是有点蹩脚,毕竟 artifact 主要是用于保存文件的。

2024-10-10 13:33:57 1124

原创 ArgoWorkflow教程(五)---Workflow 的多种触发模式:手动、定时任务与事件触发

手动触发:手动提交一个 Workflow,就会触发一次构建,那么我们创建的流水线,理论上是 WorkflowTemplate 对象。,类似于 k8s 中的 job 和 cronjob,CronWorkflow 会定时创建 Workflow 来实现定时触发。Event 事件触发:比如通过git commit 触发,借助可以实现此功能。

2024-09-25 09:08:01 1763

原创 ArgoWorkflow教程(四)---Workflow & 日志归档

运行记录使用 Workflow CR 对象存储运行日志则存放在 Pod 中,通过 kubectl logs 方式查看因此需要保证 Pod 不被删除,否则就无法查看了但是也正因为所有数据都存放在集群中,当数据量大之后etcd存储压力会很大,最终影响到集群稳定性。为了解决该问题 ArgoWorkflow 提供了归档功能,将历史数据归档到外部存储,以降低 etcd 的存储压力。1)将 Workflow 对象会存储到 Postgres(或 MySQL)

2024-09-13 12:23:46 1616

原创 ArgoWorkflow教程(三)---使用 Artifacts 实现步骤间文件共享

上一篇我们分析了 Workflow、WorkflowTemplate、template 之间的关系。本篇主要分析如何在 argo-workflow 中使用 S3 存储 artifact 实现步骤之间的文件共享。more。

2024-08-29 12:55:48 1499 1

原创 ArgoWorkflow教程(二)---快速构建流水线:Workflow & Template 概念

上一篇我们部署了 ArgoWorkflow,并创建了一个简单的流水线做了个 Demo。本篇主要分析 ArgoWorkflow 中流水线相关的概念,了解概念后才能更好使用 ArgoWorkflow。

2024-08-20 12:39:24 2034

原创 ArgoWorkflow 教程(一)--DevOps 另一选择?云原生 CICD 初体验

本文主要记录了如何在 k8s 上快速部署云原生的工作流引擎 ArgoWorkflow。

2024-08-06 13:55:02 1047

原创 从零开始写 Docker(十九)---增加 cgroup v2 支持

本篇主要添加对 cgroup v2 的支持,自动识别当前系统 cgroup 版本。

2024-07-24 09:12:00 10056

原创 Linux-Cgroup V2 初体验

本文主要记录 Linux Cgroup V2 版本基本使用操作,包括 cpu、memory 子系统演示。more。

2024-07-11 14:15:41 1413

原创 基于 Cloudflare Workers 和 cloudflare-docker-proxy 搭建镜像加速服务

本文主要介绍了如何基于 Cloudflare Workers 和 cloudflare-docker-proxy 搭建 dockerhub、gcr、quay 等镜像加速服务。

2024-06-24 09:36:04 2146

原创 从零开始写 Docker(十八)---容器网络实现(下):为容器插上”网线“

本文为从零开始写 Docker 系列第十八篇,利用 linux 下的 Veth、Bridge、iptables 等等相关技术,构建容器网络模型,为容器插上”网线“。

2024-06-13 13:43:27 1095 1

原创 从零开始写 Docker(十七)---容器网络实现(中):为容器插上”网线“

本文为从零开始写 Docker 系列第十六篇,利用 linux 下的 Veth、Bridge、iptables 等等相关技术,构建容器网络模型,为容器插上”网线“。

2024-06-05 08:55:58 991

原创 从零开始写 Docker(十六)---容器网络实现(上):为容器插上”网线”

本文为从零开始写 Docker 系列第十六篇,利用 linux 下的 Veth、Bridge、iptables 等等相关技术,构建容器网络模型,为容器插上”网线“。

2024-05-28 12:37:49 1382

原创 从零开始写 Docker(十五)---实现 mydocker run -e 支持环境变量传递

本文为从零开始写 Docker 系列第十五篇,实现 `mydocker run -e`, 支持在启动容器时指定环境变量,让容器内运行的程序可以使用外部传递的环境变量。

2024-05-24 10:10:21 636

原创 从零开始写 Docker(十四)---重构:实现容器间 rootfs 隔离

本文为从零开始写 Docker 系列第十四篇,实现容器间的 rootfs 隔离,使得多个容器间互不影响。

2024-05-10 12:48:58 1157 1

原创 从零开始写 Docker(十三)---实现 mydocker rm 删除容器

本文为从零开始写 Docker 系列第十三篇,实现类似 `docker rm` 的功能,使得我们能够删除容器。

2024-05-09 12:16:18 637

原创 从零开始写 Docker(十二)---实现 mydocker stop 停止容器

本文为从零开始写 Docker 系列第十二篇,实现类似 `docker stop` 的功能,使得我们能够停止指定容器。

2024-04-25 09:32:27 568 1

原创 从零开始写 Docker(十一)---实现 mydocker exec 进入容器内部

本篇主要实现,让我们可以直接进入到容器内部,查看容器内部的文件、调试应用程序、执行命令等等。

2024-04-16 12:37:05 892

原创 从零开始写 Docker(十)---实现 mydocker logs 查看容器日志

本文为从零开始写 Docker 系列第十篇,实现类似 docker logs 的功能,使得我们能够查查看容器日志。

2024-04-09 12:40:25 1108

原创 从零开始写 Docker(九)---实现 mydocker ps 查看运行中的容器

本文为从零开始写 Docker 系列第九篇,实现类似 docker ps 的功能,使得我们能够查询到后台运行中的所有容器。

2024-03-26 12:34:53 1045

原创 从零开始写 Docker(八)---实现 mydocker run -d 支持后台运行容器

经过前面的 7 篇文章,我们已经基本实现了一个简单的 docker 了。不过与 Docker 创建的容器相比,我们还缺少以下功能1)指定后台运行容器,也就是 detach 功能2)通过 docker ps 查看目前处于运行中的容器3)通过docker logs 查看容器的输出4)通过 docker exec 进入到一个已经创建好了的容器中后续几篇文章主要就是一一实现这些功能,本文首先实现让容器后台运行。

2024-03-21 12:43:22 984

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除