| 
									
										
										
										
											2024-03-19 09:26:26 -05:00
										 |  |  | # Copyright (c) Sebastian Raschka under Apache License 2.0 (see LICENSE.txt). | 
					
						
							|  |  |  | # Source for "Build a Large Language Model From Scratch" | 
					
						
							|  |  |  | #   - https://www.manning.com/books/build-a-large-language-model-from-scratch | 
					
						
							|  |  |  | # Code: https://github.com/rasbt/LLMs-from-scratch | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # File for internal use (unit tests) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import pytest | 
					
						
							| 
									
										
										
										
											2024-03-29 09:03:36 -05:00
										 |  |  | from gpt_train import main | 
					
						
							| 
									
										
										
										
											2024-03-19 09:26:26 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @pytest.fixture | 
					
						
							|  |  |  | def gpt_config(): | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |         "vocab_size": 50257, | 
					
						
							| 
									
										
										
										
											2024-04-04 07:27:41 -05:00
										 |  |  |         "context_length": 12,  # small for testing efficiency | 
					
						
							|  |  |  |         "emb_dim": 32,         # small for testing efficiency | 
					
						
							|  |  |  |         "n_heads": 4,          # small for testing efficiency | 
					
						
							|  |  |  |         "n_layers": 2,         # small for testing efficiency | 
					
						
							| 
									
										
										
										
											2024-03-19 09:26:26 -05:00
										 |  |  |         "drop_rate": 0.1, | 
					
						
							|  |  |  |         "qkv_bias": False | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @pytest.fixture | 
					
						
							| 
									
										
										
										
											2024-04-05 07:24:46 -05:00
										 |  |  | def other_settings(): | 
					
						
							| 
									
										
										
										
											2024-03-19 09:26:26 -05:00
										 |  |  |     return { | 
					
						
							|  |  |  |         "learning_rate": 5e-4, | 
					
						
							|  |  |  |         "num_epochs": 1,    # small for testing efficiency | 
					
						
							|  |  |  |         "batch_size": 2, | 
					
						
							|  |  |  |         "weight_decay": 0.1 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-05 07:24:46 -05:00
										 |  |  | def test_main(gpt_config, other_settings): | 
					
						
							|  |  |  |     train_losses, val_losses, tokens_seen, model = main(gpt_config, other_settings) | 
					
						
							| 
									
										
										
										
											2024-03-19 09:26:26 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     assert len(train_losses) == 39, "Unexpected number of training losses" | 
					
						
							|  |  |  |     assert len(val_losses) == 39, "Unexpected number of validation losses" | 
					
						
							|  |  |  |     assert len(tokens_seen) == 39, "Unexpected number of tokens seen" |