当前位置: 首页 > 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";// ...
}

相关文章:

  • VMware设置虚拟机为固定IP
  • Java--可变参数--作用域--构造器--this
  • Qwen-VL系列全面解析:从技术突破到应用实践
  • OSPF(开放最短路径优先)
  • ROS常用的路径规划算法介绍
  • Excel之将一堆姓名拆成一列4
  • 1.认识Docker
  • 第十二节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 两种权限控制方式(附前后端代码)
  • 《伴时匣》app开发技术分享--表单提交页(5)
  • STM32H723ZGT6-修改内存分布以定义很大的数组
  • HarmonyOS 公共事件机制介绍以及多进程之间的通信实现(9000字详解)
  • FPGA实现CameraLink视频解码,基于Xilinx ISERDES2原语,提供4套工程源码和技术支持
  • 闲庭信步使用SV搭建图像测试平台:第十九课——YCbCr图像转RGB图像
  • 多模态大语言模型arxiv论文略读(143)
  • python基础23(2025.6.29)分布式爬虫(增量式爬虫去重)redis应用_(未完成!)
  • Vue列表渲染与数据监测原理
  • win上对调ctrl和alt键
  • Gemini cli Quickstart
  • Conda 环境配置之 -- Mamba安装(causal-conv1d、mamba_ssm 最简单配置方法)-- 不需要重新配置CDUA
  • 【FreeRTOS-任务通知】