赞
踩
1、环境需求
推荐gcc大于9.4
gcc -v
python,用于转换模型权重,fastllm也提供了python的api,我的是python3.10.13
2、下载相关文件
下载qwen1.8b权重和fastllm项目到本地。
下载qwen1.8b权重,国内推荐使用魔塔社区开源库,安装
pip install modelscope
下载,cache_dir修改为自己的路径
- from modelscope import snapshot_download
- model_dir = snapshot_download("Qwen/Qwen-1_8B-Chat", revision = "v1.0.0", cache_dir='/root/source/model_path')
下载好的文件目录如下:
下载fastllm工程到本地。
git clone https://github.com/ztxz16/fastllm
或者直接把项目的zip文件下载到本地再解压。
下载第三方库:
- cd fastllm/third_party
- git clone https://github.com/pybind/pybind11/tree/0e2c3e5db41b6b2af4038734c84ab855ccaaa5f0
3、编译安装
到fastllm目录,修改下main.cpp文件,加一个计时。
- #include "model.h"
- #include <chrono> // 添加头文件
-
- //省略其他代码
-
- int main(int argc, char **argv) {
- int round = 0;
- std::string history = "";
-
- RunConfig config;
- fastllm::GenerationConfig generationConfig;
- ParseArgs(argc, argv, config, generationConfig);
-
- fastllm::PrintInstructionInfo();
- fastllm::SetThreads(config.threads);
- fastllm::SetLowMemMode(config.lowMemMode);
- auto model = fastllm::CreateLLMModelFromFile(config.path);
-
- static std::string modelType = model->model_type;
- printf("欢迎使用 %s 模型. 输入内容对话,reset清空历史记录,stop退出程序.\n", model->model_type.c_str());
- while (true) {
- printf("用户: ");
- std::string input;
- std::getline(std::cin, input);
- if (input == "reset") {
- history = "";
- round = 0;
- continue;
- }
- if (input == "stop") {
- break;
- }
-
- auto start_time = std::chrono::high_resolution_clock::now(); // 开始计时
-
- std::string ret = model->Response(model->MakeInput(history, round, input), [](int index, const char* content) {
- if (index == 0) {
- printf("%s:%s", modelType.c_str(), content);
- fflush(stdout);
- }
- if (index > 0) {
- printf("%s", content);
- fflush(stdout);
- }
- if (index == -1) {
- printf("\n");
- }
- }, generationConfig);
-
- auto end_time = std::chrono::high_resolution_clock::now(); // 结束计时
- auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count();
-
- printf("本次响应耗时: %lld ms\n", duration); // 打印耗时
-
- history = model->MakeHistory(history, round, input, ret);
- round++;
- }
-
- return 0;
- }
执行编译安装
- #在fastllm目录执行
- mkdir build
- cd build
- cmake .. -DUSE_CUDA=ON # 如果不使用GPU编译,那么使用 cmake .. -DUSE_CUDA=OFF
- make -j
- cd tools && python setup.py install
环境配置不出错,这个过程一般不会有问题。
编译完成后,可以使用如下命令安装简单的python工具包。
- cd tools # 这时在fastllm/build/tools目录下
- python setup.py install
4、模型转换
修改tools目录下的qwen2flm.py文件
这三个路径修改为自己的模型储存目录,下面修改一下,方便加载。
到build目录执行模型转换脚本,转为int4格式
python3 tools/qwen2flm.py int4
也可以选择其它格式:
转完之后在build目录生成一个model.flm文件,大概1.9G大小。
5、测试
./main -p model.flm
模型路径传对,参数传对,基本不会有问题。
可以同时查下显存占用
nvidia-smi
1G显存可以加载.
速度也可以:
显存在占用不到2G
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。