- 博客(488)
- 资源 (5)
- 收藏
- 关注

原创 从“叠加”到“重叠”:Overlay 与 Overlap 双引擎驱动技术性能优化
摘要: 技术优化中,"Overlay"与"Overlap"常被混淆,但二者逻辑迥异:Overlay通过分层复用资源(如容器镜像共享),实现空间优化;Overlap通过并行交叉耗时环节(如异步IO),压缩整体耗时。典型场景包括容器存储(OverlayFS)、分布式网络(VXLAN)等分层复用,以及API批量调用、数据流水线等时间重叠。两者可协同使用,如容器环境下既用Overlay优化存储,又用Overlap加速启动流程,实现"空间+时间"双重性能提升
2025-09-02 11:32:22
1058

原创 PD分离与EP分离技术
在拥有Mixture of Experts (MoE) 架构的大型语言模型中,模型包含多个“专家”子网络。Expert Parallelism 是一种将这些不同的专家子网络分布到多个计算设备(例如GPU)上的并行计算技术。每个计算设备负责存储和运行模型中一部分的专家。当输入数据进入模型时,一个“门控网络”(gating network)会决定将哪些输入路由到哪些专家进行处理。只有被选中的专家会对特定的输入进行计算,最终它们的输出会被合并以产生最终结果。
2025-03-31 11:53:29
2836

原创 开源 vGPU 方案 HAMi 解析
HAMi 全称为 Heterogeneous AI Computing Virtualization Middleware,是一个异构算力虚拟化平台。它最初源自第四范式的 k8s-vgpu-scheduler,如今不仅开源,还将核心的 vCUDA 库 libvgpu.so 开放出来。当前,HAMi 在 NVIDIA GPU 的 vGPU 方案方面表现出色,为我们提供了一种有效的 GPU 资源共享和切分解决方案。HAMi 提供了丰富的自定义配置选项,通过在安装过程中使用-set参数来修改。
2025-01-08 15:57:16
2653

原创 通过生产环境流量录制/线下回放 配合基于云原生的灰度发布 实现保质保量的持续集成
流量回放/复制, 从测试的角度, 本质是:通过把线上的真实流量复制到线下环境,解决测试环境模拟不够真实,或覆盖不够全面的问题。
2022-08-15 10:04:57
996
1

原创 通过PowerMockito来模拟时钟回拨, 验证改进版雪花算法是否起效
改进版雪花算法详见上篇传送门简单说明: 通过PowerMockito来mock雪花算法中获取时间的算法, 从而实现伪造时间覆盖.测试类import org.junit.Assert;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.powermock.api.mockito.PowerMockito;import org.powermock.core.classlo
2021-04-21 17:56:15
2778
3
原创 分层架构下的跨层通信:接口抽象如何解决反向调用
本文探讨了分层架构中实现反向通知的接口解耦方法。通过"K8S错峰控制器"的三层架构示例,展示了ResourceManager→StrategyManager→Dispatcher的单向依赖链。为解决策略更新需反向通知Dispatcher的需求冲突,提出了"接口订阅"模式:在策略层定义ReloadNotifier接口,由调度层实现该接口并在初始化阶段注册,使下层通过接口适配上层的通知契约。这种设计既保持了分层架构的单向依赖原则,又实现了模块间的松耦合通信,有效提升了系统
2025-08-10 14:35:02
319
原创 Go 工程化全景:从目录结构到生命周期的完整服务框架
本文介绍了生产级Go服务的标准化构建方法,包括目录结构设计和生命周期管理。目录组织采用分层设计,包含internal/model数据模型层、业务逻辑层及通用工具库。重点讲解了服务生命周期的闭环管理:通过bootstrap包实现有序初始化(配置→日志→客户端→业务服务)和优雅退出(反向释放资源)。主程序入口使用cobra处理命令行参数,确保启动逻辑简洁可靠。该框架可帮助开发者构建结构清晰、稳定性高的Go服务。
2025-08-03 17:54:10
943
原创 每期一个小窍门:用 “抢鸡蛋” 读懂 Go 并发核心 —— 为什么 “通信” 比 “共享内存” 更靠谱?
本文通过“抢鸡蛋”的例子生动演示了Go语言并发编程的核心思想——"通过通信共享内存"。生产者通过无缓冲通道发送11个鸡蛋,100个消费者从通道获取鸡蛋,利用chan传递数据和sync.WaitGroup控制流程。这种方式避免了传统共享内存需要加锁的问题,通道本身具有并发安全性,通过关闭通道传递结束信号,WaitGroup自动管理任务状态。与共享内存相比,通信方案更简洁高效,无需处理锁的复杂性,体现了Go语言"不要通过共享内存来通信,而要通过通信来共享内存"的并发哲学。
2025-07-27 14:38:09
340
原创 # Go语言并发陷阱:为什么channel同步了,数据却偶尔打印不出来?
摘要:Go语言并发编程中偶发"打印结果丢失"问题,根源在于主协程提前退出导致内核缓冲区未及时刷新。文章分析了数据从代码到终端的三个缓冲区层级(Go用户态→OS内核→终端设备),指出通道同步虽保证数据传递但不确保打印完成。特别在首次运行时,编译缓存导致的启动时间差异会放大该问题。解决方案需三重保障:通道同步确保数据传递、os.Stdout.Sync()强制刷新内核缓冲区、sync.WaitGroup确保主协程等待子协程完成完整打印流程。(149字)
2025-07-27 13:15:38
754
原创 Unix、Linux、POSIX、Minix 区别与联系
摘要: Unix作为现代操作系统的技术原型,提出了"一切皆文件"、管道工具等核心设计,并分化出BSD和System V等分支。Linux在Unix基础上重构,通过GPL开源和POSIX兼容性迅速扩张,成为服务器、嵌入式等领域的首选。POSIX标准规范了跨系统接口,确保软件可移植性。Minix采用微内核架构,主要用于教学和嵌入式场景。四者对比显示,从Unix到Linux的发展体现了标准化接口与开源协作对技术普及的推动作用。
2025-06-20 16:55:29
458
原创 关于 DeepSeek 架构 混合专家模型MoE
在人工智能领域,大模型发展势头正猛,但也遇到了不少难题,像计算成本高、处理复杂任务能力有限等。混合专家模型(MoE)的诞生,为这些困境提供了新的解决思路。
2025-02-06 15:32:18
371
原创 深入理解k8s中的容器存储接口(CSI)
Pod调度到节点后,AD控制器创建VolumeAttachment对象,External Attacher调用CSI插件挂接存储卷,完成后更新状态。:用户创建PVC,K8s根据PVC和StorageClass,让External Provisioner调用CSI插件创盘,之后创建PV并绑定PVC。:Kubelet发现使用CSI类型PV的Pod调度到本节点,等待VolumeAttachment状态就绪,调用CSI插件挂载。,而且存储插件特权高,存在安全隐患。CSI的出现,就是为了解决这些问题,把。
2025-02-05 15:40:34
1535
原创 每期一个小窍门:活用 Golang 中的 Context
等信息,且获取订单、推荐、物流信息分别有 500 毫秒、400 毫秒、700 毫秒的超时限制。在 Golang 并发和分布式系统中不可或缺,掌握它有助于开发高效应用。各分支任务要有超时控制,且单个分支超时时不能影响整体流程;再看自定义场景,有一个查询接口需在 1 秒内完成,要传递。在此过程中,存在诸多问题:需在。并传值,子函数中也根据需求设置超时和获取值。分别处理订单详情、推荐商品和物流信息,且这些。这里设置 1 毫秒超时,超时会输出。子goroutine。子goroutine。子goroutine。
2025-01-10 11:28:18
306
原创 Sealos 快速创建k8s 集群
Sealos 是一个用于管理 Kubernetes 集群的开源工具。它提供了一种简单、高效的方式来部署、管理和监控 Kubernetes 集群。通过 Sealos,用户可以快速创建和配置 Kubernetes 集群,实现容器化应用的部署和管理。
2024-09-24 10:18:55
900
原创 深入探讨 Flannel 技术:性能、缺陷与优点
深入探讨 Flannel 技术:性能、缺陷与优点Flannel,是一种常见 CNI(Container Network Interface)插件本文将探讨 Flannel 的性能表现和优缺点。
2024-09-13 16:05:41
594
原创 分布式共识(一致性)算法(协议) Paxos 简介
在分布式系统中,确保各节点间的数据一致性是核心挑战之一。Paxos算法,作为解决此问题的经典方法,通过分布式共识机制允许网络中的多数节点就某值达成一致,即便面对消息延迟、节点失效等复杂情形。Paxos算法以其高度的理论性和技术难度而闻名,但理解其基本思想并不难。
2024-09-09 14:05:00
492
原创 Linux 虚拟网络三大基石:Namespace、Veth pair 与 Bridge
Namespace提供了隔离的环境,Veth连接了不同的命名空间,而Bridge则扩展了网络的连接范围,三者缺一不可。在Namespace中,每个进程仿佛拥有自己的全局资源实例,而这些资源的变更仅在同一Namespace内部的进程间可见,对外部进程则完全透明。通过对Bridge的配置,我们可以实现在同一个Namespace内部或跨越Namespace的多节点互联,甚至可以连接物理网络,实现虚拟网络与现实网络的互通有无。有了Namespace的隔离机制,接下来的问题是如何在这些隔离的环境中建立通信。
2024-09-04 11:22:25
820
原创 VXLAN 为何采用UDP
VXLAN是一种网络虚拟化技术,它通过在UDP数据包中封装MAC地址和IP信息,使得二层网络(如以太网)能够跨越三层网络(如IP网络)进行扩展。这种封装方式不仅支持TCP流量的传输,还能有效处理大规模数据中心中的网络隔离和扩展问题。VXLAN的主要优势在于其灵活性和扩展能力。通过采用UDP封装,VXLAN避免了TCP连接建立的复杂性,减少了数据传输的开销。同时,由于VXLAN是在内核中实现的,相比用户态实现的隧道技术,它在性能上更加高效。
2024-09-04 10:16:29
1094
原创 每期一个小窍门: 聊聊 pause 容器
综上所述,pause容器在Kubernetes Pod中起到了关键的基础设施作用,不仅保证了网络和进程的隔离性,还维护了Pod的生命周期和稳定性。这些特点使得pause容器成为Kubernetes中不可或缺的一部分,对于理解Pod的工作原理至关重要。pause容器在Kubernetes中的作用非常重要,它负责维护。,确保Pod内部不同容器间的。
2024-09-03 21:17:44
629
原创 每期一个小窍门: docker 多阶段镜像打包
使用多阶段镜像 本质上是打包与运行期的依赖分离 可以减小最终镜像大小。打包使用800M的 golang:1.23。运行期使用几M的alpine。
2024-08-27 09:39:21
247
1
原创 每期一个小窍门 golang中 CGO_ENABLED 含义
总结起来,使用CGO_ENABLED=0编译会慢一些是因为编译器需要额外的时间来处理CGO相关的代码,并且无法使用C语言的优化技术,同时还需要处理更多的Go代码。CGO_ENABLED是一个环境变量,用于控制Go编译器是否启用CGO(C语言调用Go函数)功能。当CGO_ENABLED=0时,表示禁用CGO功能。
2024-08-26 17:39:10
1469
原创 每期一个小窍门: 关于 golang 2006年1月2日15时4分5秒 这个时间彩蛋
在Go语言中,time.Format方法的参数使用的是一种固定的格式化布局,这个布局是以Go的发布日——2006年1月2日15时4分5秒(对应于常量Mon Jan 2 15:04:05 MST 2006)为模板来指示时间的格式。在使用 time.Format 方法时,必须使用上面这个准确的时间来指定你想要的格式,因为Go语言将使用这个布局字符串中的数字位置来识别相应的时间部分。比如,如果你想要小时和分钟,你就使用 “15:04” 作为格式字符串。
2024-08-22 11:15:58
376
原创 每期一个小窍门: Goland 配置跳板机登陆并使用dlv 远程调试
本地 访问 localhost:6000 --> 转发到跳板机:22 --> 再转发到指定内网地址。好了 第一件事完毕 本地已经可以直接登陆到远程被跳机了。本机公钥 copy 到跳板机 和内网被跳机。本机 .ssh/config。
2024-08-15 20:52:45
432
原创 每期一个小窍门: 使用kubebuilder 生成operator脚手架 并操作控制自定义CRD副本数 (下)
然后这边 kubectl get pod 可以看到如我们所愿 有5个启动的pod 对应了上方的部署文件。通过拿到的运行期状态 来跟部署文件的期望状态对比 然后进行不同业务响应就ok了。写好这个文件后 直接通过自带的make命令 install 到k8s中。有了这个dacar类型之后 我们徒手制作一个这个类型的部署文件。由于这个是demo 我们就不把operator部署到集群侧了。在这个文件中定义 dacar 这个crd的spec。我们发现可以查看到这个crd了。apply 这个文件后。
2024-08-03 15:30:52
563
原创 使用kubebuilder 遇到的 262144 bytes 超长问题
make install报错metadata.annotations: Too long: must have at most 262144 bytes。修复方法:打开Makefile,在。最后成功install。
2024-08-01 20:25:10
706
1
原创 每期一个小窍门: 使用Gin 与 client-go 操作k8s (中)
本文承接上文后面应该还会有个下 应该是个operator的全程demo。
2024-07-30 20:19:16
612
原创 每期一个小窍门: 使用client-go 操作k8s (上)
然后把apiserver公网暴露出来 并拿到apiserver的远程conf文件。身边要有一个k8s集群 阿里云ask可以免费使用 注意是ask 不是ack。好了 各位再见 下次再会。运行结果: 可以通的。
2024-07-27 16:20:24
356
原创 每期一个小窍门 k8s版本的 Prometheus + grafana + alertmanager 三件套部署监控落地
不要局限于组件本身 比如这一套组件要目标导向的去找组件 比如我想监控什么metrics 这个metrics 的安全阈值是多少 监控要不要做 高了代表什么 会产生什么级联影响 指标要有个重要性排序 最致命的肯定告警优先级要特殊对待 这些可能要和开发一同去设计 去排序优先级 只有拥有全链路的重要瓶颈的监控指标 业务接口才是真正运维侧可视化的 才会让团队放心
2024-05-29 14:37:00
540
1
原创 Qwen-14B-Chat 非量化微调
我选择的方案是最普遍的 lora + deepspeed +zero3 + bf16 + 单机多卡 这套通用方案。训练数据自己去弄吧 符合qwen需要的格式就行。然后找到输出目录 直接进行合并 生成新的模型。显存四卡 每张卡大概使用20g左右这样子。
2024-05-17 17:22:10
864
原创 Fastchat + vllm + ray + Qwen1.5-7b 在2080ti 双卡上 实现多卡推理加速
Ray 是一个高性能的分布式计算框架,由UC Berkeley RISELab 开发,支持Python 语言,并可与PyTorch 等机器学习框架结合使用。在隐私计算方面,Ray提供了数据隐私保护,支持数据共享和协作,同时允许在不泄露原始数据的情况下进行深度学习模型训练。OpenAI API提供OpenAI兼容的API服务,接受请求后,先向Controller获取Model Worker地址,再向Model Worker实例发送请求生成文本,最后返回OpenAI兼容的报文。执行情况如下 并发速度还不错。
2024-05-11 14:56:39
4497
5
原创 模型的训练三阶段 Pretraining SFT RLHF
人工先介入,通过对同一个Prompt生成答案的排序来训练一个Reward Model。再用Reward Model去反馈给SFT Model,通过评价生成结果的好坏,让模型更倾向于生成人们喜好的结果。最终生成的Model叫做RLHF model。给模型海量的文本进行训练,99%的计算量花费在这个阶段,输出的模型叫做base model,能做的事情就是像成语接龙一样不断的完成一段话。人工介入,给出高质量的文本问答例子。经过问答式训练的Model叫做SFT model,就可以正常回答人的问题了。
2024-03-25 01:08:12
1044
原创 CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate‘.解决方案 亲测有效
【代码】CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate‘.解决方案 亲测有效。
2024-03-24 16:49:52
258
原创 每期一个小窍门: go不同项目之间的引用
那么你有一个包moda, 放在/home/aio/moda下面, 然后你想用go mod, 那么会执行go mod init A包名。然后你的modb也需要用go mod, 所以你执行go mod init modb。然后你就得到了go.mod文件。不出意外的话, 应该就引用到了。
2024-01-28 13:02:54
362
原创 Mac os docker login : error getting credentials
2、修改 $home/.docker/config.json 的配置,删除 “credsStore”: “desktop” 或者 将值改为"osxkeychain"第二步的 credsStore 是 docker 的存储身份凭证的设置。osxkeychain 是钥匙串。1、修改钥匙串的 docker 关键字相关设置,解决访问策略问题, 允许所有应用程序访问。但遇到了新的问题,重启 docker 后,还是会恢复这个配置,目前。
2024-01-27 15:17:20
1794
原创 golang视角下 protobuf 的安装 从proto文件到go文件
Protocol Buffers(protobuf)是一种由Google开发的轻量级、高效的数据序列化格式。它设计的目的是为了在不同系统之间进行数据交换,同时保持数据的结构化和高效传输。
2024-01-25 18:27:01
879
apache-doris-1.0.0-incubating-bin.tar.gz
2022-06-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人