- 博客(272)
- 收藏
- 关注
原创 CRI-O 解析与实践(半成品)
本文介绍了CRI-O的核心概念与实操流程。CRI-O是专为Kubernetes设计的轻量级容器运行时,严格遵循K8s版本周期,具有资源占用低的优势。文章详细讲解了CRI-O的三层架构,并提供了完整的实操指南:从创建Pod沙箱、运行Nginx工作容器到验证容器状态。通过crictl和runc命令演示了容器生命周期管理,包括沙箱创建、镜像拉取、容器启动及状态检查等核心操作步骤,帮助读者全面掌握CRI-O的使用方法。
2025-08-19 15:25:22
1040
原创 runc 详解
摘要:本文介绍了OCI运行时规范及runc工具的使用。通过示例展示了如何安装相关工具(runc、jq、skopeo、umoci),生成配置规范,以及从Docker镜像转换OCI格式并解压为可运行的bundle。重点解析了config.json文件的关键配置项,包括进程设置、挂载点、命名空间等。最后演示了使用recvtty创建终端socket,并通过runc创建容器(状态为created)。这些操作展示了容器底层技术的关键环节,包括镜像格式转换、配置规范和运行时控制。
2025-08-19 14:12:44
997
原创 浅析容器运行时
容器运行时是管理容器生命周期的软件组件,主要分为三类:低级运行时(如runc)仅负责进程隔离和资源限制,依赖内核Namespace/CGroup;高级运行时(如Containerd)在此基础上整合镜像管理、网络存储等功能,支持OCI规范;沙盒/虚拟化运行时(如Kata)通过轻量级虚拟化增强隔离性,适合高安全场景。三类运行时在功能复杂度、隔离性和性能开销上存在显著差异,适用于不同场景。低级运行时轻量灵活但功能单一,高级运行时功能全面但较复杂,沙盒运行时安全性强但性能损耗大。
2025-08-18 15:05:06
607
原创 命名空间——时间 (time)
Linux内核5.6引入的Time命名空间实现了进程组时间隔离,允许不同命名空间拥有独立的墙上时间和单调时间视图。通过sudo unshare -T命令可创建新的Time命名空间,在其中修改时间不会影响其他命名空间。/proc/[PID]/ns/目录中的time和time_for_children文件分别控制当前进程和子进程的时间视图,实现更精细的时间隔离管理。该特性为容器等隔离环境提供了独立的时间流支持。
2025-08-16 12:12:16
344
原创 命名空间——控制组群(cgroup)
本文介绍了Linux内核中的cgroup(控制组)机制,它通过资源限制和监控来管理进程资源使用。cgroup支持内存、CPU、磁盘I/O等资源控制,与命名空间配合实现容器的"隔离+限制"功能。文章详细解析了三个cgroup应用实例:限制进程内存使用、绑定特定CPU核心、控制CPU利用率,展示了通过文件系统配置cgroup的方法。cgroup的核心价值在于防止进程过度占用资源,确保系统稳定性和资源合理分配,是容器技术实现资源限制的基础。
2025-08-15 10:16:18
981
原创 命名空间——用户ID(user)
摘要: 用户命名空间(User Namespace)是Linux实现UID/GID权限隔离的核心机制,通过uid_map和gid_map建立内外身份映射,使进程在命名空间内部可拥有root权限(如容器内),而外部仅保留普通用户权限(主机上)。这种“内外权限分离”特性支持无根容器(rootless container),既满足容器内系统操作需求,又避免主机权限泄露。关键机制包括ID映射转换、溢出用户(65534/nobody)处理及setgroups权限限制,最终实现安全隔离——进程“在容器内当root,在主
2025-08-14 16:05:35
742
原创 命名空间——进程间通信(ipc)和UNIX 分时系统 (uts)
本文介绍了Linux中的两种命名空间机制:IPC命名空间和UTS命名空间。IPC命名空间用于隔离进程间通信资源(如共享内存、消息队列等),防止不同进程间的标识符冲突和安全风险,在容器技术中实现进程间的安全隔离。UTS命名空间则专门隔离主机名和域名,使不同进程组拥有独立的主机标识,这对容器模拟独立系统环境至关重要。两种命名空间机制都是Linux容器实现隔离的关键技术,分别解决了通信资源隔离和身份标识隔离的问题。
2025-08-14 15:59:44
1090
原创 命名空间——网络(net)
网络命名空间是Linux中的虚拟网络隔离技术,每个命名空间拥有独立的网卡、IP地址和路由表。通过ip netns命令可创建和管理持久化命名空间,使用veth对(虚拟网线)连接不同命名空间实现通信。操作包括:创建命名空间、配置环回接口、建立veth连接、分配IP地址并测试连通性。容器技术(如Docker)正是利用这种机制实现网络隔离。网络命名空间的核心价值在于为进程提供相互隔离又能按需连通的虚拟网络环境。(149字)
2025-08-14 15:48:05
710
原创 命名空间——进程ID(pid)
摘要: PID命名空间通过独立的进程编号体系实现进程隔离,使不同命名空间的进程拥有重复但互不可见的PID。核心特性包括:进程具有局部PID和全局PID、命名空间可嵌套、PID=1进程承担类似init的角色。unshare -fp --mount-proc命令创建新PID命名空间并重新挂载/proc,确保隔离效果可见(ps仅显示当前命名空间进程)。容器技术利用此原理实现进程隔离,容器内PID=1进程与主机完全隔离。演示实验显示,新命名空间内bash进程PID=1,而主机视角下该进程具有不同全局PID。
2025-08-14 15:47:03
815
原创 命令空间相关API
本文介绍了Linux内核中的命名空间机制及其相关API。主要内容包括: Linux目前实现的8种命名空间(PID、Mount、UTS、IPC、Network、User、Cgroup、Time)及其隔离功能和典型应用场景。 三个核心系统调用: clone():创建新进程时附带创建新命名空间 unshare():让当前进程脱离共享并创建新命名空间 setns():让当前进程加入已有命名空间 三者的区别:clone()创建新进程和新命名空间,unshare()仅创建新命名空间,setns()则加入现有命名空间,不
2025-08-14 15:03:38
734
原创 命名空间——挂载 (mnt)
tmpfs虽然在内存中,但不同挂载命名空间的tmpfs是完全隔离的,即使挂载点目录名称相同,内容也不互通。只有让进程“加入同一个挂载命名空间”,才能共享该命名空间内的tmpfs挂载点及其中的文件(通过nsenter命令实现)。同名目录不等于同一资源,关键看是否在同一个命名空间中。不同命名空间的进程,看到的挂载点(文件系统结构)可以完全不同;通过或unshare -m可以创建新的挂载命名空间;它是容器实现“独立文件系统”的底层技术之一。
2025-08-14 14:56:25
987
原创 k8s之CSI 卷挂载问题:同一Pod中挂载多个相同远程存储的隐含限制
CSI卷挂载冲突问题分析 问题现象:当同一Pod挂载多个具有相同CSI驱动和卷句柄的远程存储时,容器会卡在ContainerCreating状态,仅部分卷能成功挂载。 根本原因: CSI卷的唯一标识由驱动名称和卷句柄组合生成(格式:kubernetes.io/csi/<驱动名称>^<卷句柄>) 相同配置的CSI卷会生成相同的唯一卷名 系统内部desiredStateOfWorld数据结构会去重处理,仅保留一个卷条目 但校验阶段仍要求所有声明卷都挂载,导致无限等待 关键代码逻辑: 卷名
2025-08-11 14:27:00
422
原创 开源协议简介
开源协议是开源软件的使用规则,规定了代码的使用、修改和分享方式。常见协议分为三类:松散型(如MIT、Apache 2.0),要求保留版权声明但允许闭源;强著作权型(如GPL v2),具有传染性,要求衍生作品必须开源;弱著作权型(如LGPL、MPL),仅修改部分需开源。核心区别在于对衍生代码的开源义务,用户可根据需求选择合适的协议。
2025-08-11 14:03:16
568
原创 开源vGPU解决方案HAMi
摘要:开源vGPU解决方案HAMi通过技术创新实现K8s集群中GPU资源共享,解决了原生NVIDIA Device Plugin独占式分配导致的资源利用率低问题。其核心组件包括改造的Device Plugin(支持设备复制与驱动替换)和自定义调度器(提供精细化的Spread/Binpack策略),通过libvgpu.so拦截CUDA API实现显存和算力限制。虽然存在软件隔离不完全和约5-10%性能损耗的局限,但HAMi为中小规模AI任务提供了高性价比的GPU共享方案,显著提升了资源利用率。(149字)
2025-08-01 17:53:10
841
原创 k8s之NDS解析到Ingress服务暴露
本文系统解析了 Kubernetes 服务发现与外部访问机制。首先介绍了 Kubernetes 内部服务域名的组成规则及其屏蔽 Pod IP 变化的核心作用。接着详细剖析了 Pod 的 DNS 配置原理,包括 /etc/resolv.conf 的搜索路径、DNS 服务器和 ndots 参数,以及通过 dnsPolicy 和 dnsConfig 自定义 DNS 的方法。最后对比了两种服务暴露方案:生产环境推荐的 Ingress Controller 实现外部域名到内部服务的映射,以及独立 Nginx 反向代理
2025-08-01 16:33:34
909
原创 k8s之DevicePlugin
摘要: Kubernetes Device Plugin 是连接容器与特殊硬件(如 GPU、FPGA)的关键机制。它通过设备发现与注册、资源分配调度以及容器资源注入三大功能,解决容器因隔离性无法直接访问硬件的问题。工作流程包括插件注册、资源上报和动态分配,使 Kubernetes 能像管理 CPU 一样调度特殊硬件。该机制为 AI、边缘计算等场景提供了标准化硬件访问方案,拓展了容器技术的应用边界。(150字)
2025-08-01 14:42:10
891
2
原创 GoFrame——基于GoFrame框架实现的配置文件初始化与读取工具
本文介绍了基于GoFrame框架实现的配置文件初始化与读取工具。代码通过g.Cfg()单例对象和文件适配器机制,支持自定义配置文件路径覆盖框架默认查找逻辑。核心功能包括:1) Init函数验证并初始化指定配置文件;2) 封装Array/Map/String方法简化配置读取和类型转换;3) 统一错误处理与日志记录。该工具既保留了GoFrame自动查找配置的便利性,又支持多环境部署时的手动路径指定,适用于需要灵活管理配置文件的场景。
2025-08-01 11:28:28
795
原创 GoFrame——基于 GoFrame 框架实现的一套上下文日志增强工具
本文介绍了一个基于GoFrame框架的上下文日志增强工具,主要功能是将追踪ID和业务变量自动关联到日志中。该工具通过定义全局日志实例和上下文键值常量,使用指针存储实现上下文值的原地更新,避免频繁创建新对象。核心功能包括初始化日志配置、设置上下文信息、输出自动增强的日志记录。设计亮点包括上下文与日志联动、性能优化、可扩展性和单例模式,特别适用于微服务和分布式系统,能有效提升日志追踪和问题排查效率。
2025-08-01 11:24:16
537
原创 Golang 指针
本文深入浅出地介绍了Go语言中指针的概念和使用方法。首先通过内存地址的比喻解释了指针的本质,详细讲解了&运算符的取地址功能及其限制条件。接着剖析了*运算符的双重用法:定义指针类型和解引用指针,并通过生活类比帮助理解。文章还阐述了指针的核心作用——解决值传递的局限性,并介绍了new()函数创建指针的方式。最后总结了指针使用中的常见误区和注意事项,提供了一套清晰的"核心公式"来帮助记忆和运用指针。全文通过丰富的代码示例和生动的比喻,使抽象的指针概念变得直观易懂。
2025-07-31 19:05:54
942
1
原创 k8s之持久化存储流程
摘要: Kubernetes 中 Pod 挂载存储卷需经历 Provision/Delete(创盘/删盘)、Attach/Detach(挂接/摘除)和 Mount/Unmount(挂载/卸载) 三阶段。动态卷供应流程中,用户创建 PVC 后,PersistentVolumeController 检测到未绑定 PVC 并触发 External Provisioner,后者通过 CSI 插件创建实际存储并生成 PV,最终完成 PV-PVC 绑定。静态场景(如手动创建 PV 或未关联 StorageClass)不
2025-07-16 15:11:46
1082
1
原创 k8s之Snapshots 详解
在Kubernetes中,Volume Snapshots(卷快照) 是一项关键的存储功能,用于创建持久卷(PV)的时间点副本。这一特性通过CSI(容器存储接口) 实现,并引入了一组新的API资源来管理快照生命周期。本文将详细讲解Kubernetes中的Volume Snapshots相关概念、工作原理及使用方法。Kubernetes通过以下CRD(自定义资源定义)管理卷快照:类似于,定义了创建快照的存储后端配置和删除策略。② 用户创建的快照请求,指向一个现有的PVC(PersistentVolumeC
2025-07-15 18:35:35
543
原创 k8s之Attach 和 Mount
状态初始化从 Pod 中收集卷信息,更新期望状态状态对比reconciler周期性比较期望状态和实际状态卸载操作:对不再需要的卷执行卸载挂载操作:对新增卷或需要更新的卷执行挂载状态更新:挂载/卸载成功后更新实际状态错误处理:处理挂载/卸载过程中的各种异常情况通过这种双缓存、周期性同步的机制,Kubernetes 确保了节点上卷的状态始终与期望状态一致。
2025-07-15 18:18:50
774
原创 《AI系统》分布式优化器精讲
本文系统讲解了分布式优化器的核心技术与演进路线。重点分析了ZeRO技术的三级优化策略(ZeRO-1/2/3)及其内存降幅与通信开销,介绍了突破物理限制的ZeRO-Infinity异构内存管理方案。对比了LOMO即时更新技术与传统方法的差异,并提供了技术选型指南。文章指出当前分布式训练正向"万亿参数+千卡规模+90%效率"的目标发展,涉及通信压缩、异构计算等前沿趋势。通过分而治之的思想,这些技术实现了用通信换内存的优化目标,支持了超大规模模型的训练。
2025-07-07 19:28:05
794
原创 《AI系统》数据并行详解
数据并行技术通过分配训练数据到多个设备加速模型训练,主要包括数据并行(DP)、分布式数据并行(DDP)和异步并行三种模式。DP实现简单但存在通信瓶颈;DDP采用多进程和高效通信算法,扩展性更强;异步并行无需同步但可能影响收敛稳定性。前沿技术如ZeRO优化内存占用,支持超大规模模型训练。实际应用中需根据硬件条件和模型规模选择合适方案,DDP通常是首选,异步并行适合异构设备,而混合并行技术可进一步提升训练效率。
2025-07-07 19:09:01
441
原创 《AI系统》单设备高效训练
在学习分布式训练之前,我们需要了解一些单个设备高效训练的实用技术,包括等。这些技术通过优化内存利用率、加快训练速度或两者兼而有之来提高模型训练效率。即使在拥有多块设备的机器上,这些方法仍然有效,还可以结合分布式训练的其他方法进一步优化训练过程。
2025-07-07 16:53:07
985
原创 GGUF、Safetensors、ONNX三种格式
参考:https://github.com/karminski/one-small-step/blob/main/20250122-how-to-run-gguf-LLM-model/how-to-run-gguf-LLM-model.md。总而言之,GGUF 是一种重要的 LLM 文件格式,它通过提高存储效率、加载速度和兼容性,简化了 LLM 的使用和部署,并有望成为未来大模型文件标准格式之一。(图片来自 ultralytics.com)
2025-07-04 18:27:38
1187
原创 RAG、向量嵌入、向量数据库
RAG技术、向量嵌入与向量数据库的关系,如同“翻译官+智能仓库+指挥官”:向量嵌入将世界翻译为机器可理解的数字语言,向量数据库高效存储并快速调取知识,RAG则指挥大模型基于实时知识生成智能回答。三者的协同,让AI系统从“记忆型智能”进化为“检索型智能”,成为企业落地AI应用的核心技术路径。
2025-07-04 18:09:16
854
原创 多模态和表示空间简介
是什么:一个"数学翻译层",把不同形式的数据(文本/图片/音频)都转换成统一格式的向量(一串数字),让计算机能比较和处理。关键特点跨模态可比:比如"狗"的图片向量和"狗"的文字向量在空间里位置接近语义计算:支持向量加减(如:国王 - 男 + 女 ≈ 女王)维度统一:所有模态的向量长度相同(如512维)类比:像货币兑换——把人民币、美元、黄金都换成"标准货币"(向量),才能直接比较价值。
2025-07-04 17:46:35
216
原创 大语言模型优化:微调、蒸馏与量化
微调、蒸馏与量化构成了大型语言模型优化落地的"三驾马车",理解它们的核心原理适用边界以及组合潜力,是AI从业者在实践中做出合理技术选型的基础。随着技术的不断发展,这三种方法将继续演化并产生更多创新的结合方式,为不同场景下的模型部署提供更加丰富和高效的解决方案。在实际应用中,没有"放之四海而皆准"的最佳选择,只有最适合特定需求和约束的技术组合。明智的工程师应当根据业务目标、资源限制和性能要求,灵活搭配这些技术,打造出既高效又专业的语言模型应用。
2025-07-04 17:17:47
721
原创 大模型微调:从理论到实践的全方位指南
微调是指在预训练好的大型语言模型基础上,使用特定领域或任务的数据集对模型进行进一步训练的过程。与从头训练相比,微调具有数据效率高计算资源需求相对较少和灵活性高等显著优势。微调是将通用大模型转化为专业工具的关键技术。通过理解其核心原理、掌握最佳实践、避免常见陷阱,开发者可以高效地创建出满足特定需求的AI解决方案。记住,成功的微调不是简单的技术实现,而是数据、算法和评估体系的有机结合。随着技术的进步,微调的门槛将不断降低,但其战略价值将愈发重要。
2025-07-04 17:05:59
1182
原创 微调——什么是LoRA
这种低秩适应有效的深层原因是:模型在不同任务间的知识迁移主要发生在低维子空间,通过调整这些关键方向就能实现高效适应。这些矩阵W是模型在预训练阶段(如GPT在海量文本上训练)学习到的参数,承载了通用语义理解能力。(如d=hidden_size=768,k=hidden_size=768)。,即ΔW可通过两个小矩阵的乘积近似表示。
2025-07-04 16:54:59
1067
原创 数据库基础——事务隔离级别
隔离级别隔墙厚度问题解决存在问题读未提交透明玻璃无脏读读已提交薄墙解决脏读不可重复读可重复读厚墙解决脏读、不可重复读幻读串行化实心墙解决所有问题性能差。
2025-07-03 18:27:01
436
原创 数据库基础——SQL基础查询
SQL基础与分组查询核心要点 SQL基础查询部分介绍了常用操作:AS关键字起别名(仅改变显示不影响原表)、不等于运算符(<>或!=)、逻辑运算符优先级(AND高于OR)、IN/NOT运算符简化多条件查询,以及LIKE模糊查询(%匹配任意字符,_匹配单个字符)。 分组查询(Group By)是数据分析核心功能,需遵循关键规则: SELECT只能包含分组字段或聚合函数 执行顺序为FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY HAVING用于分组后过滤(可使用聚
2025-07-03 17:03:15
1020
原创 产品背景知识——Region和Zone
摘要: Region和Zone是资源管理与地理划分中的层级概念。Region指大范围地理或逻辑区域(如云计算中的“亚太地区”),包含多个Zone(如独立的数据中心)。Zone是Region的子单元,具备独立基础设施,故障隔离性强。两者协同应用:Region用于宏观合规性选择(如数据存储地域),Zone用于微观资源部署(如多Zone容灾)。典型区别在于范围、隔离性与应用场景(如AWS的Region vs. Zone)。理解其关系有助于优化云计算、分布式系统等架构的高可用设计。
2025-07-02 10:28:02
549
原创 产品背景知识——在线推理和离线推理
摘要: 在线推理与离线推理是AI模型部署的两种主要方式,核心差异体现在数据处理、架构设计、模型更新和应用场景上。在线推理处理实时数据,强调低延迟(毫秒级响应),适用于电商推荐、金融风控等场景,需高并发架构支持;离线推理处理批量历史数据,时效性要求低(小时/天级),适合用户画像、广告评估等分析场景,依赖分布式计算框架。二者协同互补:离线训练模型供在线调用,在线反馈数据优化离线模型。实际应用中,企业通常混合使用两者,如离线生成候选集,在线实时排序。选择依据取决于业务需求:实时交互选在线,大规模分析选离线。(14
2025-07-02 10:27:00
909
原创 产品背景知识——API、SDK、Library、Framework、Protocol
API、SDK、Library、Framework和Protocol是软件开发中的核心概念。API是应用程序编程接口,提供标准化交互方式;SDK是包含API、工具和文档的开发工具包,用于简化开发。两者关系密切,SDK通常封装API并提供更友好的接口。开发者可根据API"手搓SDK",通过封装底层调用提供更高层抽象。Library是可复用代码模块,Framework是提供基础结构的开发框架,Protocol是数据交换规则。这些概念形成技术栈层级:协议→API→库→SDK→框架→应用。理解它
2025-06-30 21:44:26
982
原创 《Go语言高级编程》gRPC进阶
gRPC安全与截取器技术精要 TLS安全认证:gRPC通过TLS证书实现通信安全。单向认证(服务器验证)需配置服务器证书,双向认证(双向验证)需CA根证书进行互信验证,确保通信双方身份真实可靠。证书生成流程包括私钥创建、CSR请求和CA签名等关键步骤。 拦截器机制:作为gRPC中间件,拦截器在请求处理前后执行特定逻辑。典型应用包括: 认证鉴权 - 通过metadata验证token 异常处理 - panic恢复机制 日志记录 - 请求追踪 性能监控 - 耗时统计 技术实现要点包含上下文处理、元信息获取和链式
2025-06-30 20:51:53
1223
原创 产品背景知识——CIFS、SMB 和 Samba
本文介绍了三种网络文件共享协议/工具:SMB、CIFS和Samba。SMB是微软开发的网络协议,经历了多个版本演进;CIFS是SMB 1.0的公开扩展版本,已逐渐被取代;Samba则是开源的SMB协议实现,使Linux系统能与Windows共享资源。三者区别在于:SMB是不断发展的协议家族,CIFS是其早期扩展版本,Samba是开源实现工具。文章还指出CIFS存在安全隐患,建议使用较新的SMB版本,并提供了不同环境下的选择建议。
2025-06-30 17:54:30
954
原创 《Go语言高级编程》gPRC概述
gRPC 使用 Protobuf 来定义服务接口和消息格式。在你的例子中,文件定义了一个名为的服务,它包含一个方法Hello,该方法接收一个String消息并返回一个String消息。这类似于定义一个函数接口,但它是跨网络调用的。在.proto文件中,使用stream// 普通 RPC(一元)// 双向流 RPC这里的Channel客户端可以持续发送String消息服务器可以持续返回String消息// 发布消息// 订阅主题Publish是一个普通的RPC方法,用于发布消息。
2025-06-30 10:47:20
1113
原创 《Go语言高级编程》玩转RPC
异步调用:通过通道机制实现非阻塞 RPC 调用,提升客户端并发能力。Watch 机制:利用函数回调和通道,实现服务端数据变化的实时通知。反向 RPC:打破传统 C/S 模式,适用于内网服务主动对外提供能力的场景。上下文管理:基于连接绑定状态(如认证信息),实现定制化服务逻辑。
2025-06-28 11:00:12
467
orbslam3在ros节点运行报错
2024-05-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人