快速开始

几分钟内完成 Tiny-LLM 推理引擎的安装与使用。


目录


前置要求

系统要求

组件 最低配置 推荐配置
CUDA Toolkit 11.0 12.0+
CMake 3.18 3.25+
C++ 编译器 GCC 9+ / Clang 10+ GCC 11+ / Clang 14+
GPU 计算能力 SM 7.0 (Volta) SM 8.0+ (Ampere+)
GPU 显存 4 GB 8 GB+

验证 GPU 支持

class="highlight">
1
2
3
4
5
6
# 检查 CUDA 版本
nvcc --version

# 检查 GPU 计算能力
nvidia-smi --query-gpu=compute_cap --format=csv
# 输出应 >= 7.0

安装步骤

1. 克隆仓库

class="highlight">
1
2
git clone https://github.com/LessUp/tiny-llm.git
cd tiny-llm

2. 配置构建

class="highlight">
1
2
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release

CMake 选项

选项 默认值 说明
CMAKE_BUILD_TYPE Release 构建类型: Debug/Release/RelWithDebInfo
BUILD_TESTS ON 构建测试套件
CUDA_ARCH native 目标 CUDA 架构 (如 75;80;86)

3. 编译

class="highlight">
1
make -j$(nproc)

4. 运行测试

class="highlight">
1
ctest --output-on-failure

5. 运行 Demo

class="highlight">
1
./tiny_llm_demo

快速示例

完整推理示例

class="highlight">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <tiny_llm/inference_engine.h>
#include <iostream>

int main() {
    // 1. 配置模型参数
    ModelConfig config;
    config.vocab_size = 32000;
    config.hidden_dim = 4096;
    config.num_layers = 32;
    config.num_heads = 32;
    config.num_kv_heads = 32;      // GQA: 现代模型使用 8
    config.head_dim = 128;
    config.intermediate_dim = 11008;
    config.max_seq_len = 2048;
    config.rope_theta = 10000.0f;
    
    // 2. 加载模型
    auto result = InferenceEngine::load("path/to/model.bin", config);
    if (result.isErr()) {
        std::cerr << "加载模型失败: " << result.error() << std::endl;
        return 1;
    }
    auto engine = std::move(result.value());
    
    // 3. 配置生成参数
    GenerationConfig gen_config;
    gen_config.max_new_tokens = 256;
    gen_config.temperature = 0.7f;
    gen_config.top_p = 0.9f;
    gen_config.top_k = 50;
    gen_config.do_sample = true;
    
    // 4. 生成文本
    std::vector<int> prompt = {1, 15043, 29892};  // "Hello," token
    auto output = engine->generate(prompt, gen_config);
    
    // 5. 查看性能统计
    const auto& stats = engine->getStats();
    std::cout << "生成了 " << stats.tokens_generated << " 个 token\n"
              << "速度: " << stats.tokens_per_second << " tok/s\n"
              << "显存峰值: " << stats.peak_memory_bytes / 1024 / 1024 << " MB\n";
    
    return 0;
}

直接使用 KV 缓存

class="highlight">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <tiny_llm/kv_cache.h>

// 创建缓存管理器
KVCacheConfig cache_config;
cache_config.num_layers = 32;
cache_config.num_heads = 32;
cache_config.head_dim = 128;
cache_config.max_seq_len = 2048;
cache_config.max_batch_size = 1;

KVCacheManager kv_cache(cache_config);

// 分配序列
auto seq_result = kv_cache.allocateSequence(1024);
if (seq_result.isErr()) {
    std::cerr << "分配失败: " << seq_result.error() << std::endl;
    return 1;
}
int seq_id = seq_result.value();

// 在 Transformer 层中使用
for (auto& layer : layers) {
    layer.forward(hidden_states, kv_cache, seq_id, position, stream);
}

// 所有层完成后,推进序列长度
kv_cache.advanceSeqLen(seq_id, 1);

// 完成后释放
kv_cache.releaseSequence(seq_id);

模型格式

自定义二进制格式

Tiny-LLM 目前使用自定义二进制格式,文件布局如下:

class="highlight">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌─────────────────┬─────────────────────────────────────┐
│ 头部 (256B)     │ 魔数、版本号、配置信息              │
├─────────────────┼─────────────────────────────────────┤
│ Token 词嵌入    │ [vocab_size, hidden_dim] FP16       │
├─────────────────┼─────────────────────────────────────┤
│ 第 0 层权重     │ Attention + FFN 权重 (INT8)         │
│                 │ 缩放因子 (FP16)                     │
├─────────────────┼─────────────────────────────────────┤
│ ...             │                                     │
├─────────────────┼─────────────────────────────────────┤
│ 第 N-1 层       │                                     │
├─────────────────┼─────────────────────────────────────┤
│ 输出 Norm       │ [hidden_dim] FP16                   │
│ LM Head         │ [hidden_dim, vocab_size] FP16       │
└─────────────────┴─────────────────────────────────────┘

创建模型文件

参考 开发者指南 了解如何将模型转换为 Tiny-LLM 格式。


下一步



Back to top