当前位置: 首页 > news >正文

llama.cpp学习笔记:后端加载

单例
struct ggml_backend_registry {std::vector<ggml_backend_reg_entry> backends;std::vector<ggml_backend_dev_t> devices;// ...
}struct ggml_backend_reg_entry {ggml_backend_reg_t reg;dl_handle_ptr handle;
};typedef struct ggml_backend_reg * ggml_backend_reg_t;typedef struct ggml_backend_device * ggml_backend_dev_t;
struct ggml_backend_device {struct ggml_backend_device_i iface;ggml_backend_reg_t reg;void * context;
};

每种后端一个单例:cuda、cpu等

版本号、接口和上下文信息

    struct ggml_backend_reg {int api_version; // initialize to GGML_BACKEND_API_VERSIONstruct ggml_backend_reg_i iface;void * context;};

后端对应的设备:接口、所属后端和上下文信息

typedef struct ggml_backend_device * ggml_backend_dev_t;
struct ggml_backend_device {struct ggml_backend_device_i iface;ggml_backend_reg_t reg;void * context;
};

cuda后端

cuda后端iface

static const ggml_backend_reg_i ggml_backend_cuda_reg_interface = {/* .get_name          = */ ggml_backend_cuda_reg_get_name,/* .get_device_count  = */ ggml_backend_cuda_reg_get_device_count,/* .get_device        = */ ggml_backend_cuda_reg_get_device,/* .get_proc_address  = */ ggml_backend_cuda_reg_get_proc_address,
};

cuda后端context,存储多个cuda设备(GPU)的接口、所属后端和上下文等信息

struct ggml_backend_cuda_reg_context {std::vector<ggml_backend_dev_t> devices;
};

 cuda设备GPU的接口iface

static const ggml_backend_device_i ggml_backend_cuda_device_interface = {/* .get_name                = */ ggml_backend_cuda_device_get_name,/* .get_description         = */ ggml_backend_cuda_device_get_description,/* .get_memory              = */ ggml_backend_cuda_device_get_memory,/* .get_type                = */ ggml_backend_cuda_device_get_type,/* .get_props               = */ ggml_backend_cuda_device_get_props,/* .init_backend            = */ ggml_backend_cuda_device_init_backend,/* .get_buffer_type         = */ ggml_backend_cuda_device_get_buffer_type,/* .get_host_buffer_type    = */ ggml_backend_cuda_device_get_host_buffer_type,/* .buffer_from_host_ptr    = */ NULL,/* .supports_op             = */ ggml_backend_cuda_device_supports_op,/* .supports_buft           = */ ggml_backend_cuda_device_supports_buft,/* .offload_op              = */ ggml_backend_cuda_device_offload_op,/* .event_new               = */ ggml_backend_cuda_device_event_new,/* .event_free              = */ ggml_backend_cuda_device_event_free,/* .event_synchronize       = */ ggml_backend_cuda_device_event_synchronize,
};

cuda设备GPU的context

struct ggml_backend_cuda_device_context {int device;std::string name;std::string description;
};

 

CPU后端

CPU后端iface

static const struct ggml_backend_reg_i ggml_backend_cpu_reg_i = {/* .get_name         = */ ggml_backend_cpu_reg_get_name,/* .get_device_count = */ ggml_backend_cpu_reg_get_device_count,/* .get_device       = */ ggml_backend_cpu_reg_get_device,/* .get_proc_address = */ ggml_backend_cpu_get_proc_address,
};

CPU后端无context

CPU设备接口iface

static const struct ggml_backend_device_i ggml_backend_cpu_device_i = {/* .get_name             = */ ggml_backend_cpu_device_get_name,/* .get_description      = */ ggml_backend_cpu_device_get_description,/* .get_memory           = */ ggml_backend_cpu_device_get_memory,/* .get_type             = */ ggml_backend_cpu_device_get_type,/* .get_props            = */ ggml_backend_cpu_device_get_props,/* .init_backend         = */ ggml_backend_cpu_device_init_backend,/* .get_buffer_type      = */ ggml_backend_cpu_device_get_buffer_type,/* .get_host_buffer_type = */ NULL,/* .buffer_from_host_ptr = */ ggml_backend_cpu_device_buffer_from_host_ptr,/* .supports_op          = */ ggml_backend_cpu_device_supports_op,/* .supports_buft        = */ ggml_backend_cpu_device_supports_buft,/* .offload_op           = */ NULL,/* .event_new            = */ NULL,/* .event_free           = */ NULL,/* .event_synchronize    = */ NULL,
};

CPU设备CPU的context

struct ggml_backend_cpu_device_context {std::string description = "CPU";// ...
}

http://www.lqws.cn/news/565471.html

相关文章:

  • Windows系统安装鸿蒙模拟器
  • 接口自动化测试(Python+pytest+PyMySQL+Jenkins)
  • OpenLayers 全屏控件介绍
  • Wpf布局之StackPanel!
  • Mac电脑手动安装原版Stable Diffusion,开启本地API调用生成图片
  • 在Mac上查找并删除Java 21.0.5
  • 【Canvas与标志】圆规脚足球俱乐部标志
  • Spring Cloud Gateway 实战:从网关搭建到过滤器与跨域解决方案
  • 浮油 - 3 相分层和自由表面流 CFX 模拟
  • 医疗AI智能基础设施构建:向量数据库矩阵化建设流程分析
  • js 基础
  • PCB工艺学习与总结-20250628
  • JVM——垃圾回收
  • Kafka4.0初体验
  • 系统架构设计师备考之架构设计专业知识
  • 软考 系统架构设计师系列知识点之杂项集萃(100)
  • TCP/UDP协议深度解析(三):TCP流量控制的魔法—滑动窗口、拥塞控制与ACK的智慧
  • Cursor 教程:用 Cursor 创建第一个 Java 项目
  • Webpack 中的 Loader 和 Plugin 全面详解
  • 全新大模型开源,腾讯(int4能打DeepSeek) Vs 谷歌(2GB运行多模态)
  • 【GESP 四级】一个程序掌握大部分知识点
  • 学习使用dotnet-dump工具分析.net内存转储文件(3)
  • 深入理解Mysql索引底层数据结构和算法
  • NeRF-Lidar实景重建:大疆Mavic 4 Pro低成本建模方案(2025实战指南)
  • 当SAM遇到声纳图像时之论文阅读
  • 【blender】使用bpy对一个obj的不同mesh进行不同的材质贴图(涉及对bmesh的操作)
  • 一键高效率图片MD5修改工具PHP版
  • 量子算法入门——5.Qiskit库介绍与简单应用(1)
  • 《伴时匣》app开发技术分享--用户登录(3)
  • MYSQL与PostgreSQL的差异