Skip to content

Commit b7000fe

Browse files
committed
Merge branch 'develop' of https://github.com/PaddlePaddle/GraphNet into describe
2 parents 7091818 + c4c59de commit b7000fe

File tree

1,144 files changed

+1562678
-66047
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,144 files changed

+1562678
-66047
lines changed

.github/actions/check-bypass/action.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: "Check bypass"
2-
description: "A custom action to encapsulate PFCCLab/ci-bypass"
2+
description: "A custom action to encapsulate GraphNet"
33
inputs:
44
github-token:
55
description: "GitHub token"
@@ -18,7 +18,7 @@ runs:
1818
- id: check-bypass
1919
name: Check Bypass
2020
env:
21-
CI_TEAM_MEMBERS: '["SigureMo", "risemeup1", "tianshuo78520a", "0x3878f", "swgu98", "luotao1", "XieYunshen"]'
21+
CI_TEAM_MEMBERS: '["lixinqi", "Xreki"]'
2222
uses: PFCCLab/ci-bypass@v1
2323
with:
2424
github-token: ${{ inputs.github-token }}

README.md

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ model = graph_net.torch.extract(name="model_name")(model)
6363
# $GRAPH_NET_EXTRACT_WORKSPACE/model_name
6464
```
6565

66+
For details, see docstring of `graph_net.torch.extract` defined in `graph_net/torch/extractor.py`
67+
6668
**graph_net.torch.validate**
6769
```
6870
# Verify that the extracted model meets requirements
@@ -85,17 +87,44 @@ We define two key metrics here: **rectified speedup** and **GraphNet Score**. Re
8587

8688
**Demo: How to benchmark your compiler on the model:**
8789

90+
1. Benchmark
91+
92+
We use ```graph_net/benchmark_demo.sh``` to benchmark GraphNet computation graph samples:
93+
94+
```
95+
bash graph_net/benchmark_demo.sh &
96+
```
97+
98+
The script will run ```graph_net.torch.test_compiler``` with specific batch and log configurations.
99+
100+
Or you can customize and use ```graph_net.torch.test_compiler``` yourself:
101+
88102
```
89103
python3 -m graph_net.torch.test_compiler \
90104
--model-path $GRAPH_NET_EXTRACT_WORKSPACE/model_name/ \
91-
--compiler /path/to/custom/compiler
105+
--compiler /path/to/custom/compiler/ \
106+
--output-dir /path/to/save/JSON/result/file/
92107
# Note: if --compiler is omitted, PyTorch’s built-in compiler is used by default
93108
```
94109

110+
2. Analysis
111+
112+
After processing, we provide ```graph_net/analysis.py``` to generate [violin plot](https://en.m.wikipedia.org/wiki/Violin_plot) based on the JSON results.
113+
114+
```
115+
python3 graph_net/analysis.py \
116+
--benchmark-path /path/to/read/JSON/result/file/ \
117+
--output-dir /path/to/save/output/figures/
118+
```
119+
120+
After executing, one summary plot of results on all compilers (as shown below in "Evaluation Results Example"), as well as multiple sub-plots of results in categories (model tasks, Library...) on a single compiler.
121+
122+
The script is designed to process a file structure as ```/benchmark_path/compiler_name/category_name/``` (for example ```/benchmark_logs/paddle/nlp/```), and items on x-axis are identified by name of the folders. So you can modify ```read_all_speedups``` function to fit the benchmark settings on your demand.
123+
95124
### Evaluation Results Example
96125

97126
<div align="center">
98-
<img src="/pics/Eval_result.jpg" alt="Violin plots of rectified speedup distributions" width="65%">
127+
<img src="/pics/Eval_result.png" alt="Violin plots of rectified speedup distributions" width="65%">
99128
</div>
100129

101130

graph_net/benchmark_demo.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ for package_path in "${samples_dir}"/*/; do
3131

3232
echo "[$(date)] FINISHED: ${package_name}/${model_name}"
3333
fi
34-
} >> "$global_log" 2>&1 &
34+
} >> "$global_log" 2>&1
3535
done
3636
done
3737

graph_net/test/nlp_model_getter.py

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
def get_auto_model_and_inputs(model_name, text, dtype):
2+
from paddlenlp.transformers import AutoConfig, AutoModelForCausalLM, AutoTokenizer
3+
4+
config = AutoConfig.from_pretrained(model_name)
5+
model = AutoModelForCausalLM.from_config(config, dtype=dtype)
6+
model = model.eval()
7+
8+
tokenizer = AutoTokenizer.from_pretrained(model_name)
9+
tokenizer.pad_token = tokenizer.eos_token
10+
inputs = tokenizer(
11+
text, return_tensors="pd", padding=True, truncation=True, max_length=2048
12+
)
13+
return model, inputs
14+
15+
16+
def get_bert_model_and_inputs(model_name, text, dtype):
17+
from paddlenlp.transformers import BertModel, BertTokenizer
18+
19+
model = BertModel.from_pretrained(model_name)
20+
model.eval()
21+
22+
tokenizer = BertTokenizer.from_pretrained(model_name)
23+
inputs = tokenizer(text, return_tensors="pd")
24+
return model, inputs
25+
26+
27+
def get_convbert_model_and_inputs(model_name, text, dtype):
28+
from paddlenlp.transformers import ConvBertModel as ModelClass
29+
from paddlenlp.transformers import ConvBertTokenizer as TokenizerClass
30+
31+
model = ModelClass.from_pretrained(model_name)
32+
model.eval()
33+
34+
tokenizer = TokenizerClass.from_pretrained(model_name)
35+
inputs = tokenizer(text, return_tensors="pd")
36+
return model, inputs
37+
38+
39+
def get_ernie_model_and_inputs(model_name, text, dtype):
40+
from paddlenlp.transformers import ErnieModel, ErnieTokenizer
41+
42+
model = ErnieModel.from_pretrained(model_name)
43+
tokenizer = ErnieTokenizer.from_pretrained(model_name)
44+
inputs = tokenizer(text, return_tensors="pd")
45+
return model, inputs
46+
47+
48+
def get_ernie_m_model_and_inputs(model_name, text, dtype):
49+
from paddlenlp.transformers import ErnieMModel as ModelClass
50+
from paddlenlp.transformers import ErnieMTokenizer as TokenizerClass
51+
52+
model = ModelClass.from_pretrained(model_name)
53+
model.eval()
54+
55+
tokenizer = TokenizerClass.from_pretrained(model_name)
56+
inputs = tokenizer(text, return_tensors="pd")
57+
return model, inputs
58+
59+
60+
def get_gpt_model_and_inputs(model_name, text, dtype):
61+
from paddlenlp.transformers import GPTModel, GPTTokenizer
62+
63+
model = GPTModel.from_pretrained(model_name)
64+
model.eval()
65+
66+
tokenizer = GPTTokenizer.from_pretrained(model_name)
67+
inputs = tokenizer(text, return_tensors="pd")
68+
inputs.pop("token_type_ids")
69+
return model, inputs
70+
71+
72+
def get_nezha_model_and_inputs(model_name, text, dtype):
73+
from paddlenlp.transformers import NeZhaModel as ModelClass
74+
from paddlenlp.transformers import NeZhaTokenizer as TokenizerClass
75+
76+
model = ModelClass.from_pretrained(model_name)
77+
tokenizer = TokenizerClass.from_pretrained(model_name)
78+
inputs = tokenizer(text, return_tensors="pd")
79+
return model, inputs
80+
81+
82+
def get_ppminilm_model_and_inputs(model_name, text, dtype):
83+
from paddlenlp.transformers import PPMiniLMModel as ModelClass
84+
from paddlenlp.transformers import PPMiniLMTokenizer as TokenizerClass
85+
86+
model = ModelClass.from_pretrained(model_name)
87+
tokenizer = TokenizerClass.from_pretrained(model_name)
88+
inputs = tokenizer(text, return_tensors="pd")
89+
return model, inputs
90+
91+
92+
def get_reformer_model_and_inputs(model_name, text, dtype):
93+
from paddlenlp.transformers import RoFormerModel as ModelClass
94+
from paddlenlp.transformers import RoFormerTokenizer as TokenizerClass
95+
96+
model = ModelClass.from_pretrained(model_name)
97+
tokenizer = TokenizerClass.from_pretrained(model_name)
98+
inputs = tokenizer(text, return_tensors="pd")
99+
return model, inputs
100+
101+
102+
def get_skep_model_and_inputs(model_name, text, dtype):
103+
from paddlenlp.transformers import SkepModel as ModelClass
104+
from paddlenlp.transformers import SkepTokenizer as TokenizerClass
105+
106+
model = ModelClass.from_pretrained(model_name)
107+
tokenizer = TokenizerClass.from_pretrained(model_name)
108+
inputs = tokenizer(text, return_tensors="pd")
109+
return model, inputs

0 commit comments

Comments
 (0)