Transformers ONNX#
transforemrs์์ ๋ชจ๋ธ๋ค์ ONNX๋ก ๋ณํํ๊ธฐ#
Open Neural Network Exchange(ONNX)์ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ๋ค์ builtํ๊ธฐ ์ํ ecosystem, ์ฆ ๋ค์ํ ํ๋ ์์ํฌ์์ ๊ณตํต๋ ์ธ์
์ ํตํด ์คํํ๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์ค์ํ๋ถ๋ถ์ด ์๋ค. ๋ฐ๋ก production helps increase the speed of innovation in the AI community
ํผํฌ๋จผ์ค๋ฅผ ํฅ์์์ผ์ค๋ค๋ ์ ์ด๋ค.
๊ทธ๋์ ์ด๋ฒ ์ฅ์์๋ transformers์์ ONNX๋ฅผ ์ ์ฉํ ์ฝ์ง๊ธฐ๋ฅผ ์์ฑํ๋ค.
model#
tansformers์์๋ ๊ฐ์ข
๋
ผ๋ฌธ์์ ์ธ๊ธํ bpe ๊ฐ์ ํ ํฌ๋์ด์ ์, ์
๋ ฅ๊ฐ, ๋ ์ด์ ๋ฅผ ๋์ผํ๊ฒ ๋ง๋ค์ด๋จ๋ค.
๊ทธ๋์ ONNX๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์
๋ ฅ์ด ๋์ฒด๋ก ๋ค๋ฅด๋ค.
์ด ์
๋ ฅ๊ฐ์ด ๋์ผํ๊ฒ ์ฌ์ฉ๋๊ฑฐ๋ shape_inference.infer_shapes
์ ํจ์๋ก ๋ถ๋ฌ์ค๊ณ ์ ์ฉ๋ง ํ๋ค๋ฉด ์ข์ผ๋ จ๋ง ์์ฝ๊ฒ๋ ์์ง ์๋ฒฝํ๊ฒ ์ ์ฉ๋์ง ์๋๋ค.
๊ทธ๋์ ๊ฐ ๋ชจ๋ธ์ ๋ํ ONNX ๋ณํ์ ์๋ํด๋ณธ๋ค.
ํ๋ก์ธ์ค๋ ๊ฐ๋จํ๊ฒ onnx๋ก ๋ณํํด์ฃผ๊ณ ๋ณํํด์ค onnx๋ชจ๋ธ์ onnx_runtime์ผ๋ก ์ธ์ ์ ์ด์ด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋จผ์ Bert๋ ํํ ๋ฆฌ์ผ์ ์ ์ค๋ช
ํด์คฌ๋ค.
https://github.com/huggingface/transformers/blob/master/notebooks/04-onnx-export.ipynb
from transformers.convert_graph_to_onnx import convert
# Handles all the above steps for you
convert(framework="pt", model="bert-base-cased", output=Path("onnx/bert-base-cased.onnx"), opset=11)
๊ทธ๋ฆฌ๊ณ seq2seq ๋ชจ๋ธ์ค Conditional Generation์ผ๋ก ์ ์ฉํ๊ฒ ์ ์ฉํ ์ ์๋ T5๋ชจ๋ธ๋ library๋ก ์ ๊ตฌํํด ๋์๋๋ผ.
https://github.com/Ki6an/fastT5
์ด fastT5๋ encoder์ decoder ๊ทธ๋ฆฌ๊ณ lm_head๋ก ๊ตฌ์ฑ๋๋๋ฐ, lm_head๋ decoder๊ฐ lm_head๋ก initํ๊ธฐ ๋๋ฌธ์ ํ์ํ๋ค. ๊ทธ๋์ ์ด 3๊ฐ์ ๋ชจ๋ธ๋ก ๋๋์ด์ ์ ์ฅ์ด ๋๋ค
from fastT5 import export_and_get_onnx_model
from transformers import AutoTokenizer
model_name = 't5-small'
model = export_and_get_onnx_model(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
t_input = "translate English to French: The universe is a dark forest."
token = tokenizer(t_input, return_tensors='pt')
tokens = model.generate(input_ids=token['input_ids'],
attention_mask=token['attention_mask'],
num_beams=2)
output = tokenizer.decode(tokens.squeeze(), skip_special_tokens=True)
print(output)
์ถ๊ฐ์ ์ผ๋ก fastT5์๋ wrapํ quantization์ด ์๋ค.
onnx์์ quantize
ํจ์๋ฅผ ์ด์ฉํด์ quantization์ ํ ์์๋๋ฐ, ์คํ ๊ฒฐ๊ณผ 1ํผ์ผํธ ์ ๋์ ์ ํ๋๋ฅผ ๋จ์ด๋จ๋ฆฌ์ง๋ง ๋ชจ๋ธ์ ํฌ๊ธฐ๋ฅผ ์ ๋ฐ์์ 2/3 ์ ๋๋ก ์ค์ฌ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์กฐ๊ธ์ด๋ผ๋ ์๋ ์ ์๋ค.
์ถ๊ฐ์ ์ผ๋ก(2) huggingface 4.6์ด์์์ ๋๋ ค์ผ ๋๋ค.
๊ด๋ จ์ด์๋ ์ด๊ณณ https://github.com/huggingface/transformers/pull/10651
๊ทธ๋ฆฌ๊ณ Xlnet์์๋? ์ ๋ ฅ์ encoder์ค 1๊ฐ๋ฅผ ๋นผ์ผ๋๋๋ฐโฆ.. ๊ทธ๊ฒ์ ๋ฐ๋ก