LLAMA.cpp 学习 底层ggml

koaker 发布于 6 小时前 ai 学习


gglm核心函数

struct ggml_init_params {
        // memory pool
        size_t mem_size;   // bytes
        void * mem_buffer; // if NULL, memory will be allocated internally
        bool   no_alloc;   // don't allocate memory for the tensor data
    }; // 初始化参数,可以传入内存大小或者直接传入内存指针

struct ggml_context * ggml_init(struct ggml_init_params params)
// 作用,传入初始需要的内存大小,返回一个ggml ctx结构体

struct ggml_context {
    size_t mem_size;
    void * mem_buffer;
    bool   mem_buffer_owned;
    bool   no_alloc;

    int    n_objects;

    struct ggml_object * objects_begin;
    struct ggml_object * objects_end;
};
// 作用: 存储张量的具体结构体,其中memSize指示memBuffer的长度
// memBuffer 的存储结构是 ggml_object ggml_tensor (data) ggml_object ggml_tensor (data)
// objectsBegin 指向第一个 objectsEnd指向最后一个

struct ggml_tensor * ggml_new_tensor(
        struct ggml_context * ctx,
        enum   ggml_type      type,
        int                   n_dims,
        const int64_t       * ne)


// 在ggmlContext中创建一个新张量,并且将最终指针指向这个张量

struct ggml_tensor {
        enum ggml_type type;

        struct ggml_backend_buffer * buffer;

        int64_t ne[GGML_MAX_DIMS]; // number of elements
        size_t  nb[GGML_MAX_DIMS]; // stride in bytes:
                                   // nb[0] = ggml_type_size(type)
                                   // nb[1] = nb[0]   * (ne[0] / ggml_blck_size(type)) + padding
                                   // nb[i] = nb[i-1] * ne[i-1]

        // compute data
        enum ggml_op op;

        // op params - allocated as int32_t for alignment
        int32_t op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)];

        int32_t flags;

        struct ggml_tensor * src[GGML_MAX_SRC];

        // source tensor and offset for views
        struct ggml_tensor * view_src;
        size_t               view_offs;

        void * data;

        char name[GGML_MAX_NAME];

        void * extra; // extra things e.g. for ggml-cuda.cu

        char padding[8];
    };
// ggmlType表示当前张量的种类
// ne表示当前张量的维度
// nb[i]表示前往i维度需要偏移的字节数量
// op 表示这个张量由什么操作而来
// src表示由操作而来的原向量, 如 a + b = c, c此时的 src 指向 a 和 b
// view_src表示视图的内存来源
// view_off 表示视图的偏移量
// data 指向实际存储的数据

struct ggml_object {
    size_t offs;
    size_t size;

    struct ggml_object * next;

    enum ggml_object_type type;

    char padding[4];
};

// off 表示 此object占 ctx中的buffer的偏移量
// size 表示 数据大小(包含填充)
// next表示下一个object
此作者没有提供个人介绍。
最后更新于 2026-03-13