0%

前言

最近计划研究下llama.cpp是如何实现混合精度量化矩阵乘的。粗看了下llama.cpp的代码,应该是比fastertransformer要友好得多的。

首先量化了一个Q5_0的llama2,然后用build/bin/llama_simple跑了一下,并用nsys抓了一下时间线。最新的llama.cpp引入了CUDA graph技术,大概是把一堆算子封装成一个graph同一进行调度,这导致直接用nsys抓到的只有一个graph,不清楚里面具体调了哪些kernel。想要知道调用了哪些kernel,需要增加参数 --cuda-graph-trace=node。最终命令为

阅读全文 »

前言

本系列将分析ByteDance项目ABQ-LLM的源码,并将重点放在llama模型端到端性能测试上,ABQ-LLM的模型端到端性能测试是基于NVIDIA的FasterTransformer项目搭建的。
ABQ-LLM的github仓库:https://github.com/bytedance/ABQ-LLM
ABQ-LLM论文链接:https://arxiv.org/abs/2408.08554
FasterTransformer的github仓库:https://github.com/NVIDIA/FasterTransformer

在构建FasterTransformer时,由于需克隆第三方的cutlassgoogletestgithub仓库用于性能对比,而github的访问不太稳定,导致构建缓慢或失败,可选的解决方案包括挂代理和使用github镜像,这里推荐使用github镜像,自己用下来效果比较好的是githubfast.com。在开始构建前在CMakeLists.txt中把相关git仓库的链接修改即可。

阅读全文 »

背景

最近在实现一个LSM键值对存储系统时遇到了一个问题:
LSM键值对存储系统的DELETE操作是通过插入特殊的符号~DELETE~实现的,然而对于不同的value类型(stringint…),需要定义不同的代表删除的符号。为了定义不同类型的删除符号,初步实现如下:

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
// 基模板类,提供value()方法获取删除符号,isDeleted()方法判断传入的值是否为删除符号
template<typename T>
struct DeleteMarker {
static T value() {
return T();
}

static bool isDeleted(T value_) {
return value_ == value();
}
};

//对string的特化
template<>
struct DeleteMarker<std::string> {
static std::string value() {
return std::string("~DELETED~");
}

static bool isDeleted(std::string value_) {
return value_ == value();
}
};

//对int的特化
template<>
struct DeleteMarker<int> {
static int value() {
return 0;
}

static bool isDeleted(int value_) {
return value_ == value();
}
};
阅读全文 »

在git的使用过程中,常常会遇到一些不太常见的问题,在这里做简单的记录便于记忆、查阅。

将已被跟踪的文件移出git版本控制

工作目录下的文件按照跟踪状态可分为两类:

阅读全文 »

C++功能强大、特性丰富,但总有一些语法、函数在偶尔用到的时候记不住需要现查,频繁打断工作流颇为恼人,在这里做一些记录,希望能加强记忆、提高效率。

ltrim与rtrim

C++没有提供原生的字符串trim方法,但是可以用stl库里的方法快速实现ltrimrtrim

阅读全文 »