Skip to content

Commit 788c16a

Browse files
author
xjtu-L
committed
完善断点读档等skills
1 parent 69d95d2 commit 788c16a

5 files changed

Lines changed: 1182 additions & 1 deletion

File tree

docs/README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@ docs/
2121
├── CONTRIBUTE_TUTORIAL.md # 核心贡献教程(从此开始)
2222
├── CONTRIBUTE_TUTORIAL_cn.md # 中文贡献教程
2323
├── guides/
24+
│ ├── WORKER_CHECKPOINT_GUIDE.md # 【新增】Worker读档检查指南
2425
│ ├── extract/ # 提取相关文档
2526
│ │ ├── EXTRACTION_EXPLAINED.md
27+
│ │ ├── extraction_issues_and_solutions.md # 【新增】抽取问题与解决方案
2628
│ │ ├── HUGGINGFACE_EXTRACTION_GUIDE.md
2729
│ │ ├── multi_worker_collaboration.md
30+
│ │ ├── NESTED_DIRECTORY_ISSUE.md # 【新增】嵌套目录专项记录
2831
│ │ ├── PARALLEL_EXECUTION_BEST_PRACTICES.md # 【新增】并行执行最佳实践
2932
│ │ ├── quick_reference.md
3033
│ │ ├── WORKER_DIRECTORY_GUIDE.md # 【新增】Worker目录组织规范
@@ -66,6 +69,12 @@ docs/
6669
### 我要了解目录组织规范
6770
→ 查看 [guides/extract/WORKER_DIRECTORY_GUIDE.md](guides/extract/WORKER_DIRECTORY_GUIDE.md) - Worker目录结构和组织方式
6871

72+
### 我要了解抽取常见问题与解决方案
73+
→ 查看 [guides/extract/extraction_issues_and_solutions.md](guides/extract/extraction_issues_and_solutions.md) - 6大问题发现机制与处理经验(嵌套目录、空目录、进程监控等)
74+
75+
### 我要检查任务状态或恢复中断进程
76+
→ 查看 [guides/WORKER_CHECKPOINT_GUIDE.md](guides/WORKER_CHECKPOINT_GUIDE.md) - Worker读档检查指南(进程状态、批次进度、恢复方法)
77+
6978
### 我要了解残图修复(辅助参考)
7079
→ 查看 [guides/repair/](guides/repair/)
7180

@@ -86,4 +95,4 @@ docs/
8695

8796
---
8897

89-
*最后更新:2026-03-30*
98+
*最后更新:2026-04-02*
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
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

Comments
 (0)