|
17 | 17 |
|
18 | 18 | import paddle |
19 | 19 |
|
20 | | -from paddleformers.transformers import GraniteConfig, GraniteForCausalLM, GraniteModel |
| 20 | +from paddleformers.transformers import ( |
| 21 | + GraniteConfig, |
| 22 | + GraniteForCausalLM, |
| 23 | + GraniteModel, |
| 24 | +) |
21 | 25 | from tests.testing_utils import gpu_device_initializer |
22 | 26 | from tests.transformers.test_configuration_common import ConfigTester |
23 | 27 | from tests.transformers.test_generation_utils import GenerationTesterMixin |
@@ -178,14 +182,28 @@ def create_and_check_lm_model(self, config, input_ids, input_mask, sequence_labe |
178 | 182 | def create_and_check_loss(self, config, input_ids, input_mask, sequence_labels, token_labels, choice_labels): |
179 | 183 | model = GraniteForCausalLM(config) |
180 | 184 | model.eval() |
181 | | - result = model(input_ids, labels=input_ids) |
182 | | - self.parent.assertEqual(result[0].ndim, 0) |
| 185 | + labels = input_ids.clone() |
| 186 | + labels[:, :2] = -100 |
| 187 | + result = model(input_ids, labels=labels, return_dict=True) |
| 188 | + shift_logits = result.logits[:, :-1].reshape([-1, config.vocab_size]) |
| 189 | + shift_labels = labels[:, 1:].reshape([-1]) |
| 190 | + valid = shift_labels != -100 |
| 191 | + safe_labels = paddle.where(valid, shift_labels, paddle.zeros_like(shift_labels)) |
| 192 | + selected_log_probs = paddle.take_along_axis( |
| 193 | + paddle.nn.functional.log_softmax(shift_logits, axis=-1), safe_labels.unsqueeze(-1), axis=-1 |
| 194 | + ).squeeze(-1) |
| 195 | + expected_loss = -(selected_log_probs * paddle.cast(valid, selected_log_probs.dtype)).sum() / paddle.cast( |
| 196 | + valid, selected_log_probs.dtype |
| 197 | + ).sum() |
| 198 | + self.parent.assertTrue(paddle.allclose(result.loss, expected_loss, rtol=1e-5, atol=1e-5)) |
183 | 199 |
|
184 | 200 | def create_and_check_generate(self, config, input_ids, input_mask): |
185 | 201 | model = GraniteForCausalLM(config) |
186 | 202 | model.eval() |
187 | | - result = model.generate(input_ids, max_new_tokens=5, decode_strategy="greedy_search") |
188 | | - self.parent.assertIsNotNone(result) |
| 203 | + generated = model.generate(input_ids, max_new_tokens=5, decode_strategy="greedy_search") |
| 204 | + if isinstance(generated, tuple): |
| 205 | + generated = generated[0] |
| 206 | + self.parent.assertEqual(generated.shape, [input_ids.shape[0], 5]) |
189 | 207 |
|
190 | 208 | def prepare_config_and_inputs_for_common(self): |
191 | 209 | config_and_inputs = self.prepare_config_and_inputs() |
|
0 commit comments