无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 905|回复: 22
打印 上一主题 下一主题

[教程] 本地分布式部署大模型

[复制链接]
跳转到指定楼层
1#
发表于 2025-4-6 09:39:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 winpefk 于 2025-4-6 14:23 编辑

这里使用相当数量的废旧手机(参考三星sm note10,小米5这种设备):
要求:GPU vulkan版本至少1.2,不特定型号,在猎户座9820的mali g76显卡上可以分担10层.
设备数量多多益善,落后的设备虽然拖慢计算,但是会增加吞吐量(即最大能运行的模型规模)

这里使用例子: deepseek-r1:14B模型为例子:
首先,你需要从hf镜像上下载模型原始权重,然后量化为INT8/FP16(可选,要不然太慢,你如果V100/H100,当我没说)
注意: adreno gpu/mali只支持 Q8_0,Q4_0,FP16量化,否则无法创建ggml计算管线(精度F32>F16>Q8>Q4),不支持的量化排在Q8到Q4之间.

量化方法:git lfs clone (自己去搜索llama点cpp的仓库地址) --depth 1
自行克隆所需模型地址 (加--depth 1 如果硬盘大小不足,如果很吃紧,建议克隆完毕后删除.git文件夹)
  1. python -m venv ./model_converter
复制代码

  1. bash ./model_converter/bin/activate

  2. <div>pip install transformer torch</div>
复制代码


  1. python convert_hf_to_gguf.py ./你的模型仓库位置 ./out.gguf --outtype f32
复制代码

(你也可以选择 f16, int8)


模型已经准备完成,编译llama点cpp:
手机:安装termux
  1. pkg install build-essential vulkan-loader vulkan-headers cmake git binutils -y
复制代码



再次克隆llama点cpp(我无权限发链接)
  1. cd llama.cpp
  2. mkdir build
  3. cd build
  4. cmake .. -DGGML_VULKAN=1 -DGGML_RPC=1
  5. make -j$(nproc)
复制代码


  1. ./bin/rpc-server -p 9999 -H (手机所在局域网ip地址)
复制代码



警告:您需要先用cpuz检查gpu vulkan版本,如果不支持 1.2,把DGGML_VULKAN 这个参数删掉,否则ggml会崩溃

在每一台手机上如法炮制

如果是支持cuda的n卡电脑:-DGGML_CUDA=1,比vulkan快速,稳定

运行模型步骤:
./bin/llama-cli -m 刚刚量化好的模型.gguf --rpc 把刚刚运行rpc-server的设备ip地址记录,加上:9999 --ngl 30(很重要,否则不会自动加速计算)

举例子,192.168.1.1 -> sm-n971n, 192.168.1.2 -> Huawei pad 5,模型是out.gguf

那么最后命令(在执行量化的机器上运行)是: ./bin/llama-cli -m out.gguf --rpc 192.168.1.1:9999,192.168.1.2:9999 --ngl 30 (数字可以自己调整)

建议:性能低的设备在运行./rpc-server时加参数 -m 限制内存/显存大小(比如 数字1024表示1G),这样最后llama会给这些设备少分配一些层

无图无真相,但是我没有图床 =( (省略了一些信息)
  1. ~/DeepSeek-R1-Distill-Qwen-14B $ ../llama/build/bin/llama-cli -m deepseek_14b.gguf --rpc 192.168.1.1:50052 -ngl 4 --device RPC[192.168.1.1:50052]
  2. ggml_vulkan: Found 1 Vulkan devices:
  3. ggml_vulkan: 0 = Adreno (TM) 650 (Qualcomm Technologies Inc. Adreno Vulkan Driver) | uma: 1 | fp16: 1 | warp size: 64 | shared memory: 32768 | matrix cores: none
  4. build: 52 (af6ae1e) with clang version 19.1.7 for aarch64-unknown-linux-android24
  5. main: llama backend init
  6. main: load the model and apply lora adapter, if any
  7. llama_model_load_from_file_impl: using device RPC[192.168.1.1:50052] (RPC[192.168.1.1:50052]) - 1024 MiB free
  8. llama_model_loader: loaded meta data with 27 key-value pairs and 579 tensors from deepseek_14b.gguf (version GGUF V3 (latest))
  9. llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
  10. llama_model_loader: - kv   0:                       general.architecture str              = qwen2
  11. llama_model_loader: - kv   1:                               general.type str              = model
  12. llama_model_loader: - kv   2:                               general.name str              = DeepSeek R1 Distill Qwen 14B
  13. llama_model_loader: - kv   3:                           general.basename str              = DeepSeek-R1-Distill-Qwen
  14. llama_model_loader: - kv   4:                         general.size_label str              = 14B
  15. llama_model_loader: - kv   5:                            general.license str              = mit
  16. llama_model_loader: - kv   6:                          qwen2.block_count u32              = 48
  17. llama_model_loader: - kv   7:                       qwen2.context_length u32              = 131072
  18. llama_model_loader: - kv   8:                     qwen2.embedding_length u32              = 5120
  19. llama_model_loader: - kv   9:                  qwen2.feed_forward_length u32              = 13824
  20. llama_model_loader: - kv  10:                 qwen2.attention.head_count u32              = 40
  21. llama_model_loader: - kv  11:              qwen2.attention.head_count_kv u32              = 8
  22. llama_model_loader: - kv  12:                       qwen2.rope.freq_base f32              = 1000000.000000
  23. llama_model_loader: - type  f32:  241 tensors
  24. llama_model_loader: - type q8_0:  338 tensors
  25. print_info: file format = GGUF V3 (latest)
  26. print_info: file type   = Q8_0
  27. print_info: file size   = 14.62 GiB (8.50 BPW)
  28. print_info: general.name     = DeepSeek R1 Distill Qwen 14B
  29. print_info: vocab type       = BPE
  30. print_info: n_vocab          = 152064
  31. print_info: n_merges         = 151387
  32. print_info: BOS token        = 151646 '<|begin▁of▁sentence|>'
  33. print_info: EOS token        = 151643 '<|end▁of▁sentence|>'
  34. print_info: EOT token        = 151643 '<|end▁of▁sentence|>'
  35. p
  36. load_tensors: loading model tensors, this can take a while... (mmap = true)
  37. load_tensors: offloading 4 repeating layers to GPU
  38. load_tensors: offloaded 4/49 layers to GPU
  39. load_tensors:   CPU_Mapped model buffer size = 13852.63 MiB
  40. load_tensors: RPC[192.168.1.1:50052] model buffer size =  1115.89 MiB
  41. ............................................................................................
  42. llama_context: n_ctx_per_seq (4096) < n_ctx_train (131072) -- the full capacity of the model will not be utilized
  43. llama_context:        CPU  output buffer size =     0.58 MiB
  44. init: kv_size = 4096, offload = 1, type_k = 'f16', type_v = 'f16', n_layer = 48, can_shift = 1
  45. init:        CPU KV buffer size =   704.00 MiB
  46. init: RPC[192.168.1.1:50052] KV buffer size =    64.00 MiB
  47. llama_context: KV self size  =  768.00 MiB, K (f16):  384.00 MiB, V (f16):  384.00 MiB
  48. llama_context: RPC[192.168.1.1:50052] compute buffer size =   368.00 MiB
  49. llama_context:        CPU compute buffer size =   368.01 MiB
  50. llama_context: graph nodes  = 1782
  51. llama_context: graph splits = 3
  52. common_init_from_params: setting dry_penalty_last_n to ctx_size = 4096
  53. common_init_from_params: warming up the model with an empty run - please wait ... (--no-warmup to disable)
  54. main: llama threadpool init, n_threads = 8
  55. main: chat template is available, enabling conversation mode (disable it with -no-cnv)
  56. main: chat template example:
  57. You are a helpful assistant

  58. <|User|>Hello<|Assistant|>Hi there<|end▁of▁sentence|><|User|>How are you?<|Assistant|>

  59. system_info: n_threads = 8 (n_threads_batch = 8) / 8 | CPU : NEON = 1 | ARM_FMA = 1 | FP16_VA = 1 | DOTPROD = 1 | LLAMAFILE = 1 | OPENMP = 1 | AARCH64_REPACK = 1 |

  60. main: interactive mode on.
  61. sampler seed: 3508949674

  62. > 你好
  63. <think>

  64. </think>

  65. 你好!很高兴见到你,有什么我可以帮忙的吗?无论是学习、工作还是生活中的问题,都可以告诉我哦! &#128522;

  66. >
  67. llama_perf_sampler_print:    sampling time =      13.61 ms /    36 runs   (    0.38 ms per token,  2644.34 tokens per second)
  68. llama_perf_context_print:        load time =   68480.58 ms
  69. llama_perf_context_print: prompt eval time =   31415.90 ms /     5 tokens ( 6283.18 ms per token,     0.16 tokens per second)
  70. llama_perf_context_print:        eval time =  329027.01 ms /    31 runs   (10613.77 ms per token,     0.09 tokens per second)
  71. llama_perf_context_print:       total time =  516102.31 ms /    36 tokens
  72. Interrupted by user
复制代码

有点慢,是因为只有两个设备,在打开rpc之前单个手机无法运行模型(因为内存不足够,14B模型Q8之后占用14GB,而我的手机只有8G内存/台,如果打开mmap技术,就会卡到无法生成)

另外提供软件要求: android 12+的设备可以用gpu参与计算
只要是linux为内核的系统(linux发行版和android设备),理论可以用cpu参与计算

点评

谢谢大佬  发表于 2025-4-8 19:07
@waltz1 不知道你是否能看到,回答如下:目前三台手机(包括两个mali g76 gpu)可以以一秒一个词的速度运行deepseek r1 14b模型(Q8量化,而ollama默认是q6_k(比q8还不如的量化),所以除了数据足量,主要还是算力  发表于 2025-4-7 21:53
谢谢大佬,本地是不是有足量模型化数据和算法库,就可以做AI推理了?  发表于 2025-4-6 14:55
2#
发表于 2025-4-6 10:06:32 | 只看该作者
学习一下!
回复

使用道具 举报

3#
发表于 2025-4-6 10:11:49 | 只看该作者
感谢分享
回复

使用道具 举报

4#
发表于 2025-4-6 10:49:45 | 只看该作者
学习一下!
回复

使用道具 举报

5#
发表于 2025-4-6 11:34:07 | 只看该作者
感谢分享
回复

使用道具 举报

6#
发表于 2025-4-6 11:44:26 | 只看该作者

谢谢分享!
回复

使用道具 举报

7#
发表于 2025-4-6 13:39:44 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

8#
发表于 2025-4-6 13:51:36 | 只看该作者
学习一下!
回复

使用道具 举报

9#
发表于 2025-4-6 13:54:11 | 只看该作者
看看怎么搞AI大模型
回复

使用道具 举报

10#
发表于 2025-4-6 13:59:34 | 只看该作者
感谢楼主分享。
回复

使用道具 举报

11#
发表于 2025-4-6 14:42:29 | 只看该作者
感謝大大分享!^^ 辛苦了!
回复

使用道具 举报

12#
发表于 2025-4-6 14:57:52 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

13#
发表于 2025-4-6 14:59:19 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

14#
发表于 2025-4-6 15:43:07 | 只看该作者
谢谢
回复

使用道具 举报

15#
发表于 2025-4-6 18:52:29 | 只看该作者
楼主这是用手机部署啊
回复

使用道具 举报

16#
发表于 2025-4-6 19:55:07 | 只看该作者
感谢分享
回复

使用道具 举报

17#
发表于 2025-4-6 20:26:45 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

18#
发表于 2025-4-7 22:31:02 | 只看该作者
谢谢分享
回复

使用道具 举报

19#
发表于 2025-4-8 09:39:18 | 只看该作者
谢谢分享
回复

使用道具 举报

20#
发表于 2025-4-8 10:38:07 | 只看该作者
谢谢分享...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-4-24 09:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表