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.pswp.cn/bicheng/86887.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86887.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86887.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Prompt工程標準化在多模型協同中的作用

&#x1f680; 在AI模型"群雄逐鹿"的時代&#xff0c;如何讓這些"AI武林高手"協同作戰&#xff1f;答案可能藏在一個看似平凡卻至關重要的概念中&#xff1a;Prompt工程標準化。 &#x1f4da; 文章目錄 引言&#xff1a;AI模型的"巴別塔"困境什…

Java面試寶典:基礎五

104. 源文件命名規則 題目:主類名為 a1,保存它的源文件可以是? 選項: A. a1.java B. a1.class C. a1 D. 都對 答案:A 解析: Java 源文件必須與公共類名完全匹配(區分大小寫),后綴為 .java。.class 是編譯后的字節碼文件,非源文件。105. Java類的本質 題目:Java類…

Pycaita二次開發基礎代碼解析:幾何特征統計、跨零件復制與發布技術的工業級實現

本文將從工業實踐角度深入剖析CATIA二次開發中的三項核心技術&#xff1a;幾何特征量化分析、跨零件特征遷移和產品對象發布。全文嚴格基于提供的類方法代碼展開解析&#xff0c;不做任何修改和補充。 一、幾何圖形集特征統計技術&#xff1a;設計復雜度的精確量化 方法功能解…

入門級STM32F103C8T6無人機(共兩張)

入門級STM32F103C8T6無人機&#xff08;原理圖其一&#xff09; 一、STM32F103C8T6 最小系統電路中各接口&#xff08;引腳&#xff09;的解釋及作用 一&#xff09;電源相關引腳 引腳名稱說明3.3V為芯片及部分外圍電路提供 3.3V 工作電源&#xff0c;保障芯片正常運行所需的電…

Git安裝全攻略:避坑指南與最佳實踐

1、系統環境檢查 確認操作系統版本&#xff08;Windows/macOS/Linux&#xff09;及位數&#xff08;32/64位&#xff09;檢查是否已安裝舊版Git&#xff0c;避免版本沖突確保系統環境變量配置權限 2、下載安裝包注意事項 官方下載地址推薦&#xff08;避免第三方鏡像源&…

AlpineLinux安裝部署MariaDB

簡單來說,MariaDB被視為MySQL的一個社區驅動的分支,它保留了MySQL的許多特性和功能,同時引入了一些新的特性和改進。許多用戶和組織選擇使用MariaDB,因為它提供了更多的自由度和對未來許可證變更的保護。而對于一些需要特定Oracle支持或特定MySQL功能的用例,依然使用MySQL…

SpringBoot醫療用品銷售網站源碼

概述 一個基于SpringBoot框架開發的醫療用品銷售網站完整項目源碼&#xff0c;包含用戶管理、商品展示、訂單處理等完整電商功能。該項目采用SpringBoot框架開發&#xff0c;代碼規范、結構清晰&#xff0c;非常適合二次開發或學習參考&#xff0c;幫助開發者快速搭建醫療用品…

使用CSS創建帶三角形指示器的氣泡框

在網頁設計中&#xff0c;氣泡框&#xff08;或工具提示&#xff09;是一種常見的UI元素&#xff0c;用于突出顯示信息或提供額外說明。本文將介紹如何使用純CSS創建一個簡單的氣泡框&#xff0c;并添加一個三角形指示器。 HTML結構 首先&#xff0c;我們有一個簡單的HTML結…

Java面試題031:一文深入了解MySQL(3)

Java面試題029&#xff1a;一文深入了解MySQL&#xff08;1&#xff09; Java面試題030&#xff1a;一文深入了解MySQL&#xff08;2&#xff09; 1、MySQL多表查詢 &#xff08;1&#xff09;內連接 inner join 返回兩個表中完全匹配的行&#xff0c;即只保留兩個表連接字段值…

springboot小區物業管理系統

目 錄 第一章 緒 論 1.1背景及意義 1 1.2國內外研究概況 2 1.3 研究的內容 2 第二章 關鍵技術的研究 2.1 相關技術 3 2.2 Java技術 3 2.3 MySQL數據庫 4 2.4 Tomcat介紹 4 2.5 Spring Boot框架 5 第三章 系統分析 3.1 系統設計目標 6 3.2 系統可行性分析 6 3.3 系統功能分析…

微信小程序云開發--環境共享

1、創建配置文件 // utils/cloudConfig.js // 云開發環境配置// 當前小程序配置 const currentConfig {env: "cloudbase-6goxxxxxxd6c75e0", // 當前小程序環境 IDappid: "wxdexxxxx5dbcf04", // 當前小程序 AppID };// 共享云開發環境配置 const shared…

SpringBoot+ShardingSphere-分庫分表教程(一)

日常使用數據庫的時候&#xff0c;更多的時間是在關心業務功能的實現&#xff0c;為了盡快完成新版本的發布上線&#xff0c;通常在項目初期不太會去在意數據庫的壓力和性能問題。在服務上線一段時間之后&#xff0c;就會發現當初設計存在著很多的不足&#xff0c;這都是項目研…

INA226 電流計 功率計電路圖轉PCB制作

上次發布了TI的INA226電路圖&#xff0c;今天抽了點時間&#xff0c;把電路圖生成了PCB。 帖出來&#xff0c;不足之處&#xff0c;請兄弟們留言指正。 沒什么問題就可以去嘉立創白嫖了。^_^

Vcpkg 經典模式完整遷移方案

&#x1f680; 從零開始&#xff1a;高效使用 Vcpkg 安裝 Qt WebEngine&#xff08;經典模式 緩存優化 性能釋放&#xff09; &#x1f9e9; 背景簡介 在使用 Vcpkg 安裝 Qt 系列庫時&#xff0c;特別是龐大的 qtwebengine 模塊&#xff0c;編譯量極大&#xff0c;耗時可達…

FPGA產品

FPGA產品 文章目錄 FPGA產品1. Xilinx公司FPGA產品2. Altera公司FPGA產品3. FPGA產品的工業等級簡介4. FPGA產品的速度等級簡介總結 1. Xilinx公司FPGA產品 Xilinx公司是FPGA芯片的發明者&#xff0c;因此是一家骨灰級的老牌FPGA公司&#xff0c;同時也是目前最大的可編程邏輯…

205-06-26 Python深度學習1——安裝Anaconda與PyTorch庫(Win11+WSL2+Ubuntu24.04版)

文章目錄 1 安裝 wsl1.1 開啟 Windows 支持1.2 安裝 wsl1.3 移動 wsl 至其他盤1.4 其他事項 2 安裝 Anaconda3 安裝 Python 環境3.1 創建 Conda 環境3.2 安裝 Pytorch 庫&#xff08;gpu&#xff09; 4 安裝 Pycharm4.1 Toolbox App 安裝4.2 安裝 Pycharm4.3 配置 Pycharm 5 測…

Redis 數據遷移同步:應對大 Key 同步挑戰

在企業級的數據同步和遷移場景中&#xff0c;Redis 憑借高性能和靈活的數據結構&#xff0c;常被用于緩存和高頻讀寫場景。隨著業務數據的積累&#xff0c;Redis 中不可避免會出現包含大量元素的“大 Key”&#xff0c;如包含幾十萬條數據的 List、Set 或 Hash 類型。在進行全量…

視頻關鍵幀提取

&#x1f39e;? 視頻關鍵幀提取與特征分析指南 &#x1f4cc; 抽幀數量建議 視頻時長推薦抽幀數原因短視頻&#xff08;≤15秒&#xff09;3&#xff5e;5 幀覆蓋不同場景即可中長視頻&#xff08;1&#xff5e;3分鐘&#xff09;5&#xff5e;10 幀內容跨度大長視頻&#xf…

協作機器人優化自動化工作流程,提升工作效率

無損檢測(NDT)是一種檢查方法&#xff0c;用于識別材料中的裂紋或缺陷&#xff0c;或者在不損壞材料的情況下確定材料的元素組成。Olympus擁有多種NDT設備&#xff0c;這些設備具有多種多樣的測量功能&#xff0c;允許最終用戶對各種行業中使用的金屬、塑料、陶瓷和復合材料進行…

復用對象Aspose.Words 中 DocumentBuilder 的狀態管理解析

doc manager.LoadDocument(filePath) builder.Document doc 是不是builder就自動清空重建了,不需要清理builder Aspose.Words 中 DocumentBuilder 的狀態管理解析 在您的代碼中&#xff0c;builder.Document doc 這行代碼不會自動清空或重建DocumentBuilder的狀態。Docume…