当前位置:   article > 正文

linux上使用fastllm部署qwen1.8b,2G显存可跑_linux fastllm qwen

linux fastllm qwen

1、环境需求

推荐gcc大于9.4

gcc -v

python,用于转换模型权重,fastllm也提供了python的api,我的是python3.10.13

2、下载相关文件

下载qwen1.8b权重和fastllm项目到本地。

下载qwen1.8b权重,国内推荐使用魔塔社区开源库,安装

pip install modelscope
下载,cache_dir修改为自己的路径
  1. from modelscope import snapshot_download
  2. 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文件下载到本地再解压。

下载第三方库:

  1. cd fastllm/third_party
  2. git clone https://github.com/pybind/pybind11/tree/0e2c3e5db41b6b2af4038734c84ab855ccaaa5f0

3、编译安装

到fastllm目录,修改下main.cpp文件,加一个计时。

  1. #include "model.h"
  2. #include <chrono> // 添加头文件
  3. //省略其他代码
  4. int main(int argc, char **argv) {
  5. int round = 0;
  6. std::string history = "";
  7. RunConfig config;
  8. fastllm::GenerationConfig generationConfig;
  9. ParseArgs(argc, argv, config, generationConfig);
  10. fastllm::PrintInstructionInfo();
  11. fastllm::SetThreads(config.threads);
  12. fastllm::SetLowMemMode(config.lowMemMode);
  13. auto model = fastllm::CreateLLMModelFromFile(config.path);
  14. static std::string modelType = model->model_type;
  15. printf("欢迎使用 %s 模型. 输入内容对话,reset清空历史记录,stop退出程序.\n", model->model_type.c_str());
  16. while (true) {
  17. printf("用户: ");
  18. std::string input;
  19. std::getline(std::cin, input);
  20. if (input == "reset") {
  21. history = "";
  22. round = 0;
  23. continue;
  24. }
  25. if (input == "stop") {
  26. break;
  27. }
  28. auto start_time = std::chrono::high_resolution_clock::now(); // 开始计时
  29. std::string ret = model->Response(model->MakeInput(history, round, input), [](int index, const char* content) {
  30. if (index == 0) {
  31. printf("%s:%s", modelType.c_str(), content);
  32. fflush(stdout);
  33. }
  34. if (index > 0) {
  35. printf("%s", content);
  36. fflush(stdout);
  37. }
  38. if (index == -1) {
  39. printf("\n");
  40. }
  41. }, generationConfig);
  42. auto end_time = std::chrono::high_resolution_clock::now(); // 结束计时
  43. auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count();
  44. printf("本次响应耗时: %lld ms\n", duration); // 打印耗时
  45. history = model->MakeHistory(history, round, input, ret);
  46. round++;
  47. }
  48. return 0;
  49. }

执行编译安装

  1. #在fastllm目录执行
  2. mkdir build
  3. cd build
  4. cmake .. -DUSE_CUDA=ON # 如果不使用GPU编译,那么使用 cmake .. -DUSE_CUDA=OFF
  5. make -j
  6. cd tools && python setup.py install

环境配置不出错,这个过程一般不会有问题。

编译完成后,可以使用如下命令安装简单的python工具包。

 
  1. cd tools # 这时在fastllm/build/tools目录下
  2. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/260465?site
推荐阅读
相关标签
  

闽ICP备14008679号