首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏阶梯计划

    HAMi源码解析——HAMi-Core-1

    本系列内容均基于HAMi开源项目v2.5.1的代码进行分析。 1 libvgpu源码结构 libvgpu.so(HAMi-Core) 是 HAMi (异构计算资源管理系统) 中负责 GPU 虚拟化的核心动态库,它提供了 GPU 资源虚拟化、隔离和管理的底层功能。 2.2 重写 dlsym HAMi-core 中重写了 dlsym 函数,以劫持 NVIDIA 动态链接库(如 CUDA 和 NVML)的调用,特别是针对以 cu 和 nvml 开头的函数进行拦截。

    91011编辑于 2025-07-09
  • 来自专栏阶梯计划

    HAMi源码解析——HAMi-Core-3

    HAMi 是通过限制 Kernel 的提交来实现 Core limit,具体算法类似令牌桶,初始化时会生成一批 Token,每次提交 Kernel 都会消耗 Token,当提交 Kernel 发现没有

    62711编辑于 2025-07-09
  • 来自专栏阶梯计划

    HAMi源码解析——HAMi-Core-2

    3 GPU 显存限制 HAMi 限制 GPU 分两部分: 3.1 NVML拦截 在 Pod 中执行 nvidia-smi 命令查看设备信息时,Memory 部分只会展示申请的值,而非设备真实内存,这部分则是通过拦截 , dev); } // 这里直接读取的 region_info return region_info.shared_region->limit[dev]; } HAMI HAMI 这里则是通过直接创建一个多进程共享的资源消耗统计文件,进行了缓存,减少 NVML API 调用次数。 这个共享文件会被 mmap(内存映射)到每个进程内,也就是 shared_region_t 类型的 region_info.shared_region(ref HAMI源码阅读)。 LOG_DEBUG("shrreg created"); } 3.2 CUDA 拦截 cuMemoryAllocate 和 cuMemAlloc_v2 是 CUDA 中用于在 GPU 上分配显存的函数, HAMi

    62911编辑于 2025-07-09
  • 来自专栏阶梯计划

    HAMi源码解析——scheduler

    1 背景HAMi 的 scheduler 比较复杂,这里会用比较长的篇幅介绍。在介绍 HAMi 的 scheduler 前会提及一些其他的内容以便更好理解 scheduler 的逻辑。 接口定义参见 K8s Extender2 HAMi webhook、scheduler、device-plugin 间的关系和工作流程 {#section2}3 HAMi scheduler 源码分析3.1 其核心功能是:根据 Pod Resource 字段中的 ResourceName 判断该 Pod 是否使用了 HAMi vGPU,如果是则修改 Pod 的 SchedulerName 为 hami-scheduler ,由 hami-scheduler 进行调度,否则不做处理。 3.3.1 MutatingWebhookConfiguration 对象这个对象是为了让 webhook 生效,这里可以展开 HAMi 的部署配置文件:# charts\hami\templates\

    54411编辑于 2025-07-04
  • 来自专栏阶梯计划

    HAMi源码解析——device-plugin

    1 背景 在介绍 HAMi 的 device-plugin 前,先了解一下 K8s 中的 Pod 是怎么使用 GPU 的。 下图是 的各组件介绍: HAMi 的 device-plugin 就是替代上面的 NVIDIA Device Plugin 管理 GPU 资源的分配。 2 源码分析 2.1 device-plugin 代码结构 HAMi ├── cmd │ ├── device-plugin │ ├── nvidia │ ├── main.go 因为 HAMi 并没有为容器分配 GPU 的能力, 因此需要依赖 NVIDIA 的原生逻辑。 这样 Pod 中有环境变量, NVIDIA Container Toolkit 就会为其分配 GPU,通过 HAMi 自定义逻辑中替换 libvgpu.so 和添加部分环境变量,从而实现了对 GPU 的限制

    77411编辑于 2025-07-09
  • 来自专栏站长的编程笔记

    【说站】python建造者模式是什么

    grape_weight = 2.5         return grape_weight       def promotion_price(self):         return 28.99     class Hami_Melon def packing(self):         wrap = bag_pack()         return wrap       def set_price(self):         hami_melon_price  = 22.0         return hami_melon_price       def set_name(self):         hami_melon_name = "哈密瓜"          return hami_melon_name       def set_weight(self):         hami_melon_weight = 3.2         return hami_melon_weight menu.AddItem(Grape())         menu.AddItem(Citrus())         menu.AddItem(Tangerine())         menu.AddItem(Hami_Melon

    35750编辑于 2022-11-23
  • 虚拟化技术全景解析与选型指南

    在生态系统方面,开源虚拟化方案如HAMi和Rise VAST在GPU虚拟化领域取得了显著进展,支持多种GPU类型的虚拟化(如NVIDIA、Ascend、Cambricon、DCU等),并提供强大的GPU 用户态虚拟化如HAMi方案通过拦截和转发CUDA、OpenGL等标准化接口实现,具有兼容性强、安全性高和部署成本低的优势,特别适合金融、能源等对系统稳定性要求高的行业。 Rise VAST AI算力管理平台通过HAMi技术实现了分布式训练基础设施的资源自动化管理和工作负载调度,用户可以在多GPU环境中自动执行所需数量的深度学习实验。 对于AI训练和高性能计算场景,应优先考虑支持GPU分区和用户态虚拟化的方案,如NVIDIA vGPU 18.0配合Windows Server 2025的GPU-P技术,或Rise VAST基于HAMi 开源方案如HAMi可降低初始许可成本,但可能需要更高的专业支持投入。

    1K10编辑于 2025-06-20
  • 来自专栏wangweijun

    Python学习手册--第四部分(用户输入和while循环)

    在列表之间移动元素 fruits = ['apple', 'pear', 'banana', 'orange', 'Hami'] fruits_new = [] while fruits: fruit 显然就不行了,所以我们通过循环的方式对列表元素进行删除: fruits = ['apple', 'pear', 'banana', 'orange', 'Hami', 'pear', 'apple',

    2.4K30发布于 2020-02-14
  • 来自专栏科控自动化

    [化工项目记录]步科网关GW01 通信测试

    当HM上电后, HAMI不主动向外发通讯数据包,HM处于等待接收状态。而当MCU发请求之后,HMオ回复一个响应。

    75430编辑于 2022-03-29
  • 来自专栏从零搭建系列

    如何通过爬虫自动化获取300+免费网站模版

    index.html https://cvbox.org/gymer/index.html https://cvbox.org/haircare/index.html https://cvbox.org/hami

    1.1K71发布于 2019-10-16
  • 来自专栏信数据得永生

    Java 编程问题:五、数组、集合和数据结构

    melons2 = { new Melon("Horned", 1500), new Melon("Gac", 1000) }; Melon[] melons3 = { new Melon("Hami Melon[] melons2 = {new Melon("Horned", 1500), new Melon("Gac", 1000)}; Melon[] melons3 = {new Melon("Hami 在本例中是一个Melon数组: Melon[] melons = { new Melon("Horned", 1500), new Melon("Gac", 2200), new Melon("Hami melons.add(new Melon("Cantaloupe", 1500)); melons.add(new Melon("Gac", 1600)); melons.add(new Melon("Hami = { new Melon("Crenshaw", 2000), new Melon("Gac", 1200), new Melon("Bitter", 2200), new Melon("Hami

    2K10编辑于 2022-07-11
  • 来自专栏wangweijun

    Python学习手册--第三部分(if语句和字典)

    fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach'] print('apple' in fruits) print('Hami' in

    3.7K20发布于 2020-02-14
  • 来自专栏运维开发故事

    提升GPU利用率:探索NVIDIA的MIG与MPS虚拟化技术

    https://github.com/Project-HAMi/HAMi 其目的是为了统一算力卡的虚拟化调度,正在集成华为vNPU(这个ISSUE),值得调研和投入。

    1.8K00编辑于 2025-06-09
  • 来自专栏wangweijun

    Python学习手册--第二部分(数据类型)

    apple', 'banana', 'pear', 'watermelon', 'peach'] fruits_new = fruits print(fruits_new) fruits.append("Hami

    2.2K10发布于 2020-02-14
  • 来自专栏微生态与微进化

    Nature综述:古菌的细胞生物学

    物种特异的附属物有插管(cannulae,连接Pyrodictium细胞的中空管)、hami(在Altiarchaeum hamiconexum中可以形成铁丝网状结构帮助锚定细胞)。

    1.1K10编辑于 2022-12-31
领券