已合并
[docs] offload 共享池 store_url 与 RD2H 用例文档补充 #1246
zhangshuren创建于 9月7日
[docs] offload 共享池 store_url 与 RD2H 用例文档补充 #1246
已合并
共 4 个文件变更+14-5
| @@ -1072,6 +1072,7 @@ typedef struct { | |||
| 1072 | uint32_t worldSize; | 1072 | uint32_t worldSize; |
| 1073 | uint32_t rankId; | 1073 | uint32_t rankId; |
| 1074 | offload_scene_t scene; | 1074 | offload_scene_t scene; |
| 1075 | + char storeUrl[64]; | ||
| 1075 | } offload_config_t; | 1076 | } offload_config_t; |
| 1076 | ``` | 1077 | ``` |
| 1077 | 1078 | ||
| @@ -1083,6 +1084,7 @@ typedef struct { | |||
| 1083 | |worldSize|参与组网的rank数量(SHARED场景使用)| | 1084 | |worldSize|参与组网的rank数量(SHARED场景使用)| |
| 1084 | |rankId|本地rank id(SHARED场景使用)| | 1085 | |rankId|本地rank id(SHARED场景使用)| |
| 1085 | |scene|内存池场景,取值参考offload_scene_t,默认OFFLOAD_SCENE_LOCAL| | 1086 | |scene|内存池场景,取值参考offload_scene_t,默认OFFLOAD_SCENE_LOCAL| |
| 1087 | +|storeUrl|SHARED场景下共享池建立时的显式config store地址(如`tcp://127.0.0.1:8500`),同组各rank需保持一致;为空时回退为推导端口`8500 + deviceId / worldSize`| | ||
| 1086 | 1088 | ||
| 1087 | ### 2. 初始化/退出 | 1089 | ### 2. 初始化/退出 |
| 1088 | 1090 | ||
| @@ -109,7 +109,7 @@ LOCAL场景详情参考[local_dram_offload示例](../../examples/kv_offload/loca | |||
| 109 | 1. `from memfabric_hybrid import offload`。 | 109 | 1. `from memfabric_hybrid import offload`。 |
| 110 | 2. 构造OffloadConfig,调用offload.initialize接口初始化。 | 110 | 2. 构造OffloadConfig,调用offload.initialize接口初始化。 |
| 111 | - LOCAL场景:设置device_id、reserve_size、alloc_size(两者需相等),scene保持默认LOCAL。 | 111 | - LOCAL场景:设置device_id、reserve_size、alloc_size(两者需相等),scene保持默认LOCAL。 |
| 112 | - - SHARED场景:设置device_id、reserve_size、alloc_size(传实际值)、world_size、rank_id,scene设为offload.Scene.SHARED。 | 112 | + - SHARED场景:设置device_id、reserve_size、alloc_size(传实际值)、world_size、rank_id,scene设为offload.Scene.SHARED;如显式指定共享池的config store地址,需再设置store_url(同组各rank保持一致)。 |
| 113 | 3. 调用offload.empty分配内存并获得torch.Tensor,或调用offload.malloc获得地址。 | 113 | 3. 调用offload.empty分配内存并获得torch.Tensor,或调用offload.malloc获得地址。 |
| 114 | 4. 调用offload.sparse_copy接口在device上执行批量稀疏拷贝。 | 114 | 4. 调用offload.sparse_copy接口在device上执行批量稀疏拷贝。 |
| 115 | 5. 调用offload.free释放内存,调用offload.uninitialize退出。 | 115 | 5. 调用offload.free释放内存,调用offload.uninitialize退出。 |
| @@ -741,3 +741,4 @@ class OffloadConfig: | |||
| 741 | |world_size属性|参与组网的rank数量(SHARED场景使用)| | 741 | |world_size属性|参与组网的rank数量(SHARED场景使用)| |
| 742 | |rank_id属性|本地rank id(SHARED场景使用)| | 742 | |rank_id属性|本地rank id(SHARED场景使用)| |
| 743 | |scene属性|内存池场景,取值参考Scene枚举,默认LOCAL| | 743 | |scene属性|内存池场景,取值参考Scene枚举,默认LOCAL| |
| 744 | +|store_url属性|SHARED场景下共享池建立时的显式config store地址(如`tcp://127.0.0.1:8500`),同组各rank需保持一致;为空时回退为推导端口`8500 + device_id // world_size`| | ||
| @@ -146,7 +146,7 @@ Prefill/Decode 分离部署的 main KV Cache 拉取(pull)传输: | |||
| 146 | | --role | 是 | 工作角色:`Prefill` 或 `Decode` | | 146 | | --role | 是 | 工作角色:`Prefill` 或 `Decode` | |
| 147 | | --local-ip | 否 | 本机 IPv4,默认 `127.0.0.1`;跨机须传对端可达的本机网卡 IP | | 147 | | --local-ip | 否 | 本机 IPv4,默认 `127.0.0.1`;跨机须传对端可达的本机网卡 IP | |
| 148 | | --prefill-ip | 否 | Prefill 机器 IPv4,默认 `127.0.0.1`;跨机须传真实 Prefill IP | | 148 | | --prefill-ip | 否 | Prefill 机器 IPv4,默认 `127.0.0.1`;跨机须传真实 Prefill IP | |
| 149 | -| --npu-id | 否 | Decode 起始卡号(rank r 用起始+r,默认 0);手动 `--tp-rank` 时为该 rank 的卡号 | | 149 | +| --npu-id | 否 | launcher 模式:Decode 起始卡号(rank r 用 `起始+r`,默认 0);手动 `--tp-rank` 模式:可选,默认等于 rank,可指定任意卡号 | |
| 150 | | --tp-size | 否 | Decode TP rank 数,默认 1 | | 150 | | --tp-size | 否 | Decode TP rank 数,默认 1 | |
| 151 | | --tp-rank | 否 | Decode TP rank;缺省时一条命令拉起全部 rank 子进程 | | 151 | | --tp-rank | 否 | Decode TP rank;缺省时一条命令拉起全部 rank 子进程 | |
| 152 | | --decode-tp-size | 否 | 期望的 Decode rank 数(仅 Prefill 侧),默认 1 | | 152 | | --decode-tp-size | 否 | 期望的 Decode rank 数(仅 Prefill 侧),默认 1 | |
| @@ -180,17 +180,23 @@ python test_transfer_engine_rd2h.py --role Prefill --decode-tp-size 2 --npu-id 0 | |||
| 180 | 180 | ||
| 181 | #### 2. 启动 Decode 侧(一条命令拉起全部 rank) | 181 | #### 2. 启动 Decode 侧(一条命令拉起全部 rank) |
| 182 | 182 | ||
| 183 | +Decode 与 Prefill 不能共用同一张卡,需通过 `--npu-id` 指定起始卡号(须与 Prefill 所用卡不同,例如 Prefill 用 | ||
| 184 | +`--npu-id 0`,Decode 用 `--npu-id 1`,rank r 实际使用 `--npu-id + r`): | ||
| 185 | + | ||
| 183 | ```bash | 186 | ```bash |
| 184 | -python test_transfer_engine_rd2h.py --role Decode --tp-size 2 | 187 | +python test_transfer_engine_rd2h.py --role Decode --npu-id 1 --tp-size 2 |
| 185 | ``` | 188 | ``` |
| 186 | 189 | ||
| 187 | 手动指定 rank 单独启动(等价上一条命令)或调整测量轮数: | 190 | 手动指定 rank 单独启动(等价上一条命令)或调整测量轮数: |
| 188 | 191 | ||
| 189 | ```bash | 192 | ```bash |
| 190 | -python test_transfer_engine_rd2h.py --role Decode --tp-rank 1 --tp-size 2 # 指定 rank | 193 | +python test_transfer_engine_rd2h.py --role Decode --npu-id 1 --tp-rank 1 --tp-size 2 # 指定 rank |
| 191 | -python test_transfer_engine_rd2h.py --role Decode --tp-size 2 --warmup 2 --iterations 10 # 调轮数 | 194 | +python test_transfer_engine_rd2h.py --role Decode --npu-id 1 --tp-size 2 --warmup 2 --iterations 10 # 调轮数 |
| 192 | ``` | 195 | ``` |
| 193 | 196 | ||
| 197 | +> 说明:`--npu-id` 在 launcher 模式(不传 `--tp-rank`)作为起始卡号,rank r 用 `--npu-id + r`;手动 `--tp-rank` 模式下 | ||
| 198 | +> 可选,默认等于 rank,也可显式指定任意卡号(rank 与卡号不绑定)。 | ||
| 199 | + | ||
| 194 | #### 3. 观察结果 | 200 | #### 3. 观察结果 |
| 195 | 201 | ||
| 196 | 两侧均输出 `PASS` 即成功,例如: | 202 | 两侧均输出 `PASS` 即成功,例如: |