自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一文搞懂 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 610

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

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

2025-04-16 12:46:59 682

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

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

2025-01-16 13:40:40 1199

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

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

2025-01-09 12:44:17 899

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

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

2025-01-06 13:36:29 665

原创 在 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 1529

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

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

2024-12-13 12:17:36 957

原创 大模型推理指南:使用 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 2244

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

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

2024-11-14 12:54:12 661

原创 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 2385

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

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

2024-10-29 13:26:48 879

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

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

2024-10-22 13:37:34 669

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

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

2024-10-10 13:33:57 936

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

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

2024-09-25 09:08:01 1457

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

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

2024-09-13 12:23:46 1270

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

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

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

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

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

2024-08-20 12:39:24 1560

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

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

2024-08-06 13:55:02 862

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

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

2024-07-24 09:12:00 5951

原创 Linux-Cgroup V2 初体验

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

2024-07-11 14:15:41 728

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

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

2024-06-24 09:36:04 1788

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

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

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

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

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

2024-06-05 08:55:58 914

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

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

2024-05-28 12:37:49 1344

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

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

2024-05-24 10:10:21 526

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

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

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

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

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

2024-05-09 12:16:18 611

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

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

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

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

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

2024-04-16 12:37:05 732

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

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

2024-04-09 12:40:25 1070

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

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

2024-03-26 12:34:53 1002

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

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

2024-03-21 12:43:22 954

原创 从零开始写 Docker(七)---实现 mydocker commit 打包容器成镜像

由于之前使用 pivotRoot + overlayfs 技术 将目录作为容器的 rootfs,因此容器中的所有改动都发生在该目录下。这里我们的命令只需要把该目录保存下来即可,因此简单实现为 使用 tar 命令将目录打成 tar 包本篇 mydocker commit 比较简单,就是使用 tar 命令将 rootfs 直接进行打包,没有太多需要注意的地方。

2024-03-19 10:03:29 861

原创 从零开始写 Docker(六)---实现 mydocker run -v 支持数据卷挂载

上一篇中基于 overlayfs 实现了容器和宿主机文件系统间的写操作隔离。但是一旦容器退出,容器可读写层的所有内容都会被删除。那么,如果用户需要持久化容器里的部分数据该怎么办呢?docker volume 就是用来解决这个问题的。启动容器时通过-v参数创建 volume 即可实现数据持久化。本节将会介绍如何实现将宿主机的目录作为数据卷挂载到容器中,并且在容器退出后,数据卷中的内容仍然能够保存在宿主机上。具体实现主要依赖于 linux 的 bind mount 功能。bind mount。

2024-03-14 13:05:57 1187

原创 从零开始写 Docker(五)---基于 overlayfs 实现写操作隔离

上一篇中已经实现了使用宿主机 /root/busybox 目录作为容器的根目录,但在容器内对文件的操作仍然会直接影响到宿主机的 /root/busybox 目录。本节要进一步进行容器和镜像隔离,实现在容器中进行的操作不会对镜像(宿主机/root/busybox目录)产生任何影响的功能。overlayfs 是 UFS 的一种实现,UnionFS 全称为 Union File System ,是一种为 Linux FreeBSD NetBSD 操作系统设计的,把其他文件系统联合到一个联合挂载点的文件系统服务。

2024-03-12 13:19:30 735

原创 从零开始写 Docker(四)---使用 pivotRoot 切换 rootfs 实现文件系统隔离

前面几节中,我们通过Namespace和Cgroups技术创建了一个简单的容器,实现了视图隔离和资源限制。但是大家应该可以发现,容器内的目录还是当前运行程序的宿主机目录,而且如果运行一下 mount 命令可以看到继承自父进程的所有挂载点。这貌似和平常使用的容器表现不同因为这里缺少了镜像这么一个重要的特性。Docker 镜像可以说是一项伟大的创举,它使得容器传递和迁移更加简单,那么这一节会做一个简单的镜像,让容器跑在有镜像的环境中。本章会为我们切换容器的 rootfs,以实现文件系统的隔离。

2024-03-05 13:01:09 941

原创 从零开始写 Docker(三)---基于 cgroups 实现资源限制

本文为从零开始写 Docker 系列第三篇,在`mydocker run` 基础上基于 cgroups 实现容器的资源限制。

2024-03-01 09:49:00 879

原创 从零开始写 Docker(二)---优化:使用匿名管道传递参数

匿名管道是一种特殊的文件描述符,用于在父进程和子进程之间创建通信通道。有以下特点:管道有一个固定大小的缓冲区,一般是4KB。这种通道是单向的,即数据只能在一个方向上流动。当管道被写满时,写进程就会被阻塞,直到有读进程把管道的内容读出来。同样地,当读进程从管道内拿数据的时候,如果这时管道的内容是空的,那么读进程同样会被阻塞,一直等到有写进程向管道内写数据。是不是和 Go 中的 Channel 很像。

2024-02-26 12:57:51 745

原创 从零开始写 Docker(一)---实现 mydocker run 命令

本文为从零开始写 Docker 系列第一篇,主要实现 mydocker run 命令,构造了一个具有基本的 Namespace 隔离的简单容器。

2024-02-22 14:09:28 892

原创 揭秘 Docker 网络:手动实现 Docker 桥接网络

本文将带领读者探索 Docker 桥接网络模型的内部机制,通过 veth pair、bridge、iptables 等关键技术手动实现 Docker 桥接网络模型,揭示网络背后的运作原理。

2024-01-30 12:30:01 852

空空如也

空空如也

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

TA关注的人

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