|
| 1 | +# Graph Hash 补充生成指南 |
| 2 | + |
| 3 | +## 概述 |
| 4 | + |
| 5 | +在模型抽取过程中,有时会遇到残图(已有 model.py 等文件但缺少 graph_hash.txt)的情况。本指南介绍如何使用 `generate_graph_hash.py` 工具直接生成 graph_hash.txt,无需重新抽取模型。 |
| 6 | + |
| 7 | +## 适用场景 |
| 8 | + |
| 9 | +- 残图修复:模型已有 model.py 但缺少 graph_hash.txt |
| 10 | +- 批量补充:为大量模型目录快速生成 hash |
| 11 | +- 避免重复抽取:节省时间和计算资源 |
| 12 | + |
| 13 | +## 使用方法 |
| 14 | + |
| 15 | +### 1. 为单个模型目录生成 |
| 16 | + |
| 17 | +```bash |
| 18 | +cd /root/GraphNet |
| 19 | +python tools/generate_graph_hash.py \ |
| 20 | + --samples-dir /path/to/model_directory |
| 21 | +``` |
| 22 | + |
| 23 | +### 2. 为批量模型生成 |
| 24 | + |
| 25 | +```bash |
| 26 | +cd /root/GraphNet |
| 27 | +python tools/generate_graph_hash.py \ |
| 28 | + --samples-dir /root/graphnet_workspace/huggingface/worker1/feature-extraction |
| 29 | +``` |
| 30 | + |
| 31 | +### 3. 遍历多个任务类型生成 |
| 32 | + |
| 33 | +```bash |
| 34 | +cd /root/GraphNet |
| 35 | +for dir in /root/graphnet_workspace/huggingface/worker1/*/; do |
| 36 | + [ -d "$dir" ] || continue |
| 37 | + task=$(basename "$dir") |
| 38 | + echo "生成 $task 的 hash..." |
| 39 | + python tools/generate_graph_hash.py --samples-dir "$dir" 2>/dev/null | tail -3 |
| 40 | +done |
| 41 | +``` |
| 42 | + |
| 43 | +## 输出说明 |
| 44 | + |
| 45 | +工具会输出以下信息: |
| 46 | + |
| 47 | +``` |
| 48 | +Scanning directories: |
| 49 | + /path/to/model_directory |
| 50 | +
|
| 51 | +Written: 405, Skipped: 0, Errors: 0 |
| 52 | +``` |
| 53 | + |
| 54 | +- **Written**: 成功生成的 graph_hash.txt 数量 |
| 55 | +- **Skipped**: 已存在的 graph_hash.txt 数量 |
| 56 | +- **Errors**: 生成失败的错误数量 |
| 57 | + |
| 58 | +## 验证结果 |
| 59 | + |
| 60 | +生成后,可以使用以下命令验证: |
| 61 | + |
| 62 | +```bash |
| 63 | +# 统计总数量 |
| 64 | +find /path/to/directory -name "graph_hash.txt" | wc -l |
| 65 | + |
| 66 | +# 查看唯一模型数 |
| 67 | +find /path/to/directory -name "graph_hash.txt" | \ |
| 68 | + sed 's|/subgraph_[0-9]*/graph_hash.txt||' | \ |
| 69 | + sort -u | wc -l |
| 70 | + |
| 71 | +# 查看示例文件内容 |
| 72 | +head -3 /path/to/model/subgraph_0/graph_hash.txt |
| 73 | +``` |
| 74 | + |
| 75 | +## 实际案例 |
| 76 | + |
| 77 | +### 案例1:补充 feature-extraction 77个模型的 hash |
| 78 | + |
| 79 | +```bash |
| 80 | +# 停止抽取进程(如有) |
| 81 | +kill -TERM <PID> |
| 82 | + |
| 83 | +# 生成 graph_hash.txt |
| 84 | +cd /root/GraphNet |
| 85 | +python tools/generate_graph_hash.py \ |
| 86 | + --samples-dir /root/graphnet_workspace/huggingface/worker1/feature-extraction |
| 87 | + |
| 88 | +# 验证结果 |
| 89 | +find /root/graphnet_workspace/huggingface/worker1/feature-extraction/ \ |
| 90 | + -name "graph_hash.txt" | wc -l |
| 91 | +# 输出: 405 |
| 92 | +``` |
| 93 | + |
| 94 | +### 案例2:为 Worker1 所有目录生成 |
| 95 | + |
| 96 | +```bash |
| 97 | +cd /root/GraphNet |
| 98 | + |
| 99 | +for dir in /root/graphnet_workspace/huggingface/worker1/*/; do |
| 100 | + [ -d "$dir" ] || continue |
| 101 | + task=$(basename "$dir") |
| 102 | + count=$(find "$dir" -name "graph_hash.txt" 2>/dev/null | wc -l) |
| 103 | + echo "$task: 已有 $count 个hash" |
| 104 | + |
| 105 | + if [ "$count" -eq 0 ]; then |
| 106 | + echo " 生成 $task 的hash..." |
| 107 | + python tools/generate_graph_hash.py --samples-dir "$dir" 2>/dev/null | tail -3 |
| 108 | + fi |
| 109 | +done |
| 110 | +``` |
| 111 | + |
| 112 | +## 注意事项 |
| 113 | + |
| 114 | +1. **数据来源**:生成的 hash 基于 model.py 文件内容计算 SHA-256 哈希 |
| 115 | +2. **唯一性**:每个 subgraph 的 hash 都是唯一的 |
| 116 | +3. **兼容性**:生成的 hash 格式与正常抽取的完全一致 |
| 117 | +4. **跳过机制**:工具会自动跳过已存在 graph_hash.txt 的文件 |
| 118 | + |
| 119 | +## 原理说明 |
| 120 | + |
| 121 | +`generate_graph_hash.py` 工具工作原理: |
| 122 | + |
| 123 | +1. 扫描指定目录下的所有模型子目录 |
| 124 | +2. 查找每个 subgraph 目录中的 model.py 文件 |
| 125 | +3. 计算 model.py 内容的 SHA-256 哈希值 |
| 126 | +4. 将哈希值写入 graph_hash.txt |
| 127 | + |
| 128 | +哈希值格式: |
| 129 | +- 64位十六进制字符串 |
| 130 | +- 示例:`b45be332d2c0dd80f13284d41678469132c0c510b8c817c0b2858907cf4a8f52` |
| 131 | + |
| 132 | +## 相关工具 |
| 133 | + |
| 134 | +- `extract_from_model_list.py`:正常抽取模型 |
| 135 | +- `generate_extract_py.py`:为残图生成 extract.py |
| 136 | +- `generate_graph_hash.py`:生成 graph_hash.txt(本文档) |
| 137 | + |
| 138 | +## 常见问题 |
| 139 | + |
| 140 | +**Q: 为什么有些目录生成 0 个 hash?** |
| 141 | +A: 可能是因为: |
| 142 | +- 目录中没有 model.py 文件 |
| 143 | +- 目录结构不符合预期 |
| 144 | +- subgraph 目录不存在 |
| 145 | + |
| 146 | +**Q: 生成的 hash 与正常抽取的一致吗?** |
| 147 | +A: 是的,都是基于 model.py 内容的 SHA-256 哈希,格式完全一致。 |
| 148 | + |
| 149 | +**Q: 可以重复运行吗?** |
| 150 | +A: 可以,工具会自动跳过已存在的 graph_hash.txt,不会重复生成。 |
| 151 | + |
| 152 | +## 版本历史 |
| 153 | + |
| 154 | +- **2026-04-02**: 初始版本,记录 feature-extraction 77个模型的补充生成方法 |
0 commit comments