質問編集履歴

1

クレームです。

2024/07/22 07:13

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- keras_nlpでGemmaモデル保存と読み込み時にエラーが出る
1
+ teratailの投稿削除条件の緩和を希望します。
test CHANGED
@@ -1,155 +1,5 @@
1
- ### 実現したいこと
2
- 今しようとしていは、keras_nlpイブリでhuggingface hub上にあるgoogle/gemma-2bモデル読み込んでファインチューニングすることです。8bit量子化とLoRA(Low-Rank Adaptation)も利用しKaggleのTPU環境での訓練を行おうしています。GPU利用えていません(無料GPUは遅いめ)
3
- kerasバックエンドはtensorflow(デフォルト)です。
4
-
5
- ### 発生している問題・分ないこ
6
- 8bit量子化とLoRAの有効化を行うとモデル保存時に「配列の形状が合わない」というようなエラーが発生してしまいます。
7
- 8bit量子化だけの時はモデル読み込み時にレイヤーの読み込みに失敗(?)します。
8
- 8bit量子化をしないでLoRAだけを有効にするとメモリ不足になってしまいます。8bit量子化とLoRAの有効化を両方とも行ったときに発生するエラーの解消方法と、できれば原因も教えていただきたいです。
9
-
10
- ### エラーメッセージ
11
- ```error
12
- # 量子化とLoRA
13
- /usr/local/lib/python3.10/site-packages/keras/src/models/model.py:385: UserWarning: Layer InputLayer does not have a `quantize()` method implemented.
14
- warnings.warn(str(e))
15
- /usr/local/lib/python3.10/site-packages/keras/src/models/model.py:385: UserWarning: Layer RMSNormalization does not have a `quantize()` method implemented.
16
- warnings.warn(str(e))
17
- /usr/local/lib/python3.10/site-packages/keras/src/models/model.py:385: UserWarning: Layer RotaryEmbedding does not have a `quantize()` method implemented.
18
- warnings.warn(str(e))
19
- /usr/local/lib/python3.10/site-packages/keras/src/models/model.py:385: UserWarning: Layer Softmax does not have a `quantize()` method implemented.
20
- warnings.warn(str(e))
21
- /usr/local/lib/python3.10/site-packages/keras/src/models/model.py:385: UserWarning: Layer Dropout does not have a `quantize()` method implemented.
22
- warnings.warn(str(e))
23
- /usr/local/lib/python3.10/site-packages/keras/src/models/model.py:385: UserWarning: Layer ReversibleEmbedding does not have a `quantize()` method implemented.
24
- warnings.warn(str(e))
25
- ---------------------------------------------------------------------------
26
- InvalidArgumentError Traceback (most recent call last)
27
- Cell In[3], line 5
28
- 3 model.quantize("int8")
29
- 4 model.backbone.enable_lora(rank=16)
30
- ----> 5 model.save_to_preset("./japanese-gpt-chat")
31
- 6 model=GemmaCausalLM.from_preset("./japanese-gpt-chat")
32
-
33
- File /usr/local/lib/python3.10/site-packages/keras_nlp/src/models/task.py:329, in Task.save_to_preset(self, preset_dir)
34
- 326 self.save_task_weights(os.path.join(preset_dir, TASK_WEIGHTS_FILE))
35
- 328 self.preprocessor.save_to_preset(preset_dir)
36
- --> 329 self.backbone.save_to_preset(preset_dir)
37
-
38
- File /usr/local/lib/python3.10/site-packages/keras_nlp/src/models/backbone.py:204, in Backbone.save_to_preset(self, preset_dir)
39
- 198 """Save backbone to a preset directory.
40
- 199
41
- 200 Args:
42
- 201 preset_dir: The path to the local model preset directory.
43
- 202 """
44
- 203 save_serialized_object(self, preset_dir, config_file=CONFIG_FILE)
45
- --> 204 self.save_weights(os.path.join(preset_dir, MODEL_WEIGHTS_FILE))
46
- 205 save_metadata(self, preset_dir)
47
-
48
- File /usr/local/lib/python3.10/site-packages/keras/src/utils/traceback_utils.py:122, in filter_traceback.<locals>.error_handler(*args, **kwargs)
49
- 119 filtered_tb = _process_traceback_frames(e.__traceback__)
50
- 120 # To get the full stack trace, call:
51
- 121 # `keras.config.disable_traceback_filtering()`
52
- --> 122 raise e.with_traceback(filtered_tb) from None
53
- 123 finally:
54
- 124 del filtered_tb
55
-
56
- File /usr/local/lib/python3.10/site-packages/tensorflow/python/framework/ops.py:5983, in raise_from_not_ok_status(e, name)
57
- 5981 def raise_from_not_ok_status(e, name) -> NoReturn:
58
- 5982 e.message += (" name: " + str(name if name is not None else ""))
59
- -> 5983 raise core._status_to_exception(e) from None
60
-
61
- InvalidArgumentError: {{function_node __wrapped__RealDiv_device_/job:localhost/replica:0/task:0/device:CPU:0}} Incompatible shapes: [8,2048,256] vs. [1,1,8,256] [Op:RealDiv] name:
62
-
63
- # 量子化のみ
64
- /usr/local/lib/python3.10/site-packages/keras/src/models/model.py:385: UserWarning: Layer InputLayer does not have a `quantize()` method implemented.
65
- warnings.warn(str(e))
66
- /usr/local/lib/python3.10/site-packages/keras/src/models/model.py:385: UserWarning: Layer RMSNormalization does not have a `quantize()` method implemented.
67
- warnings.warn(str(e))
68
- /usr/local/lib/python3.10/site-packages/keras/src/models/model.py:385: UserWarning: Layer RotaryEmbedding does not have a `quantize()` method implemented.
69
- warnings.warn(str(e))
70
- /usr/local/lib/python3.10/site-packages/keras/src/models/model.py:385: UserWarning: Layer Softmax does not have a `quantize()` method implemented.
71
- warnings.warn(str(e))
72
- /usr/local/lib/python3.10/site-packages/keras/src/models/model.py:385: UserWarning: Layer Dropout does not have a `quantize()` method implemented.
73
- warnings.warn(str(e))
74
- /usr/local/lib/python3.10/site-packages/keras/src/models/model.py:385: UserWarning: Layer ReversibleEmbedding does not have a `quantize()` method implemented.
75
- warnings.warn(str(e))
76
- ---------------------------------------------------------------------------
77
- ValueError Traceback (most recent call last)
78
- Cell In[3], line 6
79
- 4 #model.backbone.enable_lora(rank=16)
80
- 5 model.save_to_preset("./japanese-gpt-chat")
81
- ----> 6 model=GemmaCausalLM.from_preset("./japanese-gpt-chat")
82
-
83
- File /usr/local/lib/python3.10/site-packages/keras_nlp/src/models/task.py:231, in Task.from_preset(cls, preset, load_weights, **kwargs)
84
- 229 if check_file_exists(preset, TASK_WEIGHTS_FILE):
85
- 230 task.load_task_weights(get_file(preset, TASK_WEIGHTS_FILE))
86
- --> 231 task.backbone.load_weights(get_file(preset, MODEL_WEIGHTS_FILE))
87
- 232 task.preprocessor.tokenizer.load_preset_assets(preset)
88
- 233 return task
89
-
90
- File /usr/local/lib/python3.10/site-packages/keras/src/utils/traceback_utils.py:122, in filter_traceback.<locals>.error_handler(*args, **kwargs)
91
- 119 filtered_tb = _process_traceback_frames(e.__traceback__)
92
- 120 # To get the full stack trace, call:
93
- 121 # `keras.config.disable_traceback_filtering()`
94
- --> 122 raise e.with_traceback(filtered_tb) from None
95
- 123 finally:
96
- 124 del filtered_tb
97
-
98
- File /usr/local/lib/python3.10/site-packages/keras/src/saving/saving_lib.py:456, in _raise_loading_failure(error_msgs, warn_only)
99
- 454 warnings.warn(msg)
100
- 455 else:
101
- --> 456 raise ValueError(msg)
102
-
103
- ValueError: A total of 126 objects could not be loaded. Example error message for object <EinsumDense name=key, built=True>:
104
-
105
- Layer 'key' expected 1 variables, but received 2 variables during loading. Expected: ['kernel']
106
-
107
- List of objects that could not be loaded:
108
- [<EinsumDense name=key, built=True>, <EinsumDense name=attention_output, built=True>, <EinsumDense name=query, built=True>, <EinsumDense name=value, built=True>, <EinsumDense name=ffw_linear, built=True>, <EinsumDense name=ffw_gating, built=True>, <EinsumDense name=ffw_gating_2, built=True>, <EinsumDense name=ffw_gating_2, built=True>, <EinsumDense name=key, built=True>, <EinsumDense name=attention_output, built=True>, <EinsumDense name=query, built=True>, <EinsumDense name=value, built=True>, <EinsumDense name=ffw_linear, built=True>, <EinsumDense name=ffw_gating_2, built=True>, <EinsumDense name=key, built=True>, <EinsumDense name=attention_output, built=True>, <EinsumDense name=query, built=True>, <EinsumDense name=value, built=True>, <EinsumDense name=ffw_linear, built=True>, <EinsumDense name=ffw_gating, built=True>, <EinsumDense name=ffw_gating_2, built=True>, <EinsumDense name=key, built=True>, <EinsumDense name=attention_output, built=True>, <EinsumDense name=query, built=True>, <EinsumDense name=value, built=True>, <EinsumDense name=ffw_linear, built=True>, <EinsumDense name=ffw_gating, built=True>, <EinsumDense name=ffw_gating_2, built=True>]
109
-
110
- # LoRAのみ
111
- ただのメモリ不足のエラー。
112
- ```
113
-
114
- ### 該当のソースコード
115
-
116
- ```Python
117
- from keras_nlp.models import GemmaCausalLM
118
- model=GemmaCausalLM.from_preset("hf://google/gemma-2b")
119
- model.quantize("int8")
120
- model.backbone.enable_lora(rank=16)
121
- model.save_to_preset("./gemma")
122
- model=GemmaCausalLM.from_preset("./gemma")
123
- ```
124
-
125
- ### 試したこと・調べたこと
126
- - [x] teratailやGoogle等で検索した
127
- - [x] ソースコードを自分なりに変更した
128
- - [ ] 知人に聞いた
129
- - [ ] その他
130
-
131
- ##### 上記の詳細・結果
132
- teratailは[Tensorflowのエラーの意味。Incompatible shapes。
133
- ](https://teratail.com/questions/141391)のような、ケアレスミス(?)のようなものしか出てこなかったです。
134
- Googleはkeras_nlpでGemmaCausalLMのようなモデルをファインチューニングするというよりは、LLMではないモデルを自分で構築して学習させる時のIncompatible shapesエラーしか出てきませんでした。
135
- quantizeメソッドとenable_loraメソッドを使う[githubのページ](https://github.com/keras-team/keras/pull/19356)のqlora.pyを参考にしました。このqlora.pyでは保存するところまでは書いていないです。
136
-
137
- ### 補足
138
- 何となく関係ありようなライブラリのバージョンを載せておきます。
139
- Kaggleの仮想環境は2024年7月12日のものです。
140
- accelerate 0.32.1
141
- huggingface-hub 0.23.4
142
- keras 3.4.1
143
- keras-nlp 0.14.0
144
- libtpu-nightly 0.1.dev20231213
145
- numpy 1.26.4
146
- optax 0.2.2
147
- optree 0.12.1
148
- safetensors 0.4.3
149
- scipy 1.14.0
150
- sympy 1.13.0
151
- tensorflow 2.16.1
152
- tf_keras 2.16.0
153
- tokenizers 0.19.1
154
- transformers 4.42.3
155
- triton 2.3.0
1
+ どうても解決策が分からないエラーが出からteratailに質問を投稿したのですが、他の質問を見てみたら
2
+ 1. 質問するときにエー全体を書かない。エー全体載せくれとのコメントに「覚えているところだけ載せた。」と再実行する気なし。
3
+ 2. 回答者がteratailのヘプページをしつこくコメントす
4
+ 3. 質問者が日本語出来ないし、本人がそれを自覚していないのでプログラミング専門のヤフー知恵袋みたいになっている。
5
+ などなど意味不明なので質問を削除して退会したんですが、調べたらほぼ削除不可のようです。事前に調べなかった私が悪いのですがこのような内容に書き換えれば垢BANのついでに質問消してくれるかもしれないと思ってほんの僅かに期待しています。本当にのサイトはク○です。