-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
construct mlperf qGPT-J evaluation #16
construct mlperf qGPT-J evaluation #16
Conversation
f9cbc3f
to
0e66041
Compare
0e66041
to
3f08c5c
Compare
97967d5
to
a9bed81
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생 많으셨습니다. 몇 가지 코멘트 드렸습니다.
ec16187
to
6f41928
Compare
PR #12 머지되면 그 PR 리뷰에 따른 변경들을 이 PR에도 적용 부탁드립니다. |
A6000 에서 아래 두 commit 에서 실행하여 리뷰 반영한 commit 들에 의한 accuracy 변화가 없는 것을 확인했습니다. cc: @dkim-furiosa a9bed81 1000 calib 10 eval
c704929 1000 calib 10 eval
|
8564683
to
aa05f6e
Compare
#19 에서 적용하였던 639980e 를 aa05f6e 와 같이 변경 하였습니다. - if k in params and params[k].annotation == Optional[type(v)]
+ if k in params
+ and any(params[k].annotation == x for x in [type(v), Optional[type(v)]]) 아래의 config 들은 각 commit 에서 출력한 아래 함수들의 인자들입니다.
결론적으로, aa05f6e |
음, 논의가 좀 헛도는 것 같네요. 😢 위 질문에 예/아니오라고 먼저 답해주세요. |
맥락상 이 부분에서 혼선이 있었던 것 같습니다. |
aa05f6e 적용하여 A6000 에서 1000 calib 10 eval 에서 확인한 결과 accuracy 변화 없는 것으로 확인했습니다.
|
그렇군요. 사용하는 파이썬 버전이 3.10 이상인가요? |
|
질문 한 가지 더 드립니다. 패라미터에 타입 힌트가 주어지지 않은 경우는 고려하지 않아도 되나요? |
네 맞습니다. 타입 힌트가 주어지지 않는 경우가 없습니다.
|
super().__init__(quant_model.config) | ||
self.quant_model = quant_model | ||
self.config = quant_model.config |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
self.model_type = model_type | |
super().__init__(quant_model.config) | |
self.quant_model = quant_model | |
self.config = quant_model.config | |
super().__init__(quant_model.config) | |
self.quant_model = quant_model | |
self.config = quant_model.config | |
self.model_type = model_type |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
super().__init__(quant_model.config)
에서 self.model_type
을 호출하게 되어 있습니다.
변경 사항과 같이 고치게되면 아래와 같은 에러가 발생하는 것으로 확인됩니다.
Traceback (most recent call last):
File "/home/furiosa/miniconda3/envs/mlperf-qgpt-j/lib/python3.10/runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/home/furiosa/miniconda3/envs/mlperf-qgpt-j/lib/python3.10/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/home/furiosa/workspace/jason/inference/language/gpt-j/main.py", line 118, in <module>
main()
File "/home/furiosa/workspace/jason/inference/language/gpt-j/main.py", line 83, in main
sut.model = quantize_model(sut.model, args.quant_config_path, args.quant_param_path, args.quant_format_path)
File "/home/furiosa/workspace/jason/inference/language/gpt-j/quantization/__init__.py", line 30, in quantize_model
return QuantPreTrainedModel(model, model_type, input_names, concrete_args)
File "/home/furiosa/workspace/jason/inference/language/gpt-j/quantization/__init__.py", line 35, in __init__
super().__init__(quant_model.config)
File "/home/furiosa/miniconda3/envs/mlperf-qgpt-j/lib/python3.10/site-packages/transformers/modeling_utils.py", line 1101, in __init__
self.generation_config = GenerationConfig.from_model_config(config) if self.can_generate() else None
File "/home/furiosa/workspace/jason/inference/language/gpt-j/quantization/__init__.py", line 43, in can_generate
return self.model_type.can_generate()
File "/home/furiosa/miniconda3/envs/mlperf-qgpt-j/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1695, in __getattr__
raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'")
AttributeError: 'QuantPreTrainedModel' object has no attribute 'model_type'
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
부모 클래스가 추상 클래스가 아닌데 부모 클래스 생성자를 부를 때 특정 필드가 존재하길 기대하는 일은 드뭅니다. 이런 경우를 만나면 자기의 이해와 코드를 다시 한 번 점검해야 하겠습니다. 당장 can_generate()
메소드는 원래 클래스 메소드입니다: https://github.com/huggingface/transformers/blob/9fe3f585bb4ea29f209dc705d269fbe292e1128f/src/transformers/modeling_utils.py#L1506-L1518 반면, 아래에서 일반 메소드로 정의하고 있습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cd1ab9e 반영했습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
별도 PR 에서 QuantPreTrainedModel
rewrite 하겠습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셨습니다~
qGPT-J 재현 instruction 에 따라 환경을 구성했습니다.
w/o calibration 검증
아래와 같이 결과 확인하여 검증 완료하였습니다.
w/ calibration 검증
이슈: #17 에 따라 w/ calibration 검증은 하지 못했습니다.
다만, 아래의 방법과 같이 A100 GPU 에서 계산한 qparam 이 동일한 것은 확인하였습니다.
quant_param 동일 여부 확인 코드
추가 실험)
아래는 A100 에서 calibration 및 evaluation 한 결과입니다. 모든 ROUGE score 가 H100 한 calibration 결과보다 근소하게 떨어지는 결과를 확인했습니다. 그러나 그 수준은 99.9% 는 상회하는 것을 확인했습니다.