diff --git "a/ipynb/llm/3. Integrated_model.ipynb" "b/ipynb/llm/3. Integrated_model.ipynb"
--- "a/ipynb/llm/3. Integrated_model.ipynb"
+++ "b/ipynb/llm/3. Integrated_model.ipynb"
@@ -1 +1 @@
-{"cells":[{"cell_type":"markdown","source":["---"],"metadata":{"id":"zMzaz60DvqTR"}},{"cell_type":"markdown","metadata":{"id":"wAQMA1-DKZZ5"},"source":["# Summarisation + QnA Custom Dataset Creation\n","\n","## 1. Introduction\n","\n","High-quality data is fundamental for producing a good model; the higher the quality of the data, the better the resulting model. The following steps outline the process of creating a dataset specifically for fine-tuning our Llama2 model.\n","\n","\n","\n","![](https://i.imgur.com/IDNhAWH.png)\n","\n","\n","There are several types of datasets that can be used to fine-tune Large Language Models (LLMs):\n","\n","1. **Instruction Datasets:** These datasets contain direct instructions or prompts followed by the correct or expected outputs.\n","\n","2. **Raw Completion:** This involves providing a prompt to the model and letting it generate a response without any predefined correct answer.\n","\n","3. **Preference Datasets:** These datasets include human feedback in the form of preferences, where annotators compare pairs of model outputs to determine which is better.\n","\n","4. **Human Feedback Data:** This is specific to Reinforcement Learning from Human Feedback (RLHF) and involves direct feedback on the model's outputs from human annotators.\n","\n","5. **Demonstration Data:** Also used in RLHF, these datasets consist of examples showing ideal model outputs or actions, typically created by humans.\n","\n","6. **Reward Modeling Data:** Used to train a reward model in RLHF, this dataset predicts human feedback on model outputs based on actual feedback data.\n","\n","7. **Dialogue Data:** Particularly relevant for conversational AI, this includes annotated conversations that indicate the quality of responses or provide corrections.\n","\n","\n","---\n","\n","\n","\n","* Typically, an instruction dataset is utilized for fine-tuning the Llama 2 Model. Since we are focusing on Supervised Fine Tuning, the instruction dataset becomes our primary choice.\n","\n","Therefore, we have 2 options:\n","\n","1. Create our own Instruction Dataset.\n","2. Modify an existing instruction dataset, which involves filtering, modifying, and enriching it.\n","\n","We have decided to proceed with the 1st option: creating our own Instruction Dataset.\n","\n","* This will involve prompt engineering and incorporating sanity checks to ensure quality and relevance."]},{"cell_type":"markdown","metadata":{"id":"hU_mUK-nol-t"},"source":["## 2. Load and analyze the dataset"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8P7g6eHuxxKe","outputId":"53c785e0-5e95-42d0-a973-17aaf53371d2"},"outputs":[{"name":"stderr","output_type":"stream","text":["huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n","To disable this warning, you can either:\n","\t- Avoid using `tokenizers` before the fork if possible\n","\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n"]},{"name":"stdout","output_type":"stream","text":["\u001b[31mERROR: Could not find a version that satisfies the requirement faiss-gpu (from versions: none)\u001b[0m\u001b[31m\n","\u001b[0m\u001b[31mERROR: No matching distribution found for faiss-gpu\u001b[0m\u001b[31m\n","\u001b[0m"]}],"source":["# Install libraries\n","!pip install -q datasets transformers sentence_transformers faiss-gpu huggingface_hub"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"KKb-ikj4J-in"},"outputs":[],"source":["# Import the required libraries\n","import json\n","import sys\n","import pandas as pd\n","from datasets import Dataset, DatasetDict, load_dataset\n","\n","from transformers import AutoTokenizer\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","\n","from sentence_transformers import SentenceTransformer\n","import faiss\n","from tqdm.autonotebook import tqdm\n","import numpy as np"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"bGi9FdmhdBDg","outputId":"33a7788a-741a-47f5-9093-eaae5aaa0525"},"outputs":[{"name":"stdout","output_type":"stream","text":["DatasetDict({\n"," train: Dataset({\n"," features: ['instruction', 'input_content', 'expected_output'],\n"," num_rows: 448\n"," })\n"," test: Dataset({\n"," features: ['instruction', 'input_content', 'expected_output'],\n"," num_rows: 56\n"," })\n"," val: Dataset({\n"," features: ['instruction', 'input_content', 'expected_output'],\n"," num_rows: 56\n"," })\n","})\n"]}],"source":["# Load JSON data from a file\n","with open(\"my_data_non_MCQ.json\", \"r\") as f:\n"," data = json.load(f)\n","\n","# Create a Pandas DataFrame from the list of dictionaries\n","df = pd.DataFrame(data)\n","\n","# Calculate the number of rows for each dataset split\n","num_rows = len(df)\n","train_end = int(num_rows * 0.8) # 80% for training\n","test_end = train_end + int(num_rows * 0.1) # 10% for testing\n","\n","# Split the DataFrame into training, testing, and validation sets\n","df_train = df[:train_end]\n","df_test = df[train_end:test_end]\n","df_val = df[test_end:] # Ensures the remainder is used for validation\n","\n","# Create Datasets from the DataFrames\n","dataset_train = Dataset.from_pandas(df_train)\n","dataset_test = Dataset.from_pandas(df_test)\n","dataset_val = Dataset.from_pandas(df_val)\n","\n","# Create a DatasetDict containing the split datasets\n","dataset = DatasetDict({\n"," 'train': dataset_train,\n"," 'test': dataset_test,\n"," 'val': dataset_val\n","})\n","\n","# Print the structure of the created DatasetDict\n","print(dataset)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":719},"id":"-MOvcr5mD8li","outputId":"755ebe31-20bc-42e1-feb2-e43e76a03373"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
instruction
\n","
input_content
\n","
expected_output
\n","
\n"," \n"," \n","
\n","
0
\n","
Summarize the concept and applications of AI
\n","
AI refers to the development of computer syste...
\n","
AI, or artificial intelligence, involves the c...
\n","
\n","
\n","
1
\n","
Summarize the concept and applications of Mach...
\n","
Machine Learning is a subset of AI that focuse...
\n","
Machine Learning is a branch of AI that enable...
\n","
\n","
\n","
2
\n","
Summarize the concept and applications of Deep...
\n","
Deep Learning is a subset of Machine Learning ...
\n","
Deep Learning, a subset of Machine Learning, e...
\n","
\n","
\n","
3
\n","
Summarize the differences between AI, Machine ...
\n","
\n","
AI, Machine Learning, and Deep Learning are in...
\n","
\n","
\n","
4
\n","
Summarize the concept and structure of artific...
\n","
Artificial neural networks are built on the pr...
\n","
Artificial neural networks are structured base...
\n","
\n","
\n","
...
\n","
...
\n","
...
\n","
...
\n","
\n","
\n","
443
\n","
Summarize the considerations when deciding to ...
\n","
When considering whether to use deep learning ...
\n","
Considerations when deciding to use deep learn...
\n","
\n","
\n","
444
\n","
Summarize the concept of Machine Learning
\n","
Machine Learning is a subset of Artificial Int...
\n","
Machine Learning is a branch of AI that utiliz...
\n","
\n","
\n","
445
\n","
Summarize the applications of Machine Learning
\n","
Machine Learning has various applications acro...
\n","
Machine Learning finds applications in image r...
\n","
\n","
\n","
446
\n","
Summarize the concept of Image Recognition in ...
\n","
Image recognition is one of the applications o...
\n","
In Machine Learning, image recognition is the ...
\n","
\n","
\n","
447
\n","
Summarize the concept of Natural Language Proc...
\n","
Natural Language Processing (NLP) is another a...
\n","
Natural Language Processing (NLP) in Machine L...
\n","
\n"," \n","
\n","
448 rows × 3 columns
\n","
"],"text/plain":[" instruction \\\n","0 Summarize the concept and applications of AI \n","1 Summarize the concept and applications of Mach... \n","2 Summarize the concept and applications of Deep... \n","3 Summarize the differences between AI, Machine ... \n","4 Summarize the concept and structure of artific... \n",".. ... \n","443 Summarize the considerations when deciding to ... \n","444 Summarize the concept of Machine Learning \n","445 Summarize the applications of Machine Learning \n","446 Summarize the concept of Image Recognition in ... \n","447 Summarize the concept of Natural Language Proc... \n","\n"," input_content \\\n","0 AI refers to the development of computer syste... \n","1 Machine Learning is a subset of AI that focuse... \n","2 Deep Learning is a subset of Machine Learning ... \n","3 \n","4 Artificial neural networks are built on the pr... \n",".. ... \n","443 When considering whether to use deep learning ... \n","444 Machine Learning is a subset of Artificial Int... \n","445 Machine Learning has various applications acro... \n","446 Image recognition is one of the applications o... \n","447 Natural Language Processing (NLP) is another a... \n","\n"," expected_output \n","0 AI, or artificial intelligence, involves the c... \n","1 Machine Learning is a branch of AI that enable... \n","2 Deep Learning, a subset of Machine Learning, e... \n","3 AI, Machine Learning, and Deep Learning are in... \n","4 Artificial neural networks are structured base... \n",".. ... \n","443 Considerations when deciding to use deep learn... \n","444 Machine Learning is a branch of AI that utiliz... \n","445 Machine Learning finds applications in image r... \n","446 In Machine Learning, image recognition is the ... \n","447 Natural Language Processing (NLP) in Machine L... \n","\n","[448 rows x 3 columns]"]},"execution_count":23,"metadata":{},"output_type":"execute_result"}],"source":["# Read as pandas DataFrame\n","dataset['train'].to_pandas()"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"7WkFWJSQhKUV","outputId":"5ef5b8f2-d42b-4208-bba6-3986059ae6a3"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
instruction
\n","
input_content
\n","
expected_output
\n","
\n"," \n"," \n","
\n","
0
\n","
Summarize the hyperparameters in Support Vecto...
\n","
We take into account some essential hyperparam...
\n","
Support Vector Machine (SVM) is a machine lear...
\n","
\n","
\n","
1
\n","
Summarize the hyperparameters in XGBoost
\n","
The following essential XGBoost hyperparameter...
\n","
XGBoost is a popular gradient boosting algorit...
\n","
\n","
\n","
2
\n","
Summarize other examples of model hyperparameters
\n","
Some other examples of model hyperparameters i...
\n","
In addition to SVM and XGBoost, other machine ...
\n","
\n","
\n","
3
\n","
Summarize the importance of hyperparameter tun...
\n","
Hyperparameter tuning is crucial in machine le...
\n","
Hyperparameter tuning plays a critical role in...
\n","
\n","
\n","
4
\n","
Summarize the concept and applications of Deep...
\n","
Deep Learning is a type of Machine Learning th...
\n","
Deep Learning is a subset of Machine Learning ...
\n","
\n","
\n","
5
\n","
Explain the use of Deep Learning in image and ...
\n","
Deep learning algorithms are used in image and...
\n","
Deep Learning algorithms play a crucial role i...
\n","
\n","
\n","
6
\n","
Describe the applications of Deep Learning in ...
\n","
Deep Learning algorithms are used for tasks su...
\n","
Deep Learning algorithms find applications in ...
\n","
\n","
\n","
7
\n","
Explain the role of Deep Learning in fraud det...
\n","
Deep Learning algorithms are used in financial...
\n","
Deep Learning algorithms play a vital role in ...
\n","
\n","
\n","
8
\n","
Summarize the concept of artificial neural net...
\n","
Artificial neural networks are built on the pr...
\n","
Artificial neural networks are modeled after h...
\n","
\n","
\n","
9
\n","
Summarize the architecture of artificial neura...
\n","
Artificial neural networks have input layers, ...
\n","
Artificial neural networks consist of input, h...
\n","
\n","
\n","
10
\n","
Differentiate between machine learning and dee...
\n","
Machine learning and deep learning are subsets...
\n","
Machine learning and deep learning are subsets...
\n","
\n","
\n","
11
\n","
Highlight the differences between machine lear...
\n","
Machine learning involves manual extraction of...
\n","
Machine learning requires manual feature extra...
\n","
\n","
\n","
12
\n","
Summarize the concept of Deep Learning
\n","
Deep learning is a branch of machine learning ...
\n","
Deep learning is a subfield of machine learnin...
\n","
\n","
\n","
13
\n","
Explain the architecture of an artificial neur...
\n","
An artificial neural network (ANN) is the basi...
\n","
An artificial neural network (ANN) serves as t...
\n","
\n","
\n","
14
\n","
Discuss the applications of Deep Learning
\n","
Deep learning has found applications in variou...
\n","
Deep learning has been applied to computer vis...
\n","
\n","
\n","
15
\n","
Explain the different types of machine learnin...
\n","
Deep learning employs various machine learning...
\n","
Deep learning encompasses supervised learning,...
\n","
\n","
\n","
16
\n","
Summarize the types of neural networks used in...
\n","
Deep learning models are able to automatically...
\n","
Deep learning models use various types of neur...
\n","
\n","
\n","
17
\n","
Summarize the applications of deep learning in...
\n","
Deep learning models can enable machines to id...
\n","
Deep learning has several applications in comp...
\n","
\n","
\n","
18
\n","
Summarize the applications of deep learning in...
\n","
Deep learning models can enable machines to un...
\n","
Deep learning plays a crucial role in natural ...
\n","
\n","
\n","
19
\n","
Summarize the applications of deep learning in...
\n","
Deep learning models can be used in reinforcem...
\n","
Deep learning is employed in reinforcement lea...
\n","
\n","
\n","
20
\n","
Summarize the concept of Artificial Intelligence
\n","
Artificial Intelligence (AI) is the incorporat...
\n","
Artificial Intelligence (AI) involves incorpor...
\n","
\n","
\n","
21
\n","
Summarize the concept of Machine Learning
\n","
Machine Learning (ML) is the study/process tha...
\n","
Machine Learning (ML) enables systems to learn...
\n","
\n","
\n","
22
\n","
Summarize the concept of Deep Learning
\n","
Deep Learning (DL) is a sub-part of Machine Le...
\n","
Deep Learning (DL) is a sub-part of Machine Le...
\n","
\n","
\n","
23
\n","
Summarize the differences between Artificial I...
\n","
Artificial Intelligence (AI) is the broader fa...
\n","
Artificial Intelligence (AI) encompasses Machi...
\n","
\n","
\n","
24
\n","
Summarize the concept and applications of AI
\n","
AI refers to the development of computer syste...
\n","
AI, or artificial intelligence, involves the c...
\n","
\n","
\n","
25
\n","
Summarize the concept and applications of Mach...
\n","
Machine Learning is a subset of AI that focuse...
\n","
Machine Learning is a branch of AI that enable...
\n","
\n","
\n","
26
\n","
Summarize the concept and applications of Deep...
\n","
Deep Learning is a subfield of Machine Learnin...
\n","
Deep Learning is a subfield of Machine Learnin...
\n","
\n","
\n","
27
\n","
Summarize the common examples of AI applications
\n","
AI has numerous applications across various in...
\n","
AI has a wide range of applications across var...
\n","
\n","
\n","
28
\n","
Summarize the role and responsibilities of an ...
\n","
An AI Engineer is a professional who designs, ...
\n","
An AI Engineer is responsible for designing, d...
\n","
\n","
\n","
29
\n","
Summarize the role and responsibilities of a M...
\n","
A Machine Learning Engineer is a professional ...
\n","
A Machine Learning Engineer is responsible for...
\n","
\n","
\n","
30
\n","
Summarize the role and responsibilities of a D...
\n","
A Deep Learning Engineer is a professional who...
\n","
A Deep Learning Engineer is responsible for de...
\n","
\n","
\n","
31
\n","
Differentiate between the roles of an AI Engin...
\n","
AI Engineers, Machine Learning Engineers, and ...
\n","
AI Engineers, Machine Learning Engineers, and ...
\n","
\n","
\n","
32
\n","
Summarize the concept of Artificial Neural Net...
\n","
Artificial Neural Network (ANN) is a type of n...
\n","
Artificial Neural Network (ANN) is a type of n...
\n","
\n","
\n","
33
\n","
Summarize the concept of Biological Neural Net...
\n","
Biological Neural Network (BNN) is a structure...
\n","
Biological Neural Network (BNN) is a neural ne...
\n","
\n","
\n","
34
\n","
Highlight the differences between Artificial N...
\n","
Artificial Neural Networks (ANNs) and Biologic...
\n","
Artificial Neural Networks (ANNs) and Biologic...
\n","
\n","
\n","
35
\n","
Summarize the overall differences between Arti...
\n","
While ANNs and BNNs share basic components, th...
\n","
Artificial Neural Networks (ANNs) and Biologic...
\n","
\n","
\n","
36
\n","
Summarize the concept of hyperparameter tuning...
\n","
Hyperparameter tuning is the process of select...
\n","
Hyperparameter tuning is the process of findin...
\n","
\n","
\n","
37
\n","
Summarize the different types of hyperparamete...
\n","
Neural networks have several essential hyperpa...
\n","
In neural networks, there are several importan...
\n","
\n","
\n","
38
\n","
Explain the impact of learning rate and epochs...
\n","
Learning rate and epochs are two critical hype...
\n","
Learning rate and epochs are crucial hyperpara...
\n","
\n","
\n","
39
\n","
Describe the role of architecture and activati...
\n","
Architecture and activation function are impor...
\n","
Architecture and activation function are cruci...
\n","
\n","
\n","
40
\n","
Summarize the concept of Hyperparameter Tuning
\n","
Hyperparameter tuning involves finding the bes...
\n","
Hyperparameter tuning is the process of findin...
\n","
\n","
\n","
41
\n","
Explain the advantages and disadvantages of Hy...
\n","
Hyperparameter tuning offers several advantage...
\n","
Hyperparameter tuning provides several advanta...
\n","
\n","
\n","
42
\n","
Discuss the challenges in Hyperparameter Tuning
\n","
Hyperparameter tuning faces several challenges...
\n","
Hyperparameter tuning encounters various chall...
\n","
\n","
\n","
43
\n","
Describe the applications of Hyperparameter Tu...
\n","
Hyperparameter tuning has various applications...
\n","
Hyperparameter tuning finds applications in di...
\n","
\n","
\n","
44
\n","
Summarize the challenges in Deep Learning
\n","
Deep learning has made significant advancement...
\n","
The challenges in deep learning include data a...
\n","
\n","
\n","
45
\n","
Summarize the advantages of Deep Learning
\n","
Deep Learning offers several advantages. Here ...
\n","
Advantages of deep learning include high accur...
\n","
\n","
\n","
46
\n","
Summarize the disadvantages of Deep Learning
\n","
Despite its advantages, Deep Learning also has...
\n","
Disadvantages of deep learning include high co...
\n","
\n","
\n","
47
\n","
Summarize the considerations when deciding to ...
\n","
When deciding whether to use Deep Learning for...
\n","
Considerations when deciding to use Deep Learn...
\n","
\n","
\n","
48
\n","
Summarize the concept of Machine Learning
\n","
Examples of Machine Learning: Machine Learning...
\n","
Machine Learning (ML) is a subset of Artificia...
\n","
\n","
\n","
49
\n","
Summarize the applications of Machine Learning...
\n","
Image recognition: Machine learning algorithms...
\n","
Machine Learning algorithms play a crucial rol...
\n","
\n","
\n","
50
\n","
Summarize the applications of Machine Learning...
\n","
Natural language processing (NLP): Machine lea...
\n","
Machine Learning algorithms are extensively em...
\n","
\n","
\n","
51
\n","
Summarize the applications of Machine Learning...
\n","
Recommendation systems: Machine learning algor...
\n","
Machine Learning algorithms are instrumental i...
\n","
\n","
\n","
52
\n","
Summarize the hyperparameters in Support Vecto...
\n","
Hyperparameters in Support Vector Machine We t...
\n","
In Support Vector Machine (SVM), there are thr...
\n","
\n","
\n","
53
\n","
Summarize the hyperparameters in XGBoost
\n","
Hyperparameters in XGBoost The following essen...
\n","
XGBoost has several important hyperparameters ...
\n","
\n","
\n","
54
\n","
Summarize some examples of model hyperparameters
\n","
Some other examples of model hyperparameters i...
\n","
Model hyperparameters can vary depending on th...
\n","
\n","
\n","
55
\n","
Summarize the importance of hyperparameter tun...
\n","
Hyperparameter tuning is a critical step in ma...
\n","
Hyperparameter tuning plays a crucial role in ...
\n","
\n"," \n","
\n","
"],"text/plain":[" instruction \\\n","0 Summarize the hyperparameters in Support Vecto... \n","1 Summarize the hyperparameters in XGBoost \n","2 Summarize other examples of model hyperparameters \n","3 Summarize the importance of hyperparameter tun... \n","4 Summarize the concept and applications of Deep... \n","5 Explain the use of Deep Learning in image and ... \n","6 Describe the applications of Deep Learning in ... \n","7 Explain the role of Deep Learning in fraud det... \n","8 Summarize the concept of artificial neural net... \n","9 Summarize the architecture of artificial neura... \n","10 Differentiate between machine learning and dee... \n","11 Highlight the differences between machine lear... \n","12 Summarize the concept of Deep Learning \n","13 Explain the architecture of an artificial neur... \n","14 Discuss the applications of Deep Learning \n","15 Explain the different types of machine learnin... \n","16 Summarize the types of neural networks used in... \n","17 Summarize the applications of deep learning in... \n","18 Summarize the applications of deep learning in... \n","19 Summarize the applications of deep learning in... \n","20 Summarize the concept of Artificial Intelligence \n","21 Summarize the concept of Machine Learning \n","22 Summarize the concept of Deep Learning \n","23 Summarize the differences between Artificial I... \n","24 Summarize the concept and applications of AI \n","25 Summarize the concept and applications of Mach... \n","26 Summarize the concept and applications of Deep... \n","27 Summarize the common examples of AI applications \n","28 Summarize the role and responsibilities of an ... \n","29 Summarize the role and responsibilities of a M... \n","30 Summarize the role and responsibilities of a D... \n","31 Differentiate between the roles of an AI Engin... \n","32 Summarize the concept of Artificial Neural Net... \n","33 Summarize the concept of Biological Neural Net... \n","34 Highlight the differences between Artificial N... \n","35 Summarize the overall differences between Arti... \n","36 Summarize the concept of hyperparameter tuning... \n","37 Summarize the different types of hyperparamete... \n","38 Explain the impact of learning rate and epochs... \n","39 Describe the role of architecture and activati... \n","40 Summarize the concept of Hyperparameter Tuning \n","41 Explain the advantages and disadvantages of Hy... \n","42 Discuss the challenges in Hyperparameter Tuning \n","43 Describe the applications of Hyperparameter Tu... \n","44 Summarize the challenges in Deep Learning \n","45 Summarize the advantages of Deep Learning \n","46 Summarize the disadvantages of Deep Learning \n","47 Summarize the considerations when deciding to ... \n","48 Summarize the concept of Machine Learning \n","49 Summarize the applications of Machine Learning... \n","50 Summarize the applications of Machine Learning... \n","51 Summarize the applications of Machine Learning... \n","52 Summarize the hyperparameters in Support Vecto... \n","53 Summarize the hyperparameters in XGBoost \n","54 Summarize some examples of model hyperparameters \n","55 Summarize the importance of hyperparameter tun... \n","\n"," input_content \\\n","0 We take into account some essential hyperparam... \n","1 The following essential XGBoost hyperparameter... \n","2 Some other examples of model hyperparameters i... \n","3 Hyperparameter tuning is crucial in machine le... \n","4 Deep Learning is a type of Machine Learning th... \n","5 Deep learning algorithms are used in image and... \n","6 Deep Learning algorithms are used for tasks su... \n","7 Deep Learning algorithms are used in financial... \n","8 Artificial neural networks are built on the pr... \n","9 Artificial neural networks have input layers, ... \n","10 Machine learning and deep learning are subsets... \n","11 Machine learning involves manual extraction of... \n","12 Deep learning is a branch of machine learning ... \n","13 An artificial neural network (ANN) is the basi... \n","14 Deep learning has found applications in variou... \n","15 Deep learning employs various machine learning... \n","16 Deep learning models are able to automatically... \n","17 Deep learning models can enable machines to id... \n","18 Deep learning models can enable machines to un... \n","19 Deep learning models can be used in reinforcem... \n","20 Artificial Intelligence (AI) is the incorporat... \n","21 Machine Learning (ML) is the study/process tha... \n","22 Deep Learning (DL) is a sub-part of Machine Le... \n","23 Artificial Intelligence (AI) is the broader fa... \n","24 AI refers to the development of computer syste... \n","25 Machine Learning is a subset of AI that focuse... \n","26 Deep Learning is a subfield of Machine Learnin... \n","27 AI has numerous applications across various in... \n","28 An AI Engineer is a professional who designs, ... \n","29 A Machine Learning Engineer is a professional ... \n","30 A Deep Learning Engineer is a professional who... \n","31 AI Engineers, Machine Learning Engineers, and ... \n","32 Artificial Neural Network (ANN) is a type of n... \n","33 Biological Neural Network (BNN) is a structure... \n","34 Artificial Neural Networks (ANNs) and Biologic... \n","35 While ANNs and BNNs share basic components, th... \n","36 Hyperparameter tuning is the process of select... \n","37 Neural networks have several essential hyperpa... \n","38 Learning rate and epochs are two critical hype... \n","39 Architecture and activation function are impor... \n","40 Hyperparameter tuning involves finding the bes... \n","41 Hyperparameter tuning offers several advantage... \n","42 Hyperparameter tuning faces several challenges... \n","43 Hyperparameter tuning has various applications... \n","44 Deep learning has made significant advancement... \n","45 Deep Learning offers several advantages. Here ... \n","46 Despite its advantages, Deep Learning also has... \n","47 When deciding whether to use Deep Learning for... \n","48 Examples of Machine Learning: Machine Learning... \n","49 Image recognition: Machine learning algorithms... \n","50 Natural language processing (NLP): Machine lea... \n","51 Recommendation systems: Machine learning algor... \n","52 Hyperparameters in Support Vector Machine We t... \n","53 Hyperparameters in XGBoost The following essen... \n","54 Some other examples of model hyperparameters i... \n","55 Hyperparameter tuning is a critical step in ma... \n","\n"," expected_output \n","0 Support Vector Machine (SVM) is a machine lear... \n","1 XGBoost is a popular gradient boosting algorit... \n","2 In addition to SVM and XGBoost, other machine ... \n","3 Hyperparameter tuning plays a critical role in... \n","4 Deep Learning is a subset of Machine Learning ... \n","5 Deep Learning algorithms play a crucial role i... \n","6 Deep Learning algorithms find applications in ... \n","7 Deep Learning algorithms play a vital role in ... \n","8 Artificial neural networks are modeled after h... \n","9 Artificial neural networks consist of input, h... \n","10 Machine learning and deep learning are subsets... \n","11 Machine learning requires manual feature extra... \n","12 Deep learning is a subfield of machine learnin... \n","13 An artificial neural network (ANN) serves as t... \n","14 Deep learning has been applied to computer vis... \n","15 Deep learning encompasses supervised learning,... \n","16 Deep learning models use various types of neur... \n","17 Deep learning has several applications in comp... \n","18 Deep learning plays a crucial role in natural ... \n","19 Deep learning is employed in reinforcement lea... \n","20 Artificial Intelligence (AI) involves incorpor... \n","21 Machine Learning (ML) enables systems to learn... \n","22 Deep Learning (DL) is a sub-part of Machine Le... \n","23 Artificial Intelligence (AI) encompasses Machi... \n","24 AI, or artificial intelligence, involves the c... \n","25 Machine Learning is a branch of AI that enable... \n","26 Deep Learning is a subfield of Machine Learnin... \n","27 AI has a wide range of applications across var... \n","28 An AI Engineer is responsible for designing, d... \n","29 A Machine Learning Engineer is responsible for... \n","30 A Deep Learning Engineer is responsible for de... \n","31 AI Engineers, Machine Learning Engineers, and ... \n","32 Artificial Neural Network (ANN) is a type of n... \n","33 Biological Neural Network (BNN) is a neural ne... \n","34 Artificial Neural Networks (ANNs) and Biologic... \n","35 Artificial Neural Networks (ANNs) and Biologic... \n","36 Hyperparameter tuning is the process of findin... \n","37 In neural networks, there are several importan... \n","38 Learning rate and epochs are crucial hyperpara... \n","39 Architecture and activation function are cruci... \n","40 Hyperparameter tuning is the process of findin... \n","41 Hyperparameter tuning provides several advanta... \n","42 Hyperparameter tuning encounters various chall... \n","43 Hyperparameter tuning finds applications in di... \n","44 The challenges in deep learning include data a... \n","45 Advantages of deep learning include high accur... \n","46 Disadvantages of deep learning include high co... \n","47 Considerations when deciding to use Deep Learn... \n","48 Machine Learning (ML) is a subset of Artificia... \n","49 Machine Learning algorithms play a crucial rol... \n","50 Machine Learning algorithms are extensively em... \n","51 Machine Learning algorithms are instrumental i... \n","52 In Support Vector Machine (SVM), there are thr... \n","53 XGBoost has several important hyperparameters ... \n","54 Model hyperparameters can vary depending on th... \n","55 Hyperparameter tuning plays a crucial role in ... "]},"execution_count":24,"metadata":{},"output_type":"execute_result"}],"source":["# Read as pandas DataFrame\n","dataset['test'].to_pandas()"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"03oFFWL4hM4S","outputId":"4ab2203a-2f25-4496-d7f7-76f902f06c36"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
instruction
\n","
input_content
\n","
expected_output
\n","
\n"," \n"," \n","
\n","
0
\n","
Summarize the concept and applications of Deep...
\n","
Deep Learning is a type of Machine Learning th...
\n","
Deep Learning is a subset of Machine Learning ...
\n","
\n","
\n","
1
\n","
Explain the use of Deep Learning in image and ...
\n","
Deep learning algorithms are used in image and...
\n","
Deep Learning algorithms play a crucial role i...
\n","
\n","
\n","
2
\n","
Describe the applications of Deep Learning in ...
\n","
Deep Learning algorithms are used for tasks su...
\n","
Deep Learning algorithms have extensive applic...
\n","
\n","
\n","
3
\n","
Explain the role of Deep Learning in fraud det...
\n","
Deep Learning algorithms are used in financial...
\n","
Deep Learning algorithms play a crucial role i...
\n","
\n","
\n","
4
\n","
Summarize the concept of artificial neural net...
\n","
Artificial neural networks are built on the pr...
\n","
Artificial neural networks are modeled after h...
\n","
\n","
\n","
5
\n","
Explain the structure of an artificial neural ...
\n","
An artificial neural network is composed of ar...
\n","
An artificial neural network consists of layer...
\n","
\n","
\n","
6
\n","
Differentiate between Machine Learning and Dee...
\n","
Machine Learning and Deep Learning are both su...
\n","
Machine Learning and Deep Learning are subsets...
\n","
\n","
\n","
7
\n","
Discuss the differences between Machine Learni...
\n","
Machine Learning and Deep Learning have differ...
\n","
Machine Learning and Deep Learning differ in t...
\n","
\n","
\n","
8
\n","
Summarize the concept of Deep Learning
\n","
Deep learning is a branch of machine learning ...
\n","
Deep learning is a subfield of machine learnin...
\n","
\n","
\n","
9
\n","
Explain the architecture and functioning of ar...
\n","
Artificial neural networks (ANNs) are the buil...
\n","
Artificial neural networks (ANNs) form the fou...
\n","
\n","
\n","
10
\n","
Discuss the applications of Deep Learning
\n","
Deep learning has achieved significant success...
\n","
Deep learning has made remarkable advancements...
\n","
\n","
\n","
11
\n","
Describe the different types of machine learni...
\n","
Deep learning incorporates various machine lea...
\n","
Deep learning encompasses multiple machine lea...
\n","
\n","
\n","
12
\n","
Summarize the types of neural networks in deep...
\n","
Deep learning models are able to automatically...
\n","
Deep learning models, such as feedforward neur...
\n","
\n","
\n","
13
\n","
Summarize the applications of deep learning in...
\n","
Deep learning models can enable machines to id...
\n","
Deep learning models in computer vision enable...
\n","
\n","
\n","
14
\n","
Summarize the applications of deep learning in...
\n","
Deep learning models can enable machines to un...
\n","
Deep learning models in NLP enable machines to...
\n","
\n","
\n","
15
\n","
Summarize the applications of deep learning in...
\n","
Deep learning models can be used in reinforcem...
\n","
Deep learning models in reinforcement learning...
\n","
\n","
\n","
16
\n","
Summarize the concept of Artificial Intelligence
\n","
Artificial Intelligence (AI) is the incorporat...
\n","
Artificial Intelligence (AI) is the study of t...
\n","
\n","
\n","
17
\n","
Summarize the concept of Machine Learning
\n","
Machine Learning (ML) is a subset of AI that a...
\n","
Machine Learning (ML) is a branch of AI that e...
\n","
\n","
\n","
18
\n","
Summarize the concept of Deep Learning
\n","
Deep Learning (DL) is a sub-part of Machine Le...
\n","
Deep Learning (DL) is a subset of Machine Lear...
\n","
\n","
\n","
19
\n","
Summarize the differences between Artificial I...
\n","
Artificial Intelligence (AI) encompasses both ...
\n","
Artificial Intelligence (AI) is the overall co...
\n","
\n","
\n","
20
\n","
Summarize the concept of Artificial Intelligen...
\n","
AI refers to the development of computer syste...
\n","
Artificial Intelligence (AI) involves the deve...
\n","
\n","
\n","
21
\n","
Summarize the concept of Machine Learning
\n","
Machine Learning is a subset of AI that focuse...
\n","
Machine Learning is a branch of AI that enable...
\n","
\n","
\n","
22
\n","
Summarize the concept of Deep Learning
\n","
Deep Learning is a subfield of Machine Learnin...
\n","
Deep Learning is a subfield of Machine Learnin...
\n","
\n","
\n","
23
\n","
Summarize the applications of AI, Machine Lear...
\n","
AI, Machine Learning, and Deep Learning have n...
\n","
AI, Machine Learning, and Deep Learning have w...
\n","
\n","
\n","
24
\n","
Summarize the role and responsibilities of an ...
\n","
AI Engineers design, develop, and implement ar...
\n","
AI Engineers are professionals who design, dev...
\n","
\n","
\n","
25
\n","
Summarize the role and responsibilities of a M...
\n","
Machine Learning Engineers design, develop, an...
\n","
Machine Learning Engineers are professionals w...
\n","
\n","
\n","
26
\n","
Summarize the role and responsibilities of a D...
\n","
Deep Learning Engineers design, develop, and i...
\n","
Deep Learning Engineers are professionals who ...
\n","
\n","
\n","
27
\n","
Differentiate between the roles of AI Engineer...
\n","
AI Engineers, Machine Learning Engineers, and ...
\n","
AI Engineers, Machine Learning Engineers, and ...
\n","
\n","
\n","
28
\n","
Summarize the concept of Artificial Neural Net...
\n","
Artificial Neural Networks (ANN) are a type of...
\n","
Artificial Neural Networks (ANN) are a type of...
\n","
\n","
\n","
29
\n","
Summarize the concept of Biological Neural Net...
\n","
Biological Neural Networks (BNN) are structure...
\n","
Biological Neural Networks (BNN) are structure...
\n","
\n","
\n","
30
\n","
Explain the differences between Artificial Neu...
\n","
Artificial Neural Networks (ANNs) and Biologic...
\n","
Artificial Neural Networks (ANNs) and Biologic...
\n","
\n","
\n","
31
\n","
Summarize the differences in parameters, compu...
\n","
ANN and BNN differ in parameters, computing, r...
\n","
Artificial Neural Networks (ANN) and Biologica...
\n","
\n","
\n","
32
\n","
Summarize the concept of hyperparameter tuning
\n","
Hyperparameter tuning is the process of select...
\n","
Hyperparameter tuning involves finding the bes...
\n","
\n","
\n","
33
\n","
Summarize the importance of hyperparameters in...
\n","
Hyperparameters are configuration variables th...
\n","
Hyperparameters play a crucial role in machine...
\n","
\n","
\n","
34
\n","
Summarize the different types of hyperparamete...
\n","
Neural networks have several essential hyperpa...
\n","
In neural networks, there are various hyperpar...
\n","
\n","
\n","
35
\n","
Summarize the impact of different hyperparamet...
\n","
Different hyperparameters in neural networks, ...
\n","
The performance and learning ability of a neur...
\n","
\n","
\n","
36
\n","
Summarize the concept of Hyperparameter Tuning
\n","
Hyperparameter Tuning involves finding the bes...
\n","
Hyperparameter Tuning is the process of findin...
\n","
\n","
\n","
37
\n","
Explain the drawbacks of GridSearchCV
\n","
GridSearchCV is an exhaustive approach to Hype...
\n","
GridSearchCV, while effective in identifying t...
\n","
\n","
\n","
38
\n","
Describe the advantages of RandomizedSearchCV
\n","
RandomizedSearchCV is an alternative approach ...
\n","
RandomizedSearchCV offers several advantages o...
\n","
\n","
\n","
39
\n","
Explain the concept of Bayesian Optimization i...
\n","
Bayesian Optimization is another strategy for ...
\n","
Bayesian Optimization treats the search for op...
\n","
\n","
\n","
40
\n","
Summarize the challenges in deep learning
\n","
Deep learning has made significant advancement...
\n","
The challenges in deep learning include data a...
\n","
\n","
\n","
41
\n","
Summarize the advantages of deep learning
\n","
Deep learning offers several advantages over t...
\n","
The advantages of deep learning include high a...
\n","
\n","
\n","
42
\n","
Summarize the disadvantages of deep learning
\n","
While deep learning has many advantages, it al...
\n","
The disadvantages of deep learning include hig...
\n","
\n","
\n","
43
\n","
Summarize the key considerations when deciding...
\n","
When deciding whether to use deep learning for...
\n","
The key considerations when deciding to use de...
\n","
\n","
\n","
44
\n","
Summarize the concept of Machine Learning
\n","
Examples of Machine Learning: Machine Learning...
\n","
Machine Learning (ML) is a subset of Artificia...
\n","
\n","
\n","
45
\n","
Summarize the applications of Machine Learning...
\n","
Examples of Machine Learning: Image recognitio...
\n","
Machine Learning (ML) algorithms play a crucia...
\n","
\n","
\n","
46
\n","
Summarize the applications of Machine Learning...
\n","
Examples of Machine Learning: Natural language...
\n","
Machine Learning (ML) algorithms are extensive...
\n","
\n","
\n","
47
\n","
Summarize the applications of Machine Learning...
\n","
Examples of Machine Learning: Recommendation s...
\n","
Machine Learning (ML) algorithms play a vital ...
\n","
\n","
\n","
48
\n","
Summarize the hyperparameters in Support Vecto...
\n","
Hyperparameters in Support Vector Machine (SVM...
\n","
Support Vector Machine (SVM) has three importa...
\n","
\n","
\n","
49
\n","
Summarize the hyperparameters in XGBoost
\n","
Hyperparameters in XGBoost include learning_ra...
\n","
XGBoost has five essential hyperparameters: le...
\n","
\n","
\n","
50
\n","
Provide examples of model hyperparameters
\n","
Examples of model hyperparameters include pena...
\n","
Some examples of model hyperparameters are the...
\n","
\n","
\n","
51
\n","
Summarize the importance of hyperparameter tuning
\n","
Hyperparameter tuning is crucial for optimizin...
\n","
Hyperparameter tuning plays a vital role in op...
\n","
\n","
\n","
52
\n","
Summarize the concept of Deep Learning
\n","
Deep Learning is a type of Machine Learning th...
\n","
Deep Learning is a subset of Machine Learning ...
\n","
\n","
\n","
53
\n","
Summarize the applications of Deep Learning in...
\n","
Deep learning algorithms are used in image and...
\n","
Deep Learning is applied in image and video re...
\n","
\n","
\n","
54
\n","
Summarize the applications of Deep Learning in...
\n","
Deep learning algorithms are used for tasks su...
\n","
Deep Learning is utilized in natural language ...
\n","
\n","
\n","
55
\n","
Summarize the applications of Deep Learning in...
\n","
Deep learning algorithms are used in financial...
\n","
Deep Learning is employed in financial transac...
\n","
\n"," \n","
\n","
"],"text/plain":[" instruction \\\n","0 Summarize the concept and applications of Deep... \n","1 Explain the use of Deep Learning in image and ... \n","2 Describe the applications of Deep Learning in ... \n","3 Explain the role of Deep Learning in fraud det... \n","4 Summarize the concept of artificial neural net... \n","5 Explain the structure of an artificial neural ... \n","6 Differentiate between Machine Learning and Dee... \n","7 Discuss the differences between Machine Learni... \n","8 Summarize the concept of Deep Learning \n","9 Explain the architecture and functioning of ar... \n","10 Discuss the applications of Deep Learning \n","11 Describe the different types of machine learni... \n","12 Summarize the types of neural networks in deep... \n","13 Summarize the applications of deep learning in... \n","14 Summarize the applications of deep learning in... \n","15 Summarize the applications of deep learning in... \n","16 Summarize the concept of Artificial Intelligence \n","17 Summarize the concept of Machine Learning \n","18 Summarize the concept of Deep Learning \n","19 Summarize the differences between Artificial I... \n","20 Summarize the concept of Artificial Intelligen... \n","21 Summarize the concept of Machine Learning \n","22 Summarize the concept of Deep Learning \n","23 Summarize the applications of AI, Machine Lear... \n","24 Summarize the role and responsibilities of an ... \n","25 Summarize the role and responsibilities of a M... \n","26 Summarize the role and responsibilities of a D... \n","27 Differentiate between the roles of AI Engineer... \n","28 Summarize the concept of Artificial Neural Net... \n","29 Summarize the concept of Biological Neural Net... \n","30 Explain the differences between Artificial Neu... \n","31 Summarize the differences in parameters, compu... \n","32 Summarize the concept of hyperparameter tuning \n","33 Summarize the importance of hyperparameters in... \n","34 Summarize the different types of hyperparamete... \n","35 Summarize the impact of different hyperparamet... \n","36 Summarize the concept of Hyperparameter Tuning \n","37 Explain the drawbacks of GridSearchCV \n","38 Describe the advantages of RandomizedSearchCV \n","39 Explain the concept of Bayesian Optimization i... \n","40 Summarize the challenges in deep learning \n","41 Summarize the advantages of deep learning \n","42 Summarize the disadvantages of deep learning \n","43 Summarize the key considerations when deciding... \n","44 Summarize the concept of Machine Learning \n","45 Summarize the applications of Machine Learning... \n","46 Summarize the applications of Machine Learning... \n","47 Summarize the applications of Machine Learning... \n","48 Summarize the hyperparameters in Support Vecto... \n","49 Summarize the hyperparameters in XGBoost \n","50 Provide examples of model hyperparameters \n","51 Summarize the importance of hyperparameter tuning \n","52 Summarize the concept of Deep Learning \n","53 Summarize the applications of Deep Learning in... \n","54 Summarize the applications of Deep Learning in... \n","55 Summarize the applications of Deep Learning in... \n","\n"," input_content \\\n","0 Deep Learning is a type of Machine Learning th... \n","1 Deep learning algorithms are used in image and... \n","2 Deep Learning algorithms are used for tasks su... \n","3 Deep Learning algorithms are used in financial... \n","4 Artificial neural networks are built on the pr... \n","5 An artificial neural network is composed of ar... \n","6 Machine Learning and Deep Learning are both su... \n","7 Machine Learning and Deep Learning have differ... \n","8 Deep learning is a branch of machine learning ... \n","9 Artificial neural networks (ANNs) are the buil... \n","10 Deep learning has achieved significant success... \n","11 Deep learning incorporates various machine lea... \n","12 Deep learning models are able to automatically... \n","13 Deep learning models can enable machines to id... \n","14 Deep learning models can enable machines to un... \n","15 Deep learning models can be used in reinforcem... \n","16 Artificial Intelligence (AI) is the incorporat... \n","17 Machine Learning (ML) is a subset of AI that a... \n","18 Deep Learning (DL) is a sub-part of Machine Le... \n","19 Artificial Intelligence (AI) encompasses both ... \n","20 AI refers to the development of computer syste... \n","21 Machine Learning is a subset of AI that focuse... \n","22 Deep Learning is a subfield of Machine Learnin... \n","23 AI, Machine Learning, and Deep Learning have n... \n","24 AI Engineers design, develop, and implement ar... \n","25 Machine Learning Engineers design, develop, an... \n","26 Deep Learning Engineers design, develop, and i... \n","27 AI Engineers, Machine Learning Engineers, and ... \n","28 Artificial Neural Networks (ANN) are a type of... \n","29 Biological Neural Networks (BNN) are structure... \n","30 Artificial Neural Networks (ANNs) and Biologic... \n","31 ANN and BNN differ in parameters, computing, r... \n","32 Hyperparameter tuning is the process of select... \n","33 Hyperparameters are configuration variables th... \n","34 Neural networks have several essential hyperpa... \n","35 Different hyperparameters in neural networks, ... \n","36 Hyperparameter Tuning involves finding the bes... \n","37 GridSearchCV is an exhaustive approach to Hype... \n","38 RandomizedSearchCV is an alternative approach ... \n","39 Bayesian Optimization is another strategy for ... \n","40 Deep learning has made significant advancement... \n","41 Deep learning offers several advantages over t... \n","42 While deep learning has many advantages, it al... \n","43 When deciding whether to use deep learning for... \n","44 Examples of Machine Learning: Machine Learning... \n","45 Examples of Machine Learning: Image recognitio... \n","46 Examples of Machine Learning: Natural language... \n","47 Examples of Machine Learning: Recommendation s... \n","48 Hyperparameters in Support Vector Machine (SVM... \n","49 Hyperparameters in XGBoost include learning_ra... \n","50 Examples of model hyperparameters include pena... \n","51 Hyperparameter tuning is crucial for optimizin... \n","52 Deep Learning is a type of Machine Learning th... \n","53 Deep learning algorithms are used in image and... \n","54 Deep learning algorithms are used for tasks su... \n","55 Deep learning algorithms are used in financial... \n","\n"," expected_output \n","0 Deep Learning is a subset of Machine Learning ... \n","1 Deep Learning algorithms play a crucial role i... \n","2 Deep Learning algorithms have extensive applic... \n","3 Deep Learning algorithms play a crucial role i... \n","4 Artificial neural networks are modeled after h... \n","5 An artificial neural network consists of layer... \n","6 Machine Learning and Deep Learning are subsets... \n","7 Machine Learning and Deep Learning differ in t... \n","8 Deep learning is a subfield of machine learnin... \n","9 Artificial neural networks (ANNs) form the fou... \n","10 Deep learning has made remarkable advancements... \n","11 Deep learning encompasses multiple machine lea... \n","12 Deep learning models, such as feedforward neur... \n","13 Deep learning models in computer vision enable... \n","14 Deep learning models in NLP enable machines to... \n","15 Deep learning models in reinforcement learning... \n","16 Artificial Intelligence (AI) is the study of t... \n","17 Machine Learning (ML) is a branch of AI that e... \n","18 Deep Learning (DL) is a subset of Machine Lear... \n","19 Artificial Intelligence (AI) is the overall co... \n","20 Artificial Intelligence (AI) involves the deve... \n","21 Machine Learning is a branch of AI that enable... \n","22 Deep Learning is a subfield of Machine Learnin... \n","23 AI, Machine Learning, and Deep Learning have w... \n","24 AI Engineers are professionals who design, dev... \n","25 Machine Learning Engineers are professionals w... \n","26 Deep Learning Engineers are professionals who ... \n","27 AI Engineers, Machine Learning Engineers, and ... \n","28 Artificial Neural Networks (ANN) are a type of... \n","29 Biological Neural Networks (BNN) are structure... \n","30 Artificial Neural Networks (ANNs) and Biologic... \n","31 Artificial Neural Networks (ANN) and Biologica... \n","32 Hyperparameter tuning involves finding the bes... \n","33 Hyperparameters play a crucial role in machine... \n","34 In neural networks, there are various hyperpar... \n","35 The performance and learning ability of a neur... \n","36 Hyperparameter Tuning is the process of findin... \n","37 GridSearchCV, while effective in identifying t... \n","38 RandomizedSearchCV offers several advantages o... \n","39 Bayesian Optimization treats the search for op... \n","40 The challenges in deep learning include data a... \n","41 The advantages of deep learning include high a... \n","42 The disadvantages of deep learning include hig... \n","43 The key considerations when deciding to use de... \n","44 Machine Learning (ML) is a subset of Artificia... \n","45 Machine Learning (ML) algorithms play a crucia... \n","46 Machine Learning (ML) algorithms are extensive... \n","47 Machine Learning (ML) algorithms play a vital ... \n","48 Support Vector Machine (SVM) has three importa... \n","49 XGBoost has five essential hyperparameters: le... \n","50 Some examples of model hyperparameters are the... \n","51 Hyperparameter tuning plays a vital role in op... \n","52 Deep Learning is a subset of Machine Learning ... \n","53 Deep Learning is applied in image and video re... \n","54 Deep Learning is utilized in natural language ... \n","55 Deep Learning is employed in financial transac... "]},"execution_count":25,"metadata":{},"output_type":"execute_result"}],"source":["# Read as pandas DataFrame\n","dataset['val'].to_pandas()"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":145,"referenced_widgets":["69d87602a6884896a846f2163ba6a152","ff52e55f50c44012a1c91fe73c0c1d0a","53af06d6b1e8417a97911beaa53df19d","1f400ccfb3d24a638fa56e24a8afd6b3","d5724f184784479a952c00fa269c1b13","4231d4950aa04e25a63fbe7852f6e252","f013627453f04098b445272139c8261c","c417f77b5c6e417b8ae3d88c2d760fd3","61e79946b798433f99ff8eef584e9dd1","2f748a15848e4318a2c47298c618614d","b92057f5402f42d1bad734cc51fbf18a","06b1d360762c4762b78839bb809089df","f97ca73d0c0c406092736cc7e76b358b","e4cad9a8c9a342ceb54add4f9ae7ded4","3fb9a25d0f9f463685aba687cce93454","c4578f5c5f88467e991c981a4e8387b4","e0092621d297474eb320368a8f78ac56","40ea058255ea438a87e8cd095826f536","e7cd0016f0d14c29a72fc1b4b5381b6e","dd810bc9d1e74e93a48cda6c75a7b0f2","2090f868fcc74f61b78aa47f9aa929ca","808904a9ed4d4a1f83ff289df87334d4","47979c550cfb4c41807b9b4a774ad552","05d6f50dac9e4e29802d4a35e0f4a6e5","d21e35ce94ff4758ab876f1bf52f51d8","ceb70d3f3a014aeaa82774d8ae13877e","828cdb9891e54cc7af37e767014ce828","d6a5a31c98a04fb2bce58817a552c072","69ccba421f874c099160b543d23c323a","93fb4b1e6eb0436e8c3fb3abc2646c44","b9fb9339a1954917a37ea9c18f4c7316","d2db3e5614da457095286971f2fd5c46","d1d20672589f43ce86888288b87557c9"]},"id":"U2YZULfoCura","outputId":"ad214a6e-2f07-4d6e-bfc9-306050305104"},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"d1d20672589f43ce86888288b87557c9","version_major":2,"version_minor":0},"text/plain":["VBox(children=(HTML(value='
"]},"metadata":{},"output_type":"display_data"}],"source":["# Load the tokenizer\n","tokenizer = AutoTokenizer.from_pretrained(\"meta-llama/Llama-2-7b-chat-hf\")\n","\n","\n","# Function to tokenize and calculate token counts\n","def tokenize_and_count(dataset_split):\n"," # Adjust field names based on your dataset structure\n"," instruction_token_counts = [len(tokenizer.tokenize(example[\"instruction\"])) for example in dataset_split]\n"," input_content_token_counts = [len(tokenizer.tokenize(example[\"input_content\"])) for example in dataset_split]\n"," expected_output_token_counts = [len(tokenizer.tokenize(example[\"expected_output\"])) for example in dataset_split]\n","\n"," # If you need combined token counts of specific fields, adjust as necessary:\n"," combined_token_counts = [instruction + input_content + expected_output for instruction, input_content, expected_output in zip(instruction_token_counts, input_content_token_counts, expected_output_token_counts)]\n","\n"," return instruction_token_counts, input_content_token_counts, expected_output_token_counts, combined_token_counts\n","\n","# Adjust the plot_distribution function to accept a subplot axis\n","def plot_distribution(token_counts, title, ax):\n"," sns.set_style(\"whitegrid\")\n"," ax.hist(token_counts, bins=50, color='#3498db', edgecolor='black')\n"," ax.set_title(title, fontsize=12)\n"," ax.set_xlabel(\"Number of tokens\", fontsize=10)\n"," ax.set_ylabel(\"Number of examples\", fontsize=10)\n"," ax.tick_params(axis='both', which='major', labelsize=8)\n","\n","# Assuming you have a matplotlib figure `fig` and axes `axs`\n","fig, axs = plt.subplots(3, 3, figsize=(18, 12)) # Adjust the figure size as necessary\n","\n","# Iterate over each dataset split and plot\n","split_names = ['train', 'test', 'val']\n","for i, split_name in enumerate(split_names):\n"," # Unpack the token counts from your dataset\n"," instruction_counts, input_content_counts, expected_output_counts, combined_counts = tokenize_and_count(dataset[split_name])\n","\n"," # Plotting the distributions on the specified subplot axis\n"," plot_distribution(instruction_counts, f\"{split_name} split: Instruction\", axs[i, 0]) # Changed for 3x3 grid structure\n"," plot_distribution(input_content_counts, f\"{split_name} split: Input Content\", axs[i, 1]) # Changed for 3x3 grid structure\n"," plot_distribution(expected_output_counts, f\"{split_name} split: Expected Output\", axs[i, 2]) # Changed for 3x3 grid structure\n"," # Note: Combined is not plotted due to 3x3 grid, adjust if needed\n","\n","# Adjust layout to prevent overlap\n","plt.tight_layout()\n","plt.show()\n"]},{"cell_type":"markdown","metadata":{"id":"_RXe958fNLwH"},"source":["## 3. Filter out rows with more than 2048 tokens\n","\n","We will remove samples with more than 2048 tokens (max context size of Llama 2 by default = 4096)."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"flzVgkcnvUWE","outputId":"445cecf1-58c7-40b1-e5cc-8cb6e74483ef"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABv0AAASlCAYAAACLEhU2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzde1yUdfr/8fdwEsXMA6iI4qoInjA06WBnMymzLQ+rZR4yt9xKO7KE5XqstKRdS/umlWJqpZum6a8Cy81WtzLLdsVCyROjgMagqS2gMMzvDx7MSpxmhhmGmXk9H499rHPPPZ/7uq/7Zubqvu6DwWKxWAQAAAAAAAAAAADAY/m5OwAAAAAAAAAAAAAA9UPTDwAAAAAAAAAAAPBwNP0AAAAAAAAAAAAAD0fTDwAAAAAAAAAAAPBwNP0AAAAAAAAAAAAAD0fTDwAAAAAAAAAAAPBwNP0AAAAAAAAAAAAAD0fTDwAAAAAAAAAAAPBwNP0AAAAAAAAAAAAAD0fTD/AggwYNUnJystPHnT17tiZNmlRpmslk0qOPPqorr7xSMTExWrlypXbt2qWYmBjt2rXLOl9ycrIGDRrk9Jhc5bfxnj59WnFxcfriiy/cGJXnc9W+CQCALaiR6o8aCQAA70ONVH/USO4zfvx4jR8/3t1hAB6Hph/gRHv27NHixYt19uxZd4dis2PHjmn9+vWaMmVKpenz58/Xjh079OCDD+qll17SddddZ9N4RUVFWrx4caWCrjFr1aqVRo0apVdeeaVe4yxevFgxMTE6deqUkyKrrDHsW40hBgCAZ/LE3xBqJM+okex18uRJLV68WJmZmXZ9zmg0aubMmbr55psVGxur/v376+6779bbb7+t4uJiF0UrHTx4UIsXL9bx48ddtowKnraPAoA3oEbyvN8fZ9dINf0vPz/fSRG7VmPZh0tKSrRq1SqNHDlS/fr1U79+/TRy5EitWrVKJSUlDo/b0Ou3dOlSffbZZw2yLHivAHcHAHiT77//XkuWLNHw4cPVokULp4+flpYmg8Hg1DFXrVqliIgIXXXVVZWmf/3117r55ps1efJk67QuXbpo7969CgwMrHG8oqIiLVmyRFOnTtWVV17p1Fhd5Z577tHq1av11Vdf6eqrr3Z3ONVy9b5V3xhcsW8CALwHNRI1UmPx888/a8mSJYqIiFDPnj1t+sz27dv12GOPKSgoSHfeeaeio6NVUlKi7777TgsXLtTBgwc1b948l8R78OBBLVmyRFdccYU6duzokmVU8MR9FAA8HTWSZ/7+OLNGmj17tpo1a1ZluruO/dirMRyvKiws1JQpU/TNN9/opptu0ogRI2QwGLRjxw49//zz+vTTT7Vs2bJq81yXhl6/ZcuWKSEhQYMHD3b5suC9aPoBblJWVqaSkhI1adLE5s8EBQU5NYaSkhJt2bJFd999d5X3CgoKqvyY+fn52RWvMxUWFjr042yLbt26KTo6Whs3bvSKA1qO7Fv15ex9EwDgu6iR7EON5FrHjh3TE088oQ4dOujtt99W27Ztre/de++9ys7O1vbt290XIADAZ1Aj2cdTaqSEhAS1bt3aSZH5pgULFuibb77RX/7yF40bN846fezYsXrnnXc0d+5cvfjii5ozZ44bowQaDrf3BJxk8eLFeumllyRJN998s/Vy/Ipb8cTExGju3LnavHmzbr/9dsXGxmrHjh2SpOXLl+vuu+/WlVdeqb59+2rEiBFKS0ursozf3ov9gw8+UExMjL777jvNnz9fV111leLi4vTII4/YdAul7777TqdPn9bAgQOrjGmxWPTOO+9Y10NStfdiv9jx48etxc6SJUusn128eLF1nkOHDunRRx/VFVdcodjYWI0YMULbtm2rNE5FDN98841mz56tq6++WjfccIP1/S+++EJjx45VXFyc+vXrpwcffFA//fRTlXg+++wzDRs2TLGxsRo2bJg+/fTTGnMxcOBAff7557JYLNZpJSUlOnTokH7++efa0lij8ePHa9iwYTp48KDGjx+vyy67TNddd53efPPNKvOuXr1at99+uy677DLFx8drxIgR2rJliyTH962attfx48cVExOjDz74oNL0Q4cO6bHHHtNVV12lvn37KiEhQX/7299siqG65wQcO3bMuq0vu+wyjR49uspBsYoYP/74Y73++uu6/vrrFRsbq4kTJyo7O9uRtAMAGhlqJGqk37K1Rrq4TvjrX/+qa665RnFxcfrTn/6kvLy8SvPW9Myii58Fs2vXLo0aNUqSNH36dOt2+G1NdLG33npLhYWFev755ys1/Cp07txZEydOtL4uLS3Va6+9psGDB6tPnz4aNGiQ/vrXv+rChQtV4p0yZYq+/fZbjRo1SrGxsbr55pu1adMm6zwffPCBHnvsMUnShAkTrPFevJ/Zss2Tk5PVr18/nTx5Ug8//LD69eunq666Si+++KLMZrMk2/ZRAIBzUSNRI9ni6aefVmxsrA4dOlRp+uTJkxUfH6+TJ09K+l8Odu/erZkzZ+rKK69U//79lZSUpDNnzlQZ19ac1OdYkSR9+OGHGjFihPr27asrrrhCTzzxRJU6TpLWrVunwYMHq2/fvho1apS+/fZbm/Jz4sQJrV+/XldddVWlhl+Fe++9V1deeaXWr1+vEydOSKr5uJikSvufPX+jCQkJ1v1z9+7dlcas6TmWFbd4vXjZhYWF2rhxo3VZrngmJ7wfV/oBTnLLLbfo6NGj+n//7/9p+vTpatWqlSRVOlvn66+/1ieffKJ7771XrVq1UkREhKTyWyMMGjRId9xxh0pKSvTRRx/pscce07Jly3TjjTfWueznnntOLVq00NSpU5WTk6O3335bc+fO1aJFi2r93Pfffy+DwaBevXpZp8XHx+ull15SUlKSrrnmGt15550256B169aaPXu2Zs+erVtuuUW33HKLJFl/wH766Sfdc889ateunR544AE1a9ZMn3zyiR555BEtXrzYOn+FOXPmqHXr1nrkkUdUWFgoSdq0aZOSk5N17bXXKjExUUVFRXrvvfc0duxYbdy40Xrbo507d2ratGmKiorSU089pdOnT2v69Olq3759tbH37t1bK1eu1E8//aTo6GhJ5c98GTp0qIYPH64FCxbYnIeLnTlzRn/84x91yy236LbbblN6erpSUlIUHR1tLUD//ve/67nnnlNCQoImTJig8+fP68CBA/rPf/6jO+64w+F9y577je/fv1/33nuvAgICNGbMGEVERMhoNOof//iHnnjiCZtiuJjJZNLdd9+toqIijR8/Xq1atdLGjRv10EMP6dVXX62yrd98800ZDAbdf//9+vXXX/XWW28pMTFR77//vl35BgA0PtRI1EjVsaVGqvD666/LYDDogQceUEFBgd5++23dd999+vDDDxUcHGzzMrt166ZHH31Ur776qsaMGaPLL79cktS/f/8aP/P555+rU6dOtc5zsRkzZmjjxo1KSEjQpEmTtHfvXi1btkyHDh3Sa6+9Vmne7OxsPfbYYxo1apSGDx+uDRs2KDk5Wb1791b37t0VHx+v8ePHa/Xq1frTn/6krl27WtdDsn2bS5LZbNbkyZPVt29fJSUl6auvvtKKFSvUqVMnjR07ts59FADgfNRI1EiSqm3IBQQEWK+afPbZZ/X111/r6aef1rp16+Tv76+1a9dq586deumll9SuXbtKn507d6512x45ckTvvfeecnNztXr1auutXm3NSX2PFb3++ut65ZVXdNttt2nUqFE6deqU1qxZo3vvvVebNm2yruP777+vmTNnql+/fpo4caKOHTumhx56SJdeeqnCw8Nrzd8///lPmc1m3XXXXTXOc9ddd2nXrl3asWOH/vCHP9iwVcrZ8je6e/duffzxxxo/fryCgoL03nvv6Y9//KPef/99635hq5deekkzZsxQ3759NXr0aElSZGSkXWMAkiQLAKd56623LNHR0ZZjx45VeS86OtrSo0cPy08//VTlvaKiokqvL1y4YBk2bJhlwoQJlabfdNNNlqefftr6esOGDZbo6GjLfffdZykrK7NOf+GFFyw9e/a0nD17ttZ4ExMTLVdccUW170VHR1vmzJlTadrXX39tiY6Otnz99dfWaU8//bTlpptusr4uKCiwREdHW1599dUqY06cONEybNgwy/nz563TysrKLGPGjLEMGTKkynrdc889ltLSUuv0X3/91TJgwADLjBkzKo2bn59vufzyyytNv/POOy3XXHNNpRzs3LnTEh0dXSneCnv27LFER0dbPvroI+u0Y8eOWaKjoyvlvCavvvqqJTo62lJQUGCdNm7cOEt0dLRl48aN1mnnz5+3XHPNNZZp06ZZpz300EOW22+/vdbxHdm3qtteF6/Xhg0brNPuvfdeS79+/Sw5OTmV5r14v6otht/um88//7wlOjrasnv3buu0X3/91TJo0CDLTTfdZDGbzZVivO222yrtF2+//bYlOjracuDAgVrzAgDwDNRI1EiO1EgVeb3uuuss586ds07/+OOPLdHR0Za3337bOu23+8DFyxo3bpz19d69e6vUQTU5d+6cJTo62vLQQw/VOa/FYrFkZmZaoqOjLc8++2yl6QsWLLBER0dbvvrqq0rx/rZWKigosPTp08eyYMEC67RPPvmk2nrOnm3+9NNPW6Kjoy1LliypNO9dd91lGT58eKXl17SPAgBcgxqJGqm6/yUkJFSad8eOHZbo6GjL//3f/1mMRqMlLi7O8vDDD1eapyIHw4cPt1y4cME6/c0337RER0dbPvvsM7tzUp9jRcePH7f07NnT8vrrr1eafuDAAUuvXr2s0y9cuGC5+uqrLXfeeWel7bxu3TpLdHR0pTquOhXHn3788cca5/nhhx8s0dHRlvnz51ssluqPi1X47b5Y199odHS0JSMjwzotJyfHEhsba3nkkUes0367z1eo2AcuFhcXZ9P+A9SG23sCDSg+Pl5RUVFVpl98hvKZM2d07tw5XX755frxxx9tGnf06NGVHsw8YMAAmc1m5eTk1Pq5X375RZdeeqmN0dfPL7/8oq+//lq33Xabfv31V506dUqnTp3S6dOnde211+ro0aPWWxJUGD16tPz9/a2vv/zyS509e1a333679fOnTp2Sn5+fLrvsMuvtIn7++WdlZmZq+PDhuuSSS6yfv+aaa6rNv/S/BySfPn3aOq1jx446cOCAw2ewS1KzZs0qneUWFBSk2NhYHTt2rNKyT5w4ob179zq8nJr2LVucOnVKu3fv1siRI9WhQ4dK7zn6wO8vvvhCffv21YABA6zTQkJCNGbMGOXk5OjgwYOV5h8xYkSlZw1UfO7iPAEAvBc1EjVSdTVShbvuukvNmze3vr711lsVFhamL774wuHl2+LXX3+VVF7D2KIinkmTJlWafv/991d6v0JUVFSlWql169bq0qWLTfWPrdv8Yvfcc0+l15dffnml228BABofaiTvr5EWL16s1NTUSv+bP39+pXmuvfZajRkzRq+99pqmTZumJk2aaO7cudWON2bMGAUGBlpf33PPPQoICLDWIbbmpL7Hij799FOVlZXptttuq7Sc0NBQde7c2bqcffv2qaCgQHfffXel40K/3RY1+e9//yup9nqt4r2K2s6Z+vXrpz59+lhfd+jQQTfffLN27txpvY060NC4vSfQgC6+xc7FPv/8c73++uvKzMys9LwPWxsuv/3xrSg8bLm9o+Wie4+7ktFolMVi0SuvvKJXXnml2nkKCgoq3Zbgt/k6evSoJFV6bsrFKg4G5ebmSip/xspvdenSpdYi2NEmV03at29fZcxLL71UBw4csL5+4IEH9OWXX+oPf/iDOnfurGuuuUbDhg2z3nLKFjXtW7aoOLBk720HapObm6vLLrusyvSK21Ll5uZWWl599mEAgOejRqJGkqrWSBV+G6/BYFDnzp3rPDBZXxV5qziYVJecnBz5+flVuQ1TWFiYWrRoUSXe6m5Xdemll1Z7m6/f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OlR33nmnoqOjdeHCBX3//fdKS0vTiBEjJEk9evTQ8OHDtW7dOp09e1bx8fHKyMjQxo0bNXjw4Epn3duqZ8+e8vf315tvvqlz584pKChIV111ldq0aWPzNrdVbfsoAMA1qJGokdLT06vd3tdcc41CQ0P11Vdf6d1339XUqVOt+8v8+fM1fvx4LVq0SElJSZU+V1JSovvuu0+33Xabjhw5onfffVeXX365br75ZrtzUp9jRZGRkXr88cf18ssvKycnR4MHD1ZISIiOHz+uzz77TKNHj9bkyZMVGBioxx9/XDNnztTEiRM1dOhQHT9+XB988IFNz/STpOnTp+vw4cOaM2eOduzYYb2ib+fOndq2bZuuuOIKJScnV/rMH/7wB73xxht69tln1adPH3377bfVXtVZ199odHS0Jk+erPHjxysoKMh6ov20adOsYwwdOlQpKSmaOnWqxo8fr+LiYr333nvq0qVLpYZhxfK++uorpaamqm3bturYsaMuu+wym/IAVKDpBzhR37599dhjj2nt2rXasWOHysrKtG3btlqLtauvvlrPP/+83nzzTb3wwgvq2LGjEhMTlZOT4/JiLSgoSHfccYfS0tL05JNPOm3c5557TvPmzdP8+fNVUlKiqVOnKjo6WlFRUdqwYYOWLFmijRs36pdfflHr1q3Vq1cvPfLIIzaNfccdd6ht27Z64403tHz5cl24cEHt2rXTgAEDrAdcpPLL+1955RUtWrRIL7/8siIjIzV//nxt27ZN33zzTaUxDx06pKysLD3zzDNOy4E9xowZoy1btig1NVWFhYVq3769xo8fr4cfftg6jyP7llReoJWWlmrt2rUKCgrSrbfeqqSkJA0bNqzSfD169NDf//53vfLKK3rvvfd0/vx5dejQQbfddptDMYSGhmrt2rVauHCh1qxZo/PnzysmJkZLly7VjTfeWL+EAQA8DjVSOWokx/zpT3/SgQMH9MYbb+i///2vrr76as2aNct65rVUftZ6cnKyUlNT9cILL6hPnz5aunSpXnzxxUpjBQYGasGCBfrrX/+q2bNnq7S0VPPnz6/1oNLNN9+szZs3a/ny5dq2bZvee+89BQUFKSYmRsnJyZWaj88995w6duyojRs36rPPPlNoaKimTJmiqVOnOrTuYWFhmjNnjpYtW6Znn31WZrNZq1atUps2bWze5vaoaR8F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kIdynp6HhoqbY1UAAAAONP127Nihhx56SD179lT//v0lSXv27NHtt9+upUuX6pprrnF6kLCN0WhUTI+eKi4qrHPe4KbNdGB/JsUvAAAu1FB1k9FoVMuWLbV06VJ9+eWXCg4O1rRp03TJJZcoLCxMAQHlJZ/BYFB4eLhyc3PtavplZGQ4JU5Hx8/KynLaskrO5EsGP02YMKHOeZsEB2vD+vVq376905ZfG1fn2ROQg3LkoRx5IAcVyEM58lAzjlUBAACUs7vp9/LLL+u+++5TYmJipekpKSlKSUmhkHIjk8mk4qJCdZmUouDwqBrnK847qCOpiTKZTDT9AABwoYaqm8xms3JychQVFaXExET9+OOPmjRpkt544w2njB8bGyt/f3+njHUxs9msjIyMOscvKytz2jJLi85KljKb66W2bdsqLi7Oacuvjq158GbkoBx5KEceyEEF8lDO0/NQEb8rcawKAACgnN1Nv0OHDmnRokVVpo8cOVJvv/22M2JCPQWHRykksre7wwAAwOc1VN0UHh4uPz8/3XHHHZKkXr16qWPHjsrJyVF+fr5KS0sVEBAgi8WivLw8dejQwa7x/f39XXqQsa7xXbFsW+slV6+7u5bVWJGDcuShHHkgBxXIQznyUDOOVQEAAJTzs/cDrVu3VmZmZpXpmZmZatOmjVOCAgAA8AYNVTe1bt1aV199tXbu3ClJOnbsmI4fP67LL79cvXv31ubNmyVJ6enpateunV239gQAAGjsOFYFAABQzu4r/f7whz9o5syZOnbsWKX7pL/55pu67777nB0fAACAx2rIumnOnDl65plnlJKSIoPBoLlz56pdu3aaM2eOpk+frmXLlikkJETz58936nK9XXUHEC8WGhrK7dIBAHAzjlUBAACUs7vp98gjj6h58+ZasWKF/vrXv0qS2rZtq6lTp2rChAlODxAAAMBTNWTd1KlTJ61evbrK9K5du2rdunVOXZYvKDmTLxn8NG7cuFrnC27aTAf2Z9L4AwDAjThWBQAAUM7upp/BYNB9992n++67T7/++qskqXnz5k4PDAAAwNNRN3mu0qKzkqVMXSalKDg8qtp5ivMO6khqokwmE00/AADciJoLAACgnN1Nv4tRQAEAANiGuskzBYdHKSSyt7vDAAAANqLmAgAAvszP3QEAAAAAAAAAAAAAqB+afgAAAAAAAAAAAICHo+kHAAAAAAAAAAAAeDi7mn4lJSWaOHGijh496qJwAAAAvAN1EwAAgOs5s+Y6f/68Hn74YSUkJOj3v/+9Jk2apOzsbElSQUGBJk+erCFDhmjYsGHavXt3vZcHAADgbHY1/QIDA3XgwAFXxQIAAOA1qJsAAABcz9k115gxY5SWlqbNmzfr5ptv1owZMyRJKSkpiouL09atW/XCCy/oqaeeUklJidOWCwAA4AwB9n7g97//vdavX6/ExERXxAMAAOA1qJsAAABcz1k1V5MmTXTDDTdYX1922WVasWKFJCktLU1bt26VJPXt21dt27bV7t27NXDgQJvHN5vN9YqvMfGmdWmszGZzlTxXvCb/9iFvjiN3jiFvjiN3NbM1J3Y3/cxms9577z19+eWX6tOnj5o2bVrp/enTp9s7JAAAgFeibgIAAHA9V9Vcq1at0qBBg3T69GmVlJQoLCzM+l5ERIRyc3PtGi8jI8OhOBqjrKwsd4fg9bKysuTnV/1N2rxpX2pI5M1x5M4x5M1x5M5xdjf9srKy1KtXL0nSkSNHKr1nMBicExUAAIAXoG4CAABwPVfUXEuXLpXRaNTKlStVXFxc7xglKTY2Vv7+/k4Zy93KysrcHYLXi46OVlxcXKVpZrNZGRkZXrUvNQTy5jhy5xjy5jhyV7OK3NTF7qbf6tWrHQoIAADA11A3AQAAuJ6za67ly5dr69atWrlypZo2baqmTZsqICBA+fn51qv9cnJy1KFDB7vG9ff395oDmN6yHo1ZbfuLN+1LDYm8OY7cOYa8OY7cOa76a8RtkJ2drR07dljPdrJYLE4LCgAAwJtQNwEAALieM2qu1NRUffTRR0pNTVWLFi2s02+99VatXbtWkrR3716dPHlS8fHxzgkcAADASey+0u/06dN6/PHHtWvXLhkMBm3dulWdOnXSM888o0svvVTJycmuiBMAAMDjUDcBAAC4nrNqrhMnTmjBggXq1KmTJkyYIEkKCgrS+++/r8TERCUlJWnIkCEKDAzUwoULFRgY6MrVAgAAsJvdV/rNnz9fAQEB2r59u4KDg63Thw4dqh07djg1OAAAAE9G3QQAAOB6zqq52rdvrwMHDuizzz7Thx9+qA8//FDvv/++JCk0NFQrVqzQ1q1b9dFHH+mqq65y+noAAADUl91X+v3rX//S8uXL1b59+0rTf/e73yk3N9dpgQEAAHg66iYAAADXo+aCN8rMzKwyzWw2KysrS2VlZfL391doaKgiIyPdEB0AoLGyu+lXWFhY6aypCr/88ouCgoKcEhQAAIA3oG4CAABwPWoueJOSM/mSwU/jxo2rc97gps10YH8mjT8AgJXdTb8BAwZo06ZNevzxx63TysrK9NZbb+nKK690ZmwAAAAejboJAADA9ai54E1Ki85KljJ1mZSi4PCoGucrzjuoI6mJMplMNP0AAFZ2N/3+/Oc/67777tO+fftUUlKihQsX6uDBgzpz5ozee+89V8QI+KwTJ05oz5498vf3r3U+bucAAI0TdRMAAIDrUXPBGwWHRykksre7wwAAeBi7m37R0dFKT0/XmjVrFBISosLCQt1yyy2699571bZtW1fECPgko9GokaNG6XxxcZ3zcjsHAGicqJsAAABcj5oLAACgnN1NP0m65JJL9NBDDzk7FgAXMZlMOl9czO0cAMDDUTcBAAC4HjUXAACAg02/M2fOaP369Tp06JAkKSoqSiNGjFDLli2dGRsAcTsHAPB01E0AAACuR80FAAAg+dn7gd27d2vQoEFavXq1zp49q7Nnz2r16tW6+eabtXv3blfECAAA4JGomwAAAFyPmgsAAKCc3Vf6zZ07V0OHDtXs2bPl7+8vSTKbzZozZ47mzp2rLVu2OD1IAAAAT0TdBAAA4HrUXAAAAOXsvtIvOztbkyZNshZRkuTv76/77rtP2dnZdo11//3364477tCdd96psWPH6scff5QkHT16VHfffbcSEhI0cuRI/fTTT/aGCQAA4HbOrJsAAABQPWouAACAcnY3/Xr16qXDhw9XmX748GH16NHDrrEWLVqkLVu26MMPP9SkSZOUnJwsSZo5c6ZGjx6t9PR0PfDAA9bpAAAAnsSZdRMAAACqR80FAABQzqbbe+7fv9/67wkTJuj5559Xdna2LrvsMknSf/7zH73zzjtKTEy0a+EtWrSw/vvcuXMyGAwqKCjQvn37tGLFCklSQkKC5s2bp+zsbHXu3Nnmsc1ms12xuIu9cZrN5ho/48yxJKmsrMxpYzXm9bRnvLrGciZ78i81bGy+oiKf5NV92Abu5cv5r886u6puAgAAwP9QcwEAAFRlU9PvrrvuksFgkMVisU5buHBhlfmeeuopDR061K4AkpKStGvXLknSG2+8oby8PIWFhSkg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9NZbb2nAgAE2bTsAAFB/1FXUVQAAoP6oqaipANiPph8Aq1tuuUU9e/bUq6++Wq9xWrZsqRkzZqhr164aNWqUunTpouLiYv3pT3/S7373O02ZMkWBgYH67rvvKn3u3nvvVUJCgrp166bZs2frkksu0fr16yVJa9asUa9evfTkk0+qW7du6tWrl1544QXt2rVLR44csY7xu9/9TklJSeratau6du1abXzLly/XAw88oNtvv11du3bVn//8Z/Xo0UNvv/22JCksLEz+/v5q1qyZwsLCFBISUmWMSy65RIGBgQoODlZYWJj1M++++67at2+vmTNnqlu3bho8eLCmTZumFStWqKysrNIY77zzjubMmaOlS5fqpptukiR9/PHHKisr0/PPP6+YmBh169ZN8+fPV15eXqWzyS699FLrMm666SbdcMMN+uqrrySVn33VtGlT3XjjjYqIiFCvXr00YcIEezcjAACoB+oq6ioAAFB/1FTUVADsE+DuAAA0LomJiZo4cWKNtxuwRVRUlPz8/ndOQWhoqLp372597e/vr5YtW6qgoKDS5/r162f9d0BAgPr06aPDhw9Lkvbv369du3ZVmqeC0WhUly5dJEm9e/euNbZff/1VP//8s/r3719pev/+/bV//34b17Bmhw4dUr9+/WQwGKzTLr/8chUWFurEiRPq0KGDJCk9PV2nTp3Su+++q759+1rn3b9/v4xGY5X4zp8/L6PRaH0dFRUlf39/6+uwsDBlZWVJKr/9RYcOHTR48GBdd911uu6663TLLbeoadOm9V4/AABgO+qq+qGuAgAAEjVVfVFTAb6Fph+ASuLj43Xttdfq5Zdf1ogRIyq9ZzAYZLFYKk2r7v7fAQGVv1oMBkO10357NlFtCgsLddNNNykxMbHKe2FhYdZ/e0qx0KtXL/3www/asGGDYmNjrYVXYWGhevfurZSUlCqfad26tfXf1eWzYts0b95cGzdu1DfffKOdO3fq1Vdf1ZIlS7R+/Xq1aNHChWsFAAAuRl3VMKirAADwbtRUDYOaCvAO3N4TQBVPPfWUPv/8c33//feVprdu3Vomk6lSMZWZmem05f773/+2/ru0tFQ//PCD9bYHvXv31k8//aSIiAh17ty50v+aNWtm8zKaN2+utm3bas+ePZWm79mzR1FRUXbFGxgYWKUY7Natm77//vtKOfruu+8U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depUSdItt9xiv13/0udSf/zxx7r77rvVrFkztWnTRiNGjNDBgwcd5tm9e7ceffRRtW/fXtHR0brppps0YsQI/f3335KkqKgoZWRkaPny5fZ9XPrs9Lx88cUXuv7662WxWOzboqKi9NFHHykjI8M+T84jkC5/Hvvl+vXrpw0bNmj//v3298bGxtpfP3funKZNm6ZOnTqpadOmuvnmmzV16lSdO3fOYZ6oqChNmDBBK1euVJcuXRQdHa2NGzdKkg4fPqzRo0fbb9nv0qWLli5dmiuWQ4cO6ZFHHlFMTIzatm2rl156Kdd+crRr104ZGRn69ttvHbYfOHBAqampBeYwPznPH//xxx81efJkXX/99YqJidGwYcN0/Phxh7FJSUkaNGiQrrvuOjVr1kyxsbEaPXq0pOzHPrRt21aSlJiYaM9rzi3/8fHxat68udLS0jR48GA1b95cI0eOlJT/evXr10/9+vVz2Hb27FlNnz5dcXFxio6O1g033KDhw4crLS2t0Bjy+ky/Cxcu6M0331THjh3tj1b497//nWsNYmNjNWTIEP3www/q2bOnoqOjdcstt2jFihVFSTsAwIdQI1EjFVYj5dQJmzZt0p133qno6GjdfvvtWrduncO4/D5f+PLPg4mNjdUff/yh77//3r4Ol9dEl/r555+1YcMG9ezZM1fDT8q+mDlq1CiHbd9995169+6tmJgYtWrVSkOHDs2Vq5x49+zZo/j4eLVq1UotW7bU6NGjdebMGfu4ws5dZ9Y85/OIVq9erRkzZuimm25SdHS0BgwYoD179tjHFXaOAgBKBvVRYNZHefnuu+/UsGFDvfHGGw7bV61apaioKL333nv2bZfmIOe6zt13362tW7fmmtfZnBTnOpEkpaam6rHHHlObNm3s8XzxxRe59vPHH3+of//+atasmW666Sb95z//UVZWllM5+s9//iOLxaIpU6Y4NPwkKSIiQk8//bSOHj2qDz74wL49r2tiUvb1tZzzz9lrcXv37tWgQYMUExOjG264QYmJiTIMwz5nfp9jmfOI15zvlfj4eC1atEiSHB71ChQXt2gAJunUqZN2796tTz75RKNHj1blypUlSVWqVJEkzZgxQ2+88YY6d+6snj176vjx41q4cKH69OmjFStWqGLFijp37pwGDRqkc+fOqW/fvgoLC9Phw4e1YcMGnTp1SldccYWmTp2qMWPGqFmzZurVq5ek7F9w+Tl8+LAOHDigxo0bO2yfOnWqPvzwQ23fvl2TJk2SJLVo0cKpY3344Yf1999/69ChQ/amVc5fPWVlZWno0KH68ccf1atXLzVo0EApKSmaN2+edu/erf/85z8Oc23evFmfffaZ+vTpo8qVK6t27dpKT09Xr169ZLFY1KdPH1WpUkXffPONnnvuOZ0+fVr333+/JCkzM1MDBgzQwYMH1a9fP1WvXl0ff/yxNm/enGfckZGRCg0N1bZt29SpUyf79lGjRun777/X77//7tTx52XSpEmqWLGihg8frv3792vevHmaMGGCXn/9dUnZfxE3aNAgVa5cWQ899JAqVqyoffv2af369ZKyz5Nx48Zp3Lhx6tSpkz2+S3/5X7hwQYMGDVLLli01atQohYaGuhSjzWbTkCFD9N1336lLly7q37+//vnnH/33v/9VSkqK2rVrV2gMlxszZoyWL1+uuLg4DRw4UNu3b9esWbOUmpqqN99802Hsnj179Pjjj6tnz57q3r27li1bpvj4eDVp0kTXXHONS8cCAPAd1EjUSAXVSDl2796tESNG6N5777XXCY8//rhmz56t9u3bu7TPZ599VhMnTlS5cuX08MMPS5LCwsLyHf/ll19KktN/hf/tt99q8ODBqlOnjoYPH67MzEwtXLhQ9913nz766CPVqVPHYfwTTzyhOnXq6Mknn9Rvv/2mJUuWqEqVKnr66aclqcBz19k1z/H222/LYrHogQce0OnTpzV79myNHDlSS5YskVTwOQoAKDnUR4FTH505cybXHzxJUsWKFRUSEqK2bduqd+/eeuutt9SxY0c1adJER44c0aRJk9SuXTvdd999Du/bunWrVq9erX79+ql06dJavHixHnzwQS1ZskRWq1WS8/VDca8T/fHHH7rvvvtUo0YNDR48WOXKldNnn32mYcOGafr06fbxR48eVf/+/WWz2fTQQw+pbNmy+vDDD526S/PMmTPavHmzWrZsqbp16+Y55vbbb9fzzz+vr776Sg899JBT6yI5dy3OZrPpwQcf1LXXXqunn35aGzdu1PTp02Wz2fT44487vS9Juueee3TkyBH997//tTf9AbcwAJhm9uzZhtVqNfbu3euwfd++fUajRo2MGTNmOGz//fffjcaNG9u3//bbb4bVajU+++yzAvcTExNjjBo1yqmYvv32W8NqtRpffvllrtdGjRplxMTE5NreoUMHh/k3b95sWK1WY/PmzfZtDz30kNGhQ4dc712xYoXRsGFDY+vWrQ7bFy9ebFitVuPHH3+0b7NarUbDhg2NP/74w2Hss88+a7Rv3944fvy4w/YRI0YYLVu2NM6cOWMYhmHMnTvXsFqtxurVq+1jMjIyjE6dOuWKN8ett95qPPjggw7b+vbta1it1lxjL7d3717DarUas2fPtm9btmyZYbVajfvvv9/Iysqyb3/ppZeMRo0aGadOnTIMwzDWr19vWK1WY/v27fnOf+zYMcNqtRrTpk3L9dqoUaMMq9VqJCQk5Hrt8vW69Lj69u1r/3rp0qWG1Wo15syZk2tsTuwFxTBt2jSHPCUnJxtWq9V47rnnHMZNmTLFsFqtxnfffecQo9VqdTgvjh07ZjRt2tSYMmVKrn0BAPwLNRI1Uo7LayTDuFgnrF271r7t77//Ntq3b2/cdddd9m2X1yKX7+vS86tLly4OdVBBhg0bZlitVuPkyZNOjb/zzjuNtm3bGidOnLBvS05ONho2bGg888wzueIdPXp0rv21adPGYVt+566za55zLnbu3Nk4e/asfdy8efMMq9Vq/P777/Zt+Z2jAICSRX0UGPVRfv9++umnXHF06dLFOHv2rPHQQw8ZLVq0MPbv3+8wZ857k5KS7Nv2799vREdHG8OGDXM5J8W9TjRgwACja9euDrVHVlaWcc899xi33nqrfduLL75oWK1W4+eff7ZvO3bsmNGyZcs8vwculXPtadKkSfmOMQzD6Natm0N9dfk1sRyjRo1yOBeduRY3ceJEh+N76KGHjCZNmhjHjh0zDCPvc94wLp4Dy5Yts28bP368U+cP4Aoe7wl4wPr165WVlaXOnTvr+PHj9n9hYWGqV6+e/fbvChUqSJI2bdrk8Mif4jhx4oSk7L8gKglr1qxRgwYNdPXVVzsc6/XXXy9JuW51b926tSIjI+1fG4ahdevWKTY2VoZhOMxxww036O+//9avv/4qSfrmm29UrVo13Xbbbfb3ly1b1v7Xa3m58sor7TnJsWDBgmL9Bbsk+19Q5WjVqpVsNpv2798vSbriiiskSRs2bND58+eLvJ/L/8LLFevWrVPlypXVt2/fXK9dGruzvv76a0nSwIEDHbY/8MADDq/niIyMVKtWrexfV6lSRfXr19fevXtd3jcAwD9QI1Ej5ahevbrDX9FXqFBBd911l3777TcdPXq0WDEU5vTp05Kcu+PtyJEjSk5OVvfu3VWpUiX79oYNG6pdu3a56h9Juvfeex2+btWqlf766y/7fvPjyprnuPvuux0+Wymn9qLeAgDfQX3kX/XRPffcozlz5uT6d+lxlC1bVpMnT1Zqaqr69OmjDRs2aPTo0apVq1au+Zo3b66mTZvav65Vq5ZuueUWbdq0STabzaWcFOc60V9//aXNmzerc+fOOn36tH0fJ06c0A033KDdu3fr8OHDkrKvD8XExKhZs2b291epUkXdunUrNH/O1mnly5cvtLYqqj59+tj/O+fuyfPnz+u7774zZX+Aq3i8J+ABu3fvlmEYuvXWW/N8PSQk+1uzbt26GjhwoObMmaNVq1apVatWio2N1R133GFvGhWVccmzps20Z88epaam2p+Jfbljx445fH3544+OHz+uU6dO6YMPPnB4FvflYyRp//79qlevXq5CpH79+vnGZxhGkRpchbm8EMspkE+dOiVJatOmjeLi4pSYmKi5c+eqTZs26tixo7p16+b0h16HhISoZs2aRY4xLS1N9evXt59vxbV//34FBQXlejRItWrVVLFixVwX88LDw3PNceWVV+rkyZNuiQcA4HuokS4K1BopR17xXnXVVZKyj6datWpujy1HzkXTf/75p9CLnAcOHJCUdy4bNGigTZs2KSMjQ+XKlbNvzy8HJ0+etO87L66seWH7ujzfAADvRX10kT/UR/Xq1VO7du0KHdeyZUvdd999WrRokW644Qb17Nkz3/kud9VVV9kfIxoUFOR0TopznSgtLU2GYeiNN97I9XmEOY4dO6YaNWrowIEDuvbaa3O9XlDuc1xapxXkn3/+MeWR5UFBQbkeK5oT9+XXvQBPoekHeEBWVpYsFovefvttBQcH53r90osC8fHx6t69u7744gv997//1aRJkzRr1ix9+OGHRWr45DwXvqT+Rz8rK0tWq9X+nPbLXX4Ml38uXc6H+N5xxx3q3r17nnMU50NuT506lWeBVFxBQXnfSJ1TKFssFk2bNk3/+9//9NVXX2njxo169tlnNWfOHH3wwQdOFSalS5fOdz95sdlseZ5v7uZsAVwSsQAAfAs10kWBWiO5Ir+aw2azuTzXpa6++mpJUkpKisNTCdylqDkoypq7M98AAM+gPrrIX+ujvJw7d07ff/+9pOw79M+cOaOyZcu6PI/ZObl8Pw888IBuvPHGPMcU9PmRzoqIiFBISEiBd1eeO3dOf/75p8MdkPkpbt2Yl/xq1JwcAWaj6QeYKL8f8hERETIMQ3Xq1HHqr1iioqIUFRWlRx55RNu2bdN9992nxYsXa8SIES7HlHMRY9++fS6/tyAFHeuOHTvUtm3bIv01VJUqVVS+fHllZWUV+pdQtWvXVkpKSq6/vPrzzz/zHH/hwgUdPHhQsbGxLsflLjExMYqJidGIESO0atUqjRw5UqtXr9a//vWvIv/12JVXXplnQX7gwAGHv0aKiIjQzz//rPPnz6tUqVJ5zuVKDLVr11ZWVpb27NmjBg0a2Lenp6fr1KlTql27tgtHAQDwZ9RI1EiF2bNnT654d+/eLUn2muLSu9YuvSMv5+67S7mS4w4dOmjWrFlauXJloU2/nDvp8srlrl27VLlyZYeLscXhypq7wow7OgEArqM+oj661LRp05SamqpRo0YpISFBr776qsaMGZNr3J49e3Jt2717t8qWLasqVapIktM5Kc51opzrTaVKlSp0P7Vq1coz7vxyf6ly5crpuuuu0+bNm7V///48rzWtXr1a586dU4cOHezbrrzyyjwfb3553VjYeZeVlaW9e/c6fC/mxH15jfr33387vDevOwGpw2AGPtMPMFHOX+Bc/kP+1ltvVXBwsBITE3P9la1hGPbng58+fVoXLlxweN1qtSooKEjnzp2zbytXrpzTf3VVo0YNhYeH65dffnH5eApStmzZXMcpSZ07d9bhw4f14Ycf5notMzNTGRkZBc4bHBysuLg4rV27VikpKblev/QRRjfddJOOHDmiNWvW2LedOXMmz31L0s6dO3X27Fk1b97cYfuBAweUmppaYFzFdfLkyVxr36hRI0myr23O+ePqX9TVrVtXP//8s8M58tVXX+ngwYMO42699VadOHFCixYtyjVHTmyuxHDzzTdLkubNm+ewfc6cOQ6vAwBAjUSNVJgjR45o/fr19q9Pnz6tFStWqFGjRvZHe+b8tfjWrVvt4zIyMrRixYpc85UtW9bpc6F58+a68cYbtWTJEn3++ee5Xj937pxefvllSdmfPdioUSOtWLHCYf6UlBT997//LXL9k9e568qauyK/cxQAULKoj6iPcvz888969913NWDAAD3wwAMaNGiQFi5caL/z71I//fSTw2f6Hjx4UF988YXat2+v4OBgl3JSnOtEVatWVZs2bfTBBx/oyJEjBe7n5ptv1v/+9z9t377d4fVVq1blm5NLDR06VIZhKD4+XpmZmQ6v7d27VwkJCapWrZruuece+/a6detq165dDnHs2LFD27Ztc3i/M9fBLs2PYRhatGiRSpUqZX8sbe3atRUcHOxQo0rS4sWLc81V1Gt/QEG40w8wUZMmTSRJr732mm6//XaVKlVKHTp0UEREhJ544gm9+uqr2r9/vzp27Kjy5ctr3759+vzzz9WrVy8NGjRImzdv1oQJE3Tbbbfpqquuks1m08cff2z/hX3pfr777jvNmTNH1atXV506dfJ8NnaOW265RevXr3frZ7U0adJEq1ev1uTJkxUdHa1y5copNjZWd955pz777DO98MIL2rJli1q0aCGbzaZdu3ZpzZo1mj17tqKjowuc+6mnntKWLVvUq1cv/etf/1JkZKROnjypX3/9Vd9995296OnVq5cWLVqkUaNG6ddff1W1atX08ccf53rcQ45vv/1WZcuWzfUXSKNGjdL333/v0gcxu2r58uVavHixOnbsqIiICP3zzz/68MMPVaFCBd10002Ssh9TERkZqc8++0xXXXWVKlWqpGuuuUZWq7XAuf/1r39p7dq1evDBB9W5c2elpaVp1apVuR6jcNddd2nFihWaPHmytm/frpYtW+rMmTP67rvvdN9996ljx44uxdCwYUN1795dH3zwgU6dOqXWrVsrKSlJy5cvV8eOHe0fvA0AADUSNVJhrrrqKj333HNKSkpS1apVtWzZMh07dkyTJ0+2j2nfvr1q1aql5557Trt27VJwcLCWLVumypUr5/qr7SZNmmjx4sX6z3/+o3r16qlKlSr5fl6QJE2dOlUPPPCAhg8frg4dOqht27YqW7as9uzZo9WrV+vIkSMaNWqUJOmZZ57R4MGDdc8996hnz57KzMzUwoULdcUVV2j48OFFOv78zl1n19zVfeV1jgIAShb1UWDUR7/99ps+/vjjXNsjIiLUvHlznT17VqNGjVK9evXsd2c++uij+uqrrzR69GitWrXK4SkCVqtVgwYNUr9+/VS6dGl7Y+nRRx91OSfFvU70wgsvqHfv3urWrZt69eqlunXrKj09Xf/73/906NAhrVy5UpL04IMP6uOPP9aDDz6o/v37q2zZsvrwww9Vq1Ytp/LYunVrjRo1SpMnT7Y/trRatWratWuXlixZoqysLL311lu68sor7e/p2bOn5s6dq0GDBqlnz546duyY3n//fUVGRjp8PmBh18HKlCmjjRs3atSoUWrWrJk2btyoDRs26OGHH7bfWXnFFVfotttu08KFC2WxWFS3bl1t2LAh12dSShe/7ydNmqQbbrhBwcHB6tKlS6E5AApC0w8wUbNmzfT444/r/fff18aNG5WVlaUvvvhC5cqV00MPPaSrrrpKc+fO1Ztvvikp+9nk7du3t/9PdlRUlG644QZ99dVXOnz4sMqWLauoqCi9/fbbiomJse8nPj5eY8eO1euvv67MzEx17969wIKtR48eWrhwoX788Ue3fU5J7969lZycrI8++khz585V7dq1FRsbq6CgIL355puaO3euPv74Y61fv15ly5ZVnTp11K9fP6ceTREWFqYlS5bozTff1Pr167V48WJVqlRJkZGRGjlypH1c2bJlNXfuXE2cOFELFy5UaGiounXrpptuukkPPvhgrnnXrFmjTp062T8EuCS1adNGSUlJWr16tdLT03XFFVeoWbNmSkhIcHgE56RJkzRx4kRNnjxZ58+f1/Dhwwtt+t14442Kj4/XnDlz9NJLL6lp06aaOXOm/S/ScwQHB+vtt9/WjBkz9Mknn2jdunWqVKmSWrRo4fA8d1dimDRpkurUqaPly5fr888/V1hYmIYMGVLkC14AAP9EjUSNVJirrrpKzz//vKZOnao///xTderU0WuvvebwGTGlSpVSYmKixo8frzfeeEPVqlXTgAEDVLFixVyfBTRs2DAdOHBAs2fP1j///KM2bdoU2PSrUqWK3n//fb333ntavXq1XnvtNZ0/f96+fv3797ePbdeunWbPnq1p06Zp2rRpCgkJUevWrfX000871HWuyO/cdXbNXZHfOQoAKFnUR4FRH33yySf65JNPcm3v3r27mjdvrn//+99KS0vT+++/rzJlykiSSpcurSlTpuiee+7R1KlTNW7cOPv7WrdurZiYGL355ps6cOCAIiMjNXnyZDVs2NDlnBT3OlFkZKSWLVumxMRELV++XH/99ZeqVKmixo0ba9iwYfb3V69eXfPnz9ekSZP01ltvqVKlSrr33ntVvXp1Pffcc07l8f7771fT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VXP98MMP2r9/v+Li4iRJR48e1c6dO3XkyBH17t3bqTmCg4N94mJjzt1xBT1O/Myh1JIMqUjcke+c9zv7aHVn9+kr54KvIr/mIbfmIr/mCpT8utz0++9//6t33nkn163qV111lQ4cOOC2wAAAAPwZNRUAAID53FVz9e7d26G5169fPw0YMEAdO3Z0W6wAAADF5fKDrTMyMhQaGppr+19//aXSpUu7JSgAAAB/R00FAABgPmouAAAQSFxu+rVq1UorVqxw2JaVlaXZs2fruuuuc1dcAAAAfo2aCgAAwHxm1VwLFizgLj8AAOB1XH6859NPP637779fv/zyi86fP69XXnlFO3fu1MmTJ7V48WIzYgQAAPA71FQAAADmo+YCAACBxOWmn9Vq1dq1a7Vw4UKVL19eGRkZ6tSpk/r06aPq1aubESMAAIDfoaYCAAAwHzUXAAAIJC43/STpiiuu0NChQ90dCwAAQEChpgIAADAfNRcAAAgURWr6nTx5UkuXLlVqaqokKTIyUnfffbcqVarkztgAAAD8GjUVAACA+ai5AABAoAhy9Q1bt25VbGysFixYoFOnTunUqVNasGCBbrnlFm3dutXtAS5btkxRUVH6/PPP3T43AACAp5R0TQUAABCIqLkAAEAgcflOvwkTJuj222/XuHHjFBwcLEmy2WwaP368JkyYoFWrVrktuH379mnJkiWKiYlx25wAAADeoCRrKgAAgEBFzQUAAAKJy02/PXv26I033rAXSpIUHBys+++/XytWrHBbYFlZWRozZozGjBmjl19+2eX322w2t8ViJlfjtNls+b7HnXO5Op8753JmvrS0NKWnpxc6T1hYmCIiIgrdl7viKik5MXhDLMjGmngX1sP7+NqalEScJVVTAQAABDJqLgAAEEhcbvo1btxYu3bt0tVXX+2wfdeuXWrYsKHbApszZ45atGihpk2bFun9SUlJbovFTCkpKS6PDwrK+6ms7pzL1fncOVdh8x06dEg9evbU2czMQucpExqqZUuXqmbNmm6JrbDjLGm+cp4HEtbEu7Ae3oc1uaikaioAAIBARs0FAAACiVNNvx07dtj/u3///nrxxRe1Z88eXXvttZKkn3/+WYsWLdLIkSPdElRKSorWrVunhQsXFnmO6Ohoh7/i8lZZWVkujbdarfk+7tSdc7k6nzvnKmy+bdu26WxmpuoP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FBjb6dOndeTIEbVo0cJhe4sWLbRjxw4njzB/qampat68uSwWi31by5YtlZGRoUOHDqlWrVqSpLVr1+r48eN677331KxZM/vYHTt2KC0tLVd8Z8+eVVpamv3ryMhIBQcH27+uVq2aUlJSJGU//qJWrVrq2LGjbrzxRt14443q1KmTypYtW+zjAwAAzqOuKh7qKgAAIFFTFRc1FRBYaPoBcNC6dWvdcMMNevXVV3X33Xc7vGaxWGQYhsO2vJ7/HRLi+KPFYrHkue3yvyYqSEZGhjp06KCRI0fmeq1atWr2//aVYqFx48b69ddftWzZMkVHR9sLr4yMDDVp0kQJCQm53lOlShX7f+eVz5y1qVChgpYvX67vv/9emzZt0rRp05SYmKilS5eqYsWKJh4VAAC4FHVVyaCuAgDAv1FTlQxqKsA/8HhPALk89dRT+uqrr/TTTz85bK9SpYrS09Mdiqnk5GS37fd///uf/b8vXLigX3/91f7YgyZNmuiPP/5Q7dq1Va9ePYd/5cqVc3ofFSpUUPXq1bVt2zaH7du2bVNkZKRL8ZYqVSpXMdigQQP99NNPDjn68ccfVb58edWsWdO+rW7dupo/f76++OILTZw40b69SZMm2rNnj6pWrZrrOK+44gqnYwsJCVG7du30zDPPaOXKldq/f782b97s0vEBAIDio65yDnUVAAAoCDWVc6ipAND0A5BLVFSUunXrpgULFjhsv+6663T8+HG9/fbbSktL06JFi7Rx40a37fe9997T+vXrlZqaqgkTJujkyZPq0aOHJKl37946efKknnzySW3fvl1paWnauHGjRo8eLZvN5tJ+Bg0apLffflurV6/Wrl27lJCQoB07drj8LPHatWvr559/1r59+3T8+HFlZWWpd+/eOnTokCZOnKjU1FR9/vnnmj59ugYOHOjwGAlJql+/vubPn69169bpxRdflCR169ZNlStX1tChQ/XDDz9o79692rJliyZNmuT0h1Z/9dVXmj9/vpKTk7V//36tWLFCWVlZ9sdKAACAkkNd5RzqKgAAUBBqKudQUwHg8Z4A8vTYY49p9erVDtsaNGigF154QbNmzdKMGTN066236oEHHtCHH37oln0+9dRTeuutt5ScnKx69eppxowZ9scE1KhRQ4sXL1ZCQoIGDRqkc+fOqVatWrrxxhtzFSiF6d+/v06fPq0pU6bo+PHjatCggf7zn//oqquucmmeBx54QPHx8erSpYsyMzP1xRdfqE6dOnrrrbc0depUffjhh6pUqZJ69uypoUOH5jnH1VdfrXnz5qlfv34KDg5WfHy8Fi5cqISEBA0fPlz//POPatSoobZt26pChQpOxXXFFVdo/fr1SkxM1NmzZ1WvXj29+uqrDs+qBwAAJYe6qnDUVQAAoDDUVIWjpgJgMS5/6DEAAAAAAAAAAAAAn8LjPQEAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MP8FEfffSRoqKitG/fPqfGjxs3TgMHDnTYlp6erscee0zXXXedoqKiNHfuXG3ZskVRUVHasmWLfVx8fLxiY2PdGr+ZLo/3xIkTiomJ0ddff+3BqHxfbGys4uPjPR0GAAAFokbKHzUSAACBixopf9RIntOvXz/169fP02EAfoWmHxAA9u7dq6VLl2rIkCEO2ydPnqyNGzfqoYce0tSpU3XjjTc6Nd+ZM2c0ffp0h4LOm1WuXFk9e/bUG2+8Uax5pk+frqioKB0/ftxNkTnatm2bpk+frlOnTpkyv6/EAABASaFG8o0ayVWHDx/W9OnTlZyc7NL70tLSNHbsWN1yyy2Kjo5WixYtdO+992revHnKzMw0KVpp586dmj59utMXYYvD185RAIBnUCO5t0bK79/Ro0fdFLG5vOVa0fnz5zV//nz16NFDzZs3V/PmzdWjRw/Nnz9f58+fL/K8JX18M2fO1Oeff14i+0JgCvF0AADMN3/+fNWuXVvXX3+9w/bNmzfrlltu0aBBg+zb6tevr+3bt6tUqVL5znfmzBklJiZq+PDhuu6660yL253uu+8+LViwQN99953atm3r6XDy9NNPPykxMVHdu3dXxYoVvS6GNWvWyGKxeCQuAADMQI3kGzWSq44cOaLExETVrl1bjRo1cuo9GzZs0OOPP67SpUvrzjvvlNVq1fnz5/Xjjz/qlVde0c6dOzVx4kRT4t25c6cSExPVpk0b1alTx5R95PDFcxQAUPKokdxbI40bN07lypXLtd1T135c5Q3XqzIyMjRkyBB9//336tChg+6++25ZLBZt3LhRL774otavX69Zs2blmefClPTxzZo1S3FxcerYsaPp+0JgoukH+Lnz589r1apVuvfee3O9duzYsVy/zIKCglSmTJmSCs9BRkZGkX45O6NBgwayWq1avny5X1zQysrK0vnz50t0rUqXLl1i+wIAwGzUSNn8rUYqir1792rEiBGqVauW5s2bp+rVq9tf69Onj/bs2aMNGzZ4LkAAAEoQNVI2d9ZIcXFxqlKlipsiC0xTpkzR999/r+eff159+/a1b+/du7cWLVqkCRMm6OWXX9b48eM9GCXgHXi8J1AC1qxZo6ioKH3//fe5Xnv//fcVFRWllJQUSdKOHTsUHx9vf6xQ+/btNXr0aJ04caJI+/7xxx914sQJtWvXzr4t5znuhmFo0aJF9scKSMrzWeyX2rdvn73YSUxMtL93+vTp9jGpqal67LHH1KZNG0VHR+vuu+/WF1984TBPTgzff/+9xo0bp7Zt2+rmm2+2v/7111+rd+/eiomJUfPmzfXQQw/pjz/+yBXP559/rq5duyo6Olpdu3bV+vXr881Fu3bt9NVXX8kwDPu28+fPKzU1VUeOHCkojfnq16+funbtqp07d6pfv3669tprdeONN+rtt9/ONXbBggXq0qWLrr32WrVu3Vp33323Vq1aJSn7kQ9Tp06VJN1yyy32vOY85ikqKkoTJkzQypUr1aVLF0VHR2vjxo35rte+ffsUFRWljz76yGF7amqqHn/8cV1//fVq1qyZ4uLi9NprrzkVQ16f6bd37177Wl977bXq1atXrotiOTGuXr1aM2bM0E033aTo6GgNGDBAe/bsKUraAQB+ghqJGunSOuHf//632rdvr5iYGD388MM6ePCgw9j8Pl/40s+C2bJli3r27ClJGj16tH0dLq+JLjV79mxlZGToxRdfdGj45ahXr54GDBhg//rChQt688031bFjRzVt2lSxsbH697//rXPnzuWKd8iQIfrhhx/Us2dPRUdH65ZbbtGKFSvsYz766CM9/vjjkqT+/fvb4730PHNmzePj49W8eXMdPnxYjzzyiJo3b67rr79eL7/8smw2myTnzlEAgHegRvLfGikvo0aNUnR0tFJTUx22Dxo0SK1bt9bhw4clXczB1q1bNXbsWF133XVq0aKFnnnmGZ08eTLXvM7mpDjXiiTp448/1t13361mzZqpTZs2GjFiRK46TpI++OADdezYUc2aNVPPnj31ww8/OJWfQ4cOaenSpbr++usdGn45+vTpo+uuu05Lly7VoUOHJOV/XUySw/nnyvW4uLg4+/m5detWhznz+xzLnEe8XrrvjIwMLV++3L6vvOpboDi40w8oAf/3f/+ncuXK6bPPPlObNm0cXlu9erWuueYaWa1WSdK3336rvXv36u6771a1atX0xx9/6MMPP9TOnTv14Ycfuvx4xZ9++kkWi0WNGze2b2vdurWmTp2qZ555Ru3bt9edd97p9HxVqlTRuHHjNG7cOHXq1EmdOnWSJPsvsD/++EP33XefatSoocGDB9uPe9iwYZo+fbp9fI7x48erSpUqGjZsmDIyMiRJK1asUHx8vG644QaNHDlSZ86c0eLFi9W7d28tX77c/tijTZs26dFHH1VkZKSeeuopnThxQqNHj1bNmjXzjL1JkyaaO3eu/vjjD3u+Dx8+rNtvv13du3fXlClTnM7DpU6ePKkHH3xQnTp1UufOnbV27VolJCTIarXaC9APP/xQkyZNUlxcnPr376+zZ8/q999/188//6xu3bqpU6dO2r17tz755BONHj1alStXtuc7x+bNm/XZZ5+pT58+qly5smrXru3S88Z37NihPn36KCQkRPfcc49q166ttLQ0ffnllxoxYoRTMVwqPT1d9957r86cOaN+/fqpcuXKWr58uYYOHapp06blWuu3335bFotFDzzwgE6fPq3Zs2dr5MiRWrJkiUv5BgD4D2okaqQcM2bMkMVi0eDBg3Xs2DHNmzdP999/vz7++GOFhoY6vc8GDRroscce07Rp03TPPfeoZcuWkqQWLVrk+56vvvpKdevWLXDMpcaMGaPly5crLi5OAwcO1Pbt2zVr1iylpqbqzTffdBi7Z88ePf744+rZs6e6d++uZcuWKT4+Xk2aNNE111yj1q1bq1+/flqwYIEefvhhXX311fbjkJxfc0my2WwaNGiQmjVrpmeeeUbfffed3n33XdWtW1e9e/cu9BwFAHgPaiT/qpHyasiFhITY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ERFRWDwuuETtudmx4FuHZysrH3k6Zn766SdVrVq18BucNWvWLDGnApWN3/QDKtHll1+u2NhYrVq1Su+//74uvPDCIm9QlPRJmzfeeKPcfbZt21Zut1vff/99uds4V9WqVSUVf+GsW7euLr30Uv3jH//QgQMHij3u8OHDZbZ91VVXqXr16nr11Vd1+vTpEtuoX7++WrVqpWXLlhUpeH366afFfkuuwA8//KAaNWroggsuKLzt9OnT2rFjh8fxmnT29d+lM5/Ya9Gihdxud+E8C9bVl8tvNG7cWOHh4fr666+L3L548eIif9epU0cdOnTQ0qVLiwWOsz/558sYrrnmGn333XfavHlz4W3Hjx/XW2+9pcaNG5f79wcBAPZDRrJvRiqwfPnyIr/Bsnr16iJvXkln3pj69ttvderUqcLbPvroI+3fv79IWyXth5LcfffdqlatmsaNG6fc3Nxi92dnZxcea9dcc42k4sdeenp6kft9UVL+8nafl6cvLq8OANZARrJPRkpLS9P+/fs1depUjRkzRo0bN9aYMWOK5J4C//jHP4rMdfHixcrPzy/MTd6uSUXfK+rSpYvCw8M1c+bMYt8qdbvdhe+FtWnTRnXq1NGSJUuKzGfZsmVeZZL4+Hj17t1bn332mRYtWlTs/sWLF+uLL75Qnz591LBhQ0lnruZQu3Ztbdy4sci2nh5f1nthmzdvLvL7mPv379e6det0xRVXFD4HExISdOzYMW3btq1wuwMHDuiDDz4o1l61atXIYvArvukHVKLIyEjdcMMNWrlypU6cOKHHH3+8yP3Vq1dXhw4d9Nprr+n06dNq0KCBPv3008JPFpXHJZdcotjYWH3++edFPk1TEdHR0UpMTNT777+v8847T7GxsbrggguUlJSkp556Sv3791ePHj102223qWnTpsrNzdW///1v5eTkaMWKFaW2Xb16dT399NMaPXq0evfurW7duqlOnTr6+eef9cknn6hdu3YaP368JOnRRx/VsGHD1L9/f/Xp00e//fabFi5cqAsuuEDHjx8v1vZnn32m6667rsgneH755Rd169ZNvXr18ulHmH01dOhQxcXFqV27dqpbt6527typhQsX6pprrim8lnrr1q0lSS+88IK6deumyMhIXXfddaVeDqFGjRq68cYbtXDhQjkcDjVt2lQff/xxsev4S9K4ceP0l7/8Rb169VK/fv3UpEkT7du3Tx9//LHeffddn8dw7733auXKlbrnnns0YMAA1apVS8uXL9fevXs1Y8aMEi/nCQDAuchI9s1IBWrVqqX+/furd+/eOnTokN544w01a9ZMt912W+E2f/7zn7VmzRrdfffduummm5Sdna333nuv2GW/EhISVLNmTS1ZskQxMTGqVq1asTdJz90+LS1NjzzyiLp166aePXsqKSlJp06d0ubNm7V69Wr17t1bktSyZUv16tVL//jHP3T06FF16NBBmZmZWrZsmTp37lzkU/featWqlcLDwzVnzhwdO3ZMUVFR+tOf/qS6det6vc+9VdoxCgAIPmSk0MhIa9as8fi+yhVXXKG4uDh9/vnnWrRokYYPH174vsyUKVM0YMAAvfjiixo9enSRx50+fVqDBw/WTTfdpF27dmnRokW65JJLdP311/u8JhV5ryghIUEjR47UtGnTtG/fPnXu3FkxMTHau3evPvzwQ912220aOnSoIiMjNXLkSI0fP16DBg1St27dtHfvXr3zzjte/aafJI0dO1Y7d+7UhAkTtH79+sJv9G3YsEHr1q3TpZdeqjFjxhR5zJ///GfNnj1bTz75pNq0aaONGzd6/FZnWe+FJSUlaejQoRowYICioqIKP2g/YsSIwja6deumtLQ0DR8+XAMGDFBeXp4WL16s5s2bFykYFvT3+eefKz09XfXr11eTJk100UUXebUOgDco+gGVrFu3bnr77bflcDiKXJKhwLRp0zRp0iQtWrRIbrdbV1xxhebMmVPitc3LEhUVpR49emj16tXFrvteEc8884wmTZqkKVOm6PTp0xo+fLiSkpKUmJiopUuXaubMmVq2bJl+++031alTRykpKXrwwQe9artHjx6qX7++Zs+erblz5+rUqVNq0KCB2rdvX/iGi3Tm6/3Tp0/Xiy++qGnTpikhIUFTpkzRunXr9NVXXxVpc8eOHcrKytITTzxhbA180a9fP7333ntKT0/X8ePH1bBhQw0YMEAPPPBA4TYXXnihHn74YS1ZskTr16+Xy+XSunXryrwG+rhx45Sfn68lS5YoKipKN954o0aPHq2bb765yHYtW7bUW2+9penTp2vx4sU6efKkGjVqVOQ49GUMcXFxWrJkiZ5//nktXLhQJ0+eVHJysmbNmqVrr722YgsGALAdMlLZQjEjFbjvvvv0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AMDiKPoBAAAAAAAAAAAAFkfRDwAAAAAAAAAAALA4in4AAAAAAAAAAACAxVH0AxBwe/fuVXJysrZu3RrooRTasWOHbrvtNqWmpqpnz55G2x4wYIAmT55stE0AAACJXAUAAGACmQqAVVH0A6AxY8YoOTlZs2fPLnL7hx9+qOTk5ACNKrBmzJihqlWravXq1Zo3b57HbQhEAADgXOSq4shVAADAV2Sq4shUALxB0Q+AJKlKlSqaM2eOjhw5EuihGHPq1KlyPzY7O1uXXHKJGjdurNq1axscFQAACHXkqqLIVQAAoDzIVEWRqQB4g6IfAEnS5Zdfrri4OL366qslbjNjxoxilw+YN2+eOnXqVPj3mDFj9MADD2jWrFm6/PLL1b59e82cOVP5+fl69tlndemll+rqq6/W0qVLi7W/c+dO3X777UpNTdXNN9+sr776qsj9WVlZuvvuu3XxxRfr8ssv11//+lcdPny48P4BAwZo4sSJmjx5si677DINHTrU4zxcLpdmzpypq6++Wm3atFHPnj31r3/9q/D+5ORk/fDDD3r55ZeVnJysGTNmFGtjzJgx+uqrrzR//nwlJycrOTlZe/fulSR99dVX6tu3r9q0aaMrr7xSaWlpys/PL3FdP/74Y11yySVasWKFJGn//v16+OGH1b59e1166aW6//77C9s+e43nzp2rK6+8UpdddpkmTJig06dPF27z5ptvqkuXLkpNTdXll1+uhx56qMT+AQCAWeQqchUAAKg4MhWZCoDvKPoBkCSFhYXp0Ucf1cKFC5WTk1Ohtr744gsdOHBACxcu1JgxYzRjxgwNGzZMtWrV0ltvvaXbb79dTz31VLF+nnvuOQ0ZMkTLly9X27Ztdd999+nXX3+VJB09elSDBg1SSkqKMjIy9Nprr+nQoUMaOXJkkTaWLVumyMhILV68WBMmTPA4vvnz5ys9PV2PP/64VqxYoSuvvFIPPPCAfvrpJ0nShg0bdMEFF+iuu+7Shg0bdNdddxVr48knn9TFF1+s2267TRs2bNCGDRsUHx+vX375Rffee69SU1P17rvv6umnn1ZGRoZeeeUVj2N577339OijjyotLU233HKLTp8+raFDhyomJkZvvvmmFi9erGrVqunuu+8u8mmwL7/8UtnZ2XrjjTc0depULVu2TMuWLZMkZWZmavLkyXrooYe0evVqvfba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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# Function to filter dataset based on combined token counts\n","def filter_by_token_count(dataset_split, combined_token_counts, max_tokens=2048):\n"," filtered_dataset = [example for example, count in zip(dataset_split, combined_token_counts) if count <= max_tokens]\n"," return filtered_dataset\n","\n","# Function to plot token distribution\n","def plot_distribution(token_counts, title, ax):\n"," sns.set_style(\"whitegrid\")\n"," ax.hist(token_counts, bins=50, color='#3498db', edgecolor='black')\n"," ax.set_title(title, fontsize=12)\n"," ax.set_xlabel(\"Number of tokens\", fontsize=10)\n"," ax.set_ylabel(\"Number of examples\", fontsize=10)\n"," ax.tick_params(axis='both', which='major', labelsize=8)\n","\n","\n","# Set up the figure for plotting\n","fig, axs = plt.subplots(3, 3, figsize=(18, 12)) # 3 splits, 3 metrics (instruction, input_content, expected_output)\n","\n","# Process each dataset split\n","for i, split_name in enumerate(['train', 'test', 'val']):\n"," # Tokenize and count\n"," instruction_counts, input_content_counts, expected_output_counts, combined_counts = tokenize_and_count(dataset[split_name])\n","\n"," # Filter dataset based on combined token count\n"," filtered_dataset = filter_by_token_count(dataset[split_name], combined_counts)\n","\n"," # Re-tokenize and count for the filtered dataset\n"," filtered_instruction_counts, filtered_input_content_counts, filtered_expected_output_counts, _ = tokenize_and_count(filtered_dataset)\n","\n"," # Plotting the distributions for the filtered datasets\n"," plot_distribution(filtered_instruction_counts, f\"{split_name} (filtered): Instruction\", axs[i, 0])\n"," plot_distribution(filtered_input_content_counts, f\"{split_name} (filtered): Input Content\", axs[i, 1])\n"," plot_distribution(filtered_expected_output_counts, f\"{split_name} (filtered): Expected Output\", axs[i, 2])\n","\n","# Adjust layout to prevent overlap\n","plt.tight_layout()\n","plt.show()\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"EtNSFWlUvUWF","outputId":"f5e95b39-8a6a-4a24-e14f-1a26a657b991"},"outputs":[{"name":"stdout","output_type":"stream","text":["Number of valid rows in train: 448\n","Removing 0 rows from train...\n","Number of valid rows in test: 56\n","Removing 0 rows from test...\n","Number of valid rows in val: 56\n","Removing 0 rows from val...\n"]},{"data":{"image/png":"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ibi4OE15YmIi3nzzTXh6emL06NH4448/qjFKIiIiqstkkzh5enpi3759aNOmjVb5smXLMHbsWERGRmLq1KkICAiopgiJiIiorpPNfZx69uxZouzRo0e4ceMGdu/eDeB5crVy5UokJSWhXbt2OrWvUqn0Eqc+Fcckx9j+KTk5GZmZmWXWsbCwgI2NTaXGUZPGTA44XrrjmOmG46U7jpluqmK8dGlbNolTadLT02FpaQkjo+dhKhQKWFlZ4d69ezonTnJ+7IqcYwOA+/fvY/SYMXiWn19mvXqmpjgcEYFWrVpVekxyHzO54XjpjmOmG46X7jhmupHLeMk6cdInOd7avqbcdv/atWt4lp+PDpOCYGplW2qd/PTbuBuyEC1atICLi0ulxVJTxkwuOF6645jphuOlO46ZbqrykStiyDpxsrKywsOHD1FUVAQjIyMIgoD09HS0bt1a57bkfGt7OccGQBObqZUtzGwcy61bFe9F7mMmNxwv3XHMdMPx0h3HTDdyGS/ZLA4vTfPmzeHo6Ijjx48DACIjI9GyZUudL9MRERER6YNszjgtW7YMFy5cQGZmJvz9/WFmZoYzZ85g+fLlWLJkCbZt2wYzMzMEBgZWd6hERERUR8kmcVqxYkWp5R07dsSXX35ZxdEQERERlSTrS3VEREREcsLEiYiIiEgkJk5EREREIjFxIiIiIhKJiRMRERGRSEyciIiIiERi4kREREQkEhMnIiIiIpGYOBERERGJxMSJiIiISCQmTkREREQiMXEiIiIiEomJExEREZFITJyIiIiIRGLiRERERCQSEyciIiIikZg4EREREYnExImIiIhIJCZORERERCIxcSIiIiISiYkTERERkUhMnIiIiIhE0nvi9OTJE5w9exYJCQn6bpqIiIioWklOnN59912Eh4cDAPLz8zF69GjMnTsXo0aNQmRkpOQAiYiIiORCcuJ05coVuLm5AQDOnDkDQRBw+fJl/N///R+2bNkiOUAiIiIiuZCcOOXm5qJJkyYAgIsXL2Lo0KGoX78+Xn75ZSQlJUkOkIiIiEguJCdOVlZWuH79OvLy8nDx4kX06dMHAJCTkwMTExPJARIRERHJhZHUBvz8/PDee++hQYMGsLKywksvvQQAuHz5Muzs7CQHSERERCQXkhOnt956C127dsX9+/fh7u4OA4PnJ7Gsra0xd+5cqc0T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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["def filter_and_plot(dataset_split_name, dataset_split_data, combined_token_counts, ax):\n"," # Filter out rows with more than 2048 tokens\n"," valid_indices = [i for i, count in enumerate(combined_token_counts) if count <= 2048]\n"," print(f\"Number of valid rows in {dataset_split_name}: {len(valid_indices)}\")\n"," print(f\"Removing {len(dataset_split_data) - len(valid_indices)} rows from {dataset_split_name}...\")\n","\n"," # Extract valid rows based on indices\n"," valid_dataset = [dataset_split_data[i] for i in valid_indices]\n","\n"," # Re-calculate token counts for the valid dataset\n"," filtered_instruction_counts, filtered_input_content_counts, filtered_expected_output_counts, valid_combined_counts = tokenize_and_count(valid_dataset)\n","\n"," # Plot the new distribution for valid rows\n"," plot_distribution(valid_combined_counts, f\"New distribution after filtering {dataset_split_name}\", ax)\n","\n","\n","\n","# Create a figure with subplots\n","fig, axs = plt.subplots(3, 1, figsize=(6, 9)) # Adjust figsize as necessary\n","\n","# Assuming the 'dataset' variable is a dictionary containing data splits 'train', 'test', and 'val'\n","for i, split_name in enumerate(['train', 'test', 'val']):\n"," # Tokenize and count for the specific dataset split\n"," instruction_counts, input_content_counts, expected_output_counts, combined_counts = tokenize_and_count(dataset[split_name])\n","\n"," # Filter datasets based on token count and plot the new distribution\n"," filter_and_plot(split_name, dataset[split_name], combined_counts, axs[i])\n","\n","plt.tight_layout()\n","plt.show()"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"2sifZa8A9BwV","outputId":"0de7579c-203d-4505-8af5-8d487e9088b6"},"outputs":[{"name":"stdout","output_type":"stream","text":["No entries removed due to token count. Skipping saving.\n"]}],"source":["# Initialize a flag to indicate whether any entries were removed in any split\n","entries_removed = False\n","\n","# Iterate over each split in the dataset\n","for split_name in ['train', 'test', 'val']:\n"," # Get the original length of the split\n"," original_length = len(dataset[split_name])\n","\n"," # Tokenize and count tokens in the split\n"," _, _, _, combined_counts = tokenize_and_count(dataset[split_name]) # Corrected to unpack four values\n","\n"," # Determine valid indices (entries with <= 2048 tokens)\n"," valid_indices = [i for i, count in enumerate(combined_counts) if count <= 2048]\n","\n"," # Check if any entries were removed\n"," if len(valid_indices) < original_length:\n"," entries_removed = True\n","\n"," # Update the dataset split with filtered entries\n"," # Note: This assumes dataset[split_name] is compatible with .select() method (Hugging Face datasets)\n"," dataset[split_name] = dataset[split_name].select(valid_indices)\n","\n","# Flag to control execution of subsequent code\n","continue_execution = entries_removed # Simplified logic\n","\n","if continue_execution:\n"," # Save the filtered dataset to disk\n"," dataset.save_to_disk('new_sum_qna_data')\n"," print(\"Dataset saved successfully.\")\n","else:\n"," print(\"No entries removed due to token count. Skipping saving.\")\n"]},{"cell_type":"markdown","metadata":{"id":"kXzTKu99w3g4"},"source":["---\n","\n","## 4. Near-deduplication Using Embeddings\n","\n","* Near-deduplication with embeddings is a technique that employs vector representations to effectively identify and manage nearly identical data entries.\n","\n","* By transforming data into these vectors (embeddings), we can quantitatively measure how similar different pieces of data are. This transformation significantly improves our ability to manage large datasets, where sorting through and removing near-duplicates manually would be impractical.\n","\n","* Widely used in fields like database management, information retrieval, and machine learning, this approach is crucial for efficient data handling and analysis.\n","\n","---\n","\n","### We Will Not Perform Deduplication on Our Summarisation + Questions & Answers Dataset.\n","\n","* **Intentional Repetition for Emphasis**: In educational contexts, certain concepts may be intentionally repeated to underscore their significance. Deduplication could diminish the dataset's educational effectiveness by removing these purposeful repetitions.\n","\n","* **Variations of Similar Questions**: Dataset often feature questions that, while seemingly similar, include minor variations in wording, options, or context. Inadequately designed deduplication algorithms risk eliminating these nuances, thereby losing valuable elements of the dataset.\n","\n","* **Difficulty in Defining \"Duplicates\"**: Identifying duplicates within the dataset poses a significant challenge, as questions that appear identical might differ in subtle yet crucial ways. These distinctions often represent unique learning opportunities that would be lost through deduplication.\n","\n","---\n"]},{"cell_type":"markdown","metadata":{"id":"TOCspcgXNOav"},"source":["## 5. Top-k sampling\n","\n","Only keep the top k samples with the most tokens.\n","\n","---\n","\n","### Decision on \"Top-k Sampling\" for Our Dataset\n","\n","\n","We have decided against employing \"Top-k sampling\" to select only the top k samples with the most tokens in our dataset. This approach does not align with the core objectives of dataset development for several critical reasons:\n","\n","\n","**Practical Considerations**\n","\n","* Favoring question length over substance could detract from the dataset's quality, as longer questions do not necessarily equate to higher educational value. Succinct yet profound questions are typically the most beneficial and stimulating for learners.\n","\n","* Given these considerations, we conclude that \"Top-k sampling,\" which prioritizes token count, falls short of fulfilling the requirements of our dataset. The true merit of a valuable dataset resides in its diverse and balanced assortment of topics and difficulty levels, not merely in question length. This philosophy ensures our dataset remains versatile and effective across various educational and machine learning applications.\n","---"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":244,"referenced_widgets":["a6956d1103da4062823dc056ab9330a4","d15ec587e6da46a3b3a48327c99605a0","1fa91e6a9fee4b99ac0f6085003b1a6f","08d92d37c77343668f4745c7fb68b3b7","322f4b5be7844621b1faf996f99ea482","5eed2f994425469c9c00b961c43149e8","4d255c8d3f764ca2ad1314ee3c01273b","1c0366becc344dddbb5f933284af302d","eadcd4545c4d49ef9067972cf0bcd3bd","b9056c395f1f48689c059bff61656f46","29be20ebe8c84270bcd5494c4ff6b8b2","f2971406394c4e0580262f575b2aab56","1d9595ffd69f4c73a42e27a46c093623","0f59bb4e535942ceb234e38e4cb017d6","d51602377cdb4fd5a23ef79ddf799118","0b3bce0b92c040a9b76ddad2b07b216f","40eb69eea651428885caa2124dfca968","6e5b0f16547047b394c300b0997a3619","0fb6a225115f4b58a1169d5c4706fbac","4c3dd269401a4fe4a71a98f3f38110b0","e100b1ec01264de39c40ccba0656f914","12c8984929ff4c9bbf5ba7c9ee2f40c5","79cd790b766e4f328030d53b7fef84e4","489bb009a332405d93a646b978d8c951","6cfee80cccd04bdf9991414140ec2987","79a5cb1992a84140abb94da72bf0002a","76c48d31148b4a7a822a284a77dec0e8","5b2f81b887944852a1b641f4c971c514","c4d9e21d4cf84f97a1fb3ad543c64c3a","ccea2b134d6e426cab3c7badc6bebbb0","7eaed3f949f646ac81f8d5cb3aff1e87","b5ef43208ed743b08381f2f1aa60bfb6","db729f357d4a4a6dbdb5fae60e7496e3","5890a9b1ff6343c3a00b362be5b8cbd2","d98b4dd55d364f65942c78bc52661a00","672e1e89a6ca4226a9d582e3d24fcd30","e6ff14f7fbcd409497436400a2ec20a1","f2d1a1473c1f4c9b8d257321f20bb271","d6429fa009aa40658e805ba0ebdd863e","6baea04b2c9b49c5973407433942c38c","0811c93087fb42de829504dd58438549","ad7b29ef600c42a685f25e46062d1d55","58d0e1f247434374b64169485dde959b","5c18240e2a39456c98fd3d6d2baf2995","f3cada5a04ff4d86bcd9fec05ccd06f8","f58734e5cdfa4ac1a08f1a728afe8548","bdc222b8db974d7db527d048bd85f606","1440ddbc8f1c49779b3cbc711fbb1ef8","9f1528b09e284ce896d331ea24c52687","1940a355bf42422daa21ce7a709bada6","535362fa80414ef18cb9c6dc62b350d1","4791db5f77c142c2ba93799d3c87e0b1","a294fc0485f84deabf31609b95891d19","0b094167d51140f8847b1f0c095d18ec","8669b3af0f3041eca1f7f168afd96d89","1315bc7503944ce8830784d65e857bbc","3bf91aa087ad4390bed96ce5a1f380bb","1e75de6e5c384ee082a57f3bcf73e585","5f2da726260e4e1c8d6837d1dd5e3664","ea12b6202d9440ccbeb5fd11da76cc02","3cdfdcbd568f4427b41749226aea61eb","c778d23e7f284e5c8d89985cb7739291","329e05fca23d4e79bd3dc1c9d6268f7d","740e6aaf38394c149a98a6ec7c9212ee","d1e52ecfc5f5475a818f8816c724891d","7373f216800f409eae9ea127d46f3977","c3deeae4017a4579af28a74c2414b76f","a24f5e3c1eaa45dfb67bd7577a6f2238","05eadb782dc549c7b289473a9255ad26","2bbca5dc529a49c18e6891ccb5eff645","1dcada1289f04e389800a5ede5f37e19","38066a02c95344468b6ea715580f40b3"]},"id":"pj1b5S_68KB0","outputId":"84413cb5-038e-4f5c-a2c6-8e70b6fb64d2"},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"c3deeae4017a4579af28a74c2414b76f","version_major":2,"version_minor":0},"text/plain":["Uploading the dataset shards: 0%| | 0/1 [00:00, ?it/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"a24f5e3c1eaa45dfb67bd7577a6f2238","version_major":2,"version_minor":0},"text/plain":["Creating parquet from Arrow format: 0%| | 0/1 [00:00, ?ba/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"05eadb782dc549c7b289473a9255ad26","version_major":2,"version_minor":0},"text/plain":["Uploading the dataset shards: 0%| | 0/1 [00:00, ?it/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"2bbca5dc529a49c18e6891ccb5eff645","version_major":2,"version_minor":0},"text/plain":["Creating parquet from Arrow format: 0%| | 0/1 [00:00, ?ba/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"1dcada1289f04e389800a5ede5f37e19","version_major":2,"version_minor":0},"text/plain":["Uploading the dataset shards: 0%| | 0/1 [00:00, ?it/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"38066a02c95344468b6ea715580f40b3","version_major":2,"version_minor":0},"text/plain":["Creating parquet from Arrow format: 0%| | 0/1 [00:00, ?ba/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"text/plain":["CommitInfo(commit_url='https://huggingface.co/datasets/ssoh/sum_n_qna_dataset/commit/8f46f92190bcd1be846e61fb97f6dec9c4296879', commit_message='Upload dataset', commit_description='', oid='8f46f92190bcd1be846e61fb97f6dec9c4296879', pr_url=None, pr_revision=None, pr_num=None)"]},"execution_count":31,"metadata":{},"output_type":"execute_result"}],"source":["# @title\n","# Push to Hugging Face Hub\n","dataset.push_to_hub(\"ssoh/sum_n_qna_dataset\")"]},{"cell_type":"markdown","source":["---"],"metadata":{"id":"03vf5B_3v2L7"}},{"cell_type":"markdown","metadata":{"id":"OSHlAbqzDFDq"},"source":["# Fine-Tuning the Llama 2 Model\n","\n","Our approach employs Supervised Fine-Tuning (SFT) to optimize the Llama 2 model. Key details of this process include:\n","\n","- **Supervised Fine-Tuning (SFT)**: This method involves training the model on a curated dataset comprising specific instructions paired with corresponding responses. The primary objective is to fine-tune the model's parameters, effectively reducing the discrepancy between its generated answers and the provided ground-truth responses. These ground-truth responses serve as labels, guiding the model towards more accurate and contextually appropriate outputs.\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"GLXwJqbjtPho"},"outputs":[],"source":["# Install necessary libraries for the project: transformers, datasets, accelerate, peft, trl, bitsandbytes, wandb and optuna\n","!pip install -q -U transformers datasets accelerate peft trl bitsandbytes optuna wandb"]},{"cell_type":"code","execution_count":null,"metadata":{"executionInfo":{"elapsed":16567,"status":"ok","timestamp":1707717596596,"user":{"displayName":"szehanz","userId":"16137883221268059572"},"user_tz":-480},"id":"nAMzy_0FtaUZ","outputId":"bb94c46a-e798-4acb-ac67-1991a493fd9a"},"outputs":[{"name":"stderr","output_type":"stream","text":["2024-02-19 17:04:21.290747: I tensorflow/core/util/port.cc:110] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n","2024-02-19 17:04:21.330596: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n","To enable the following instructions: SSE4.1 SSE4.2 AVX AVX2 AVX512F AVX512_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n"]}],"source":["# Operating System and Core Machine Learning Libraries\n","import os\n","import torch, transformers\n","\n","\n","# Dataset Handling\n","from datasets import load_dataset\n","\n","# Transformer Models and Tokenization\n","from transformers import (\n"," AutoModelForCausalLM,\n"," AutoTokenizer,\n"," BitsAndBytesConfig, # Configuration class for BitsAndBytes optimization\n"," TrainingArguments, # Class for setting up training hyperparameters\n"," pipeline, # Utility for easy model inference deployment\n"," EarlyStoppingCallback,\n"," Trainer\n",")\n","\n","# Advanced Fine-Tuning and Optimization Techniques\n","from peft import get_peft_model, LoraConfig, PeftModel, prepare_model_for_kbit_training # Classes for Parameter-efficient Fine-tuning (PEFT)\n","from trl import SFTTrainer # Trainer class for Supervised Fine-Tuning (SFT) within Text Reinforcement Learning (TRL) framework\n","\n","from datasets import DatasetDict\n","\n","import optuna\n","\n","import shutil\n","\n","import warnings\n","\n","# Filter out the specific warning\n","warnings.filterwarnings(\"ignore\", category=UserWarning, module=\"torch.utils.checkpoint\")\n","\n","from datetime import datetime\n","\n","import wandb\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":145,"referenced_widgets":["c3d08bc595a74c3180a7a83afc569584","11b88a389a4042b5ad5ba06f51ac22e0","5e5b95c9801443cdbce9c8e629c33589","3e4a06b9b13444e3b82e0c3c26e17b8f","6430379d01874ec3a7cf9fea59c42914","21556be54ed34b15b909bf8e7b8fd93a","cad60b6f14f249c187d573dd3a4428e0","2cb9cfbde1e0483c97a2c531e0034adf","de756c426cf0492bb122a45b94d4bbe7","29f303aa6ac8464aa91124c3fe659379","3076e4abb7fe427fa4fccb43e9f3371e","f91ebc43c1344e8688e2eeb2771c7b65","ea00aa1eb73949fc94083f1d31372915","2dce1978d19e4de3a6a1b1cef6ed518f","e81c501824f94e7d839684fafbc65b31","b8113970ea7245e9890221d4e4cf5e8e","d3224d16458249a3bfd29253c2d6a86f","6edf40f558f54d8b82d949f83557d609","08400a144d3c497a94ae4d84e72a1067","976a3440d2c3423c8be835b0d6f56492","541ef20ab6f34337a2d6d20098f6fef5","fe46e1cf697f4b1fab764104be32da95","2924e96aa10346efb39684e5369e2170","b64f26ac024c46eabfc4728586369130","b0f0ac261e364edd99d7b75e747e2c47","ff9f726db3434e3184e723d5da884d0a","f81ada25e7ff4f5da6b3f6c6e73590e4","62f1cf19fe204aa4a424248e807ce061","bce8d1501218410ba8b042aeb3f0fc26","405603de026d484ab283f053f4b17c6d","a7ef8ff133144d4b9817800e5b4739a4","ba4cf32b2f71428282721e7818b34a5a","49bf9fa57c4b47e79358032afb163a0a","47759f34ca484a2ea2106a2b474a26b5"]},"executionInfo":{"elapsed":23,"status":"ok","timestamp":1707717596597,"user":{"displayName":"szehanz","userId":"16137883221268059572"},"user_tz":-480},"id":"_ehhhUGo5APj","outputId":"f6fee22f-cbb5-452c-b5d2-daa4c7120ef4"},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"47759f34ca484a2ea2106a2b474a26b5","version_major":2,"version_minor":0},"text/plain":["VBox(children=(HTML(value='
"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.006 MB uploaded\\r'), FloatProgress(value=1.0, max=1.0)))"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run floating-rat-21 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/izssxy0g Synced 6 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_171830-izssxy0g/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Successfully finished last run (ID:izssxy0g). Initializing new run: "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"c712af4c6bc74fe3bb82ebf0731faab8","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.01111313893343322, max=1.0)…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_184243-wdbp5xpl"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run abundant-moon-22 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/wdbp5xpl"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"96be26e86d7640f39dc7a381f9e8ac87","version_major":2,"version_minor":0},"text/plain":["Map: 0%| | 0/448 [00:00, ? examples/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"f61d0aae58d0414898a1543855aa90b5","version_major":2,"version_minor":0},"text/plain":["Map: 0%| | 0/56 [00:00, ? examples/s]"]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...\n"]},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.006 MB uploaded\\r'), FloatProgress(value=1.0, max=1.0)))"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▂▂▁▁▁▁▁▁▁
eval/runtime
▁▅▇▇█▇▇█▇▇▇
eval/samples_per_second
█▄▂▂▁▂▂▁▂▂▂
eval/steps_per_second
█▅▂▂▁▂▂▁▂▂▃
eval_loss
▁
train/epoch
▁▁▂▂▃▃▃▃▄▄▅▅▆▆▆▆▇▇████
train/global_step
▁▁▂▂▃▃▃▃▄▄▅▅▆▆▆▆▇▇█████
train/learning_rate
█▇▆▆▅▄▃▃▂▁
train/loss
█▄▂▂▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.60271
eval/runtime
7.0512
eval/samples_per_second
7.942
eval/steps_per_second
0.993
eval_loss
0.60271
train/epoch
7.14
train/global_step
100
train/learning_rate
4e-05
train/loss
0.44
train/total_flos
3478708041547776.0
train/train_loss
0.74873
train/train_runtime
1107.7796
train/train_samples_per_second
3.235
train/train_steps_per_second
0.101
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run abundant-moon-22 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/wdbp5xpl Synced 6 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_184243-wdbp5xpl/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 19:01:36,909] Trial 0 finished with value: 0.6027135848999023 and parameters: {'learning_rate': 0.0004025111363668074, 'num_train_epochs': 8, 'per_device_train_batch_size': 32, 'warmup_steps': 3}. Best is trial 0 with value: 0.6027135848999023.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"8d7ed437bb30461db50fd93c2f619150","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011112901077528175, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_190136-zbvi8cl0"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run thriving-fireworks-23 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/zbvi8cl0"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"76ef17e7b1bc40cfac453df2d5f9979b","version_major":2,"version_minor":0},"text/plain":["Map: 0%| | 0/448 [00:00, ? examples/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"af68d7f99f184edbb84f34b5f8bbe616","version_major":2,"version_minor":0},"text/plain":["Map: 0%| | 0/56 [00:00, ? examples/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.17041999774800135, max=1.…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▃▂▂▁▁▁▁▁▁▁▁▁▁
eval/runtime
▁▄▅▅▆▆█▆▆▇▆▆█▅▅
eval/samples_per_second
█▅▄▄▃▃▁▃▃▂▃▃▁▄▄
eval/steps_per_second
█▅▄▅▃▄▂▃▄▂▃▃▁▄▄
eval_loss
▁
train/epoch
▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▆▆▆▆▇▇▇▇████
train/global_step
▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▆▆▆▆▇▇▇▇█████
train/learning_rate
█▇▇▆▆▅▅▄▄▃▃▂▂▁
train/loss
█▄▃▂▂▂▁▁▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.5983
eval/runtime
7.0249
eval/samples_per_second
7.972
eval/steps_per_second
0.996
eval_loss
0.5983
train/epoch
5.0
train/global_step
140
train/learning_rate
0.00012
train/loss
0.4829
train/total_flos
2170063307145216.0
train/train_loss
0.74847
train/train_runtime
856.9078
train/train_samples_per_second
4.182
train/train_steps_per_second
0.261
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run thriving-fireworks-23 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/zbvi8cl0 Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_190136-zbvi8cl0/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 19:16:12,165] Trial 1 finished with value: 0.5983005166053772 and parameters: {'learning_rate': 0.0003028497239265799, 'num_train_epochs': 8, 'per_device_train_batch_size': 16, 'warmup_steps': 5}. Best is trial 1 with value: 0.5983005166053772.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"532aab0877da4d6b86a40ad31df51c38","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113190833323945, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_191612-pzfniief"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run dazzling-dragon-24 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/pzfniief"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.034 MB of 0.034 MB uploaded\\r'), FloatProgress(value=1.0, max=1.0)))"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▃▂▁▁▁▁▁▁▁▁
eval/runtime
▁▆▇█▇▅▇▇▆▄▇▆
eval/samples_per_second
█▃▂▁▂▄▂▃▃▅▂▃
eval/steps_per_second
█▃▂▁▂▄▂▂▃▅▂▃
eval_loss
▁
train/epoch
▁▁▂▂▂▂▃▃▄▄▄▄▅▅▆▆▇▇▇▇████
train/global_step
▁▁▂▂▂▂▃▃▄▄▅▅▅▅▆▆▇▇▇▇█████
train/learning_rate
█▇▇▆▅▄▄▃▂▂▁
train/loss
█▄▃▂▂▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.5898
eval/runtime
7.0266
eval/samples_per_second
7.97
eval/steps_per_second
0.996
eval_loss
0.5898
train/epoch
3.93
train/global_step
110
train/learning_rate
0.00014
train/loss
0.4727
train/total_flos
1713943443406848.0
train/train_loss
0.79161
train/train_runtime
675.7172
train/train_samples_per_second
3.978
train/train_steps_per_second
0.249
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run dazzling-dragon-24 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/pzfniief Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_191612-pzfniief/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 19:27:45,486] Trial 2 finished with value: 0.5898026823997498 and parameters: {'learning_rate': 0.00040925708738231623, 'num_train_epochs': 6, 'per_device_train_batch_size': 16, 'warmup_steps': 4}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"edd5a710ce3c41a6a72989df0b9696ee","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113297299986395, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_192745-srz53111"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run legendary-firecracker-25 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/srz53111"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.17041103603603602, max=1.…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▄▂▂▁▁▁▁▁▁▁▁
eval/runtime
▁▅▃▅▇▄▅▄▅█▆▂
eval/samples_per_second
█▄▆▃▂▅▃▅▄▁▃▇
eval/steps_per_second
█▄▅▄▂▅▄▅▄▁▃▆
eval_loss
▁
train/epoch
▁▁▂▂▂▂▃▃▄▄▄▄▅▅▆▆▆▆▇▇████
train/global_step
▁▁▂▂▂▂▃▃▄▄▄▄▅▅▆▆▆▆▇▇█████
train/learning_rate
█▇▇▆▅▄▄▃▂▂▁
train/loss
█▅▃▂▂▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.61139
eval/runtime
7.018
eval/samples_per_second
7.98
eval/steps_per_second
0.997
eval_loss
0.61139
train/epoch
8.0
train/global_step
112
train/learning_rate
0.0
train/loss
0.4414
train/total_flos
3887818337157120.0
train/train_loss
0.80241
train/train_runtime
1240.3127
train/train_samples_per_second
2.89
train/train_steps_per_second
0.09
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run legendary-firecracker-25 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/srz53111 Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_192745-srz53111/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 19:48:44,337] Trial 3 finished with value: 0.6113868951797485 and parameters: {'learning_rate': 0.00021804269178716187, 'num_train_epochs': 8, 'per_device_train_batch_size': 32, 'warmup_steps': 3}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"d19268ffc4064e02bd0a33b8b30bfc2b","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113139222207894, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_194844-o101oodx"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run abundant-wonton-26 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/o101oodx"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.17057929403816924, max=1.…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▃▂▂▁▁▁▁▁▁▁▁▁▁
eval/runtime
▁▄▄▅▅▇█▆▅▇▆▅▆▅▂
eval/samples_per_second
█▅▅▄▄▂▁▃▄▂▃▄▃▄▇
eval/steps_per_second
█▅▅▄▄▂▁▂▄▂▃▄▃▄▇
eval_loss
▁
train/epoch
���▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▆▆▆▆▇▇▇▇████
train/global_step
▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▆▆▆▆▇▇▇▇█████
train/learning_rate
█▇▇▆▆▅▅▄▄▃▃▂▂▁
train/loss
█▄▃▂▂▂▁▁▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.59633
eval/runtime
6.9881
eval/samples_per_second
8.014
eval/steps_per_second
1.002
eval_loss
0.59633
train/epoch
5.0
train/global_step
140
train/learning_rate
0.00012
train/loss
0.4825
train/total_flos
2170063307145216.0
train/train_loss
0.74968
train/train_runtime
855.8976
train/train_samples_per_second
4.187
train/train_steps_per_second
0.262
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run abundant-wonton-26 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/o101oodx Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_194844-o101oodx/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 20:03:18,557] Trial 4 finished with value: 0.5963263511657715 and parameters: {'learning_rate': 0.0003062471523433562, 'num_train_epochs': 8, 'per_device_train_batch_size': 16, 'warmup_steps': 4}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"c6b42332b56944d189e15ca4507bb147","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113268544431777, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_200318-1kupsvst"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run bright-pig-27 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/1kupsvst"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.023 MB uploaded\\r'), FloatProgress(value=0.25586993243243245, max=1.…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▃▂▂▁▁▁▁▁▁▁▁▁▁
eval/runtime
▁▅▇▄▅▆▄▇▆██▇█▅▃
eval/samples_per_second
█▄▂▄▄▃▅▂▃▁▁▂▁▄▆
eval/steps_per_second
█▃▂▄▃▂▅▂▂▁▁▁▁▄▅
eval_loss
▁
train/epoch
▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▆▆▆▆▇▇▇▇████
train/global_step
▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▆▆▆▆▇▇▇▇█████
train/learning_rate
█▇▇▆▆▅▅▄▄▃▃▂▂▁
train/loss
█▄▃▂▂▂▁▁▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.59246
eval/runtime
6.9975
eval/samples_per_second
8.003
eval/steps_per_second
1.0
eval_loss
0.59246
train/epoch
5.0
train/global_step
140
train/learning_rate
6e-05
train/loss
0.4697
train/total_flos
2170063307145216.0
train/train_loss
0.73962
train/train_runtime
855.0423
train/train_samples_per_second
3.144
train/train_steps_per_second
0.196
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run bright-pig-27 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/1kupsvst Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_200318-1kupsvst/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 20:17:52,091] Trial 5 finished with value: 0.5924574732780457 and parameters: {'learning_rate': 0.0003549720190405869, 'num_train_epochs': 6, 'per_device_train_batch_size': 16, 'warmup_steps': 5}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"63a4222d599e4da4890c36a23ae52a3a","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011112871322095291, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_201752-hvk8kkmo"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run red-chrysanthemum-28 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/hvk8kkmo"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.022 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.6506108890265188, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▂▁▁▁▁▁▁
eval/runtime
▁▂▃▁▇▅█▇▇
eval/samples_per_second
█▇▆█▂▄▁▂▂
eval/steps_per_second
█▆▆█▃▄▁▃▃
eval_loss
▁
train/epoch
▁▁▂▂▃▃▄▄▅▅▆▆▇▇████
train/global_step
▁▁▂▂▃▃▄▄▅▅▆▆▇▇█████
train/learning_rate
█▇▆▅▄▃▂▁
train/loss
█▄▂▂▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.618
eval/runtime
7.029
eval/samples_per_second
7.967
eval/steps_per_second
0.996
eval_loss
0.618
train/epoch
6.0
train/global_step
84
train/learning_rate
2e-05
train/loss
0.4703
train/total_flos
2927298512683008.0
train/train_loss
0.87718
train/train_runtime
928.7795
train/train_samples_per_second
2.894
train/train_steps_per_second
0.09
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run red-chrysanthemum-28 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/hvk8kkmo Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_201752-hvk8kkmo/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 20:33:38,930] Trial 6 finished with value: 0.6180019974708557 and parameters: {'learning_rate': 0.00029993812811393003, 'num_train_epochs': 6, 'per_device_train_batch_size': 32, 'warmup_steps': 5}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"5c842ce8d6714182920a1750adb3d273","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113082922141379, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_203338-u9an5iy8"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run red-wish-29 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/u9an5iy8"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.034 MB of 0.034 MB uploaded\\r'), FloatProgress(value=1.0, max=1.0)))"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▂▁▁▁
eval/runtime
▁▆█▄▅▃
eval/samples_per_second
█▃▁▄▄▆
eval/steps_per_second
█▃▁▅▅▆
eval_loss
▁
train/epoch
▁▁▃▃▄▄▆▆▇▇██
train/global_step
▁▁▃▃▄▄▆▆▇▇███
train/learning_rate
█▆▅▃▁
train/loss
█▃▂▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.64278
eval/runtime
7.0018
eval/samples_per_second
7.998
eval/steps_per_second
1.0
eval_loss
0.64278
train/epoch
4.0
train/global_step
56
train/learning_rate
6e-05
train/loss
0.5395
train/total_flos
1969319745945600.0
train/train_loss
0.94465
train/train_runtime
619.7752
train/train_samples_per_second
2.891
train/train_steps_per_second
0.09
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run red-wish-29 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/u9an5iy8 Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_203338-u9an5iy8/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 20:44:20,345] Trial 7 finished with value: 0.6427821516990662 and parameters: {'learning_rate': 0.0004921796551065912, 'num_train_epochs': 4, 'per_device_train_batch_size': 32, 'warmup_steps': 3}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"2cfb2293dad348b985a23b767d53ace8","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113233355637122, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_204420-k8hrtsr1"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run sparkling-peony-30 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/k8hrtsr1"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.170631457447707, max=1.0)…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▂▁▁▁
eval/runtime
▁▃▆▅█▄
eval/samples_per_second
█▆▃▄▁▅
eval/steps_per_second
█▆▃▄▁▅
eval_loss
▁
train/epoch
▁▁▃▃▄▄▆▆▇▇██
train/global_step
▁▁▃▃▄▄▆▆▇▇███
train/learning_rate
█▆▅▃▁
train/loss
█▄▂▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.67955
eval/runtime
7.0075
eval/samples_per_second
7.991
eval/steps_per_second
0.999
eval_loss
0.67955
train/epoch
4.0
train/global_step
56
train/learning_rate
4e-05
train/loss
0.595
train/total_flos
1969319745945600.0
train/train_loss
1.08562
train/train_runtime
620.2921
train/train_samples_per_second
2.889
train/train_steps_per_second
0.09
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run sparkling-peony-30 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/k8hrtsr1 Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_204420-k8hrtsr1/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 20:54:59,931] Trial 8 finished with value: 0.679550051689148 and parameters: {'learning_rate': 0.0002997058981392026, 'num_train_epochs': 4, 'per_device_train_batch_size': 32, 'warmup_steps': 5}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"15cedcbf21794e1895357c52edcbef03","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.01111316335575086, max=1.0)…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_205459-iosmgelq"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run abundant-chrysanthemum-31 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/iosmgelq"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.012 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.3512258282433079, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▃▂▂▁▁▁▁▁▁▁
eval/runtime
▁▆▅▆█▇██▇▇▆▅
eval/samples_per_second
█▃▃▃▁▂▁▁▂▂▃▄
eval/steps_per_second
█▃▄▃▁▂▂▂▂▂▃▄
eval_loss
▁
train/epoch
▁▁▂▂▂▂▃▃▄▄▄▄▅▅▆▆▇▇▇▇████
train/global_step
▁▁▂▂▂▂▃▃▄▄▅��▅▅▆▆▇▇▇▇█████
train/learning_rate
█▇▇▆▅▅▄▃▂▂▁
train/loss
█▄▃▂▂▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.60066
eval/runtime
6.9977
eval/samples_per_second
8.003
eval/steps_per_second
1.0
eval_loss
0.60066
train/epoch
3.93
train/global_step
110
train/learning_rate
1e-05
train/loss
0.4804
train/total_flos
1713943443406848.0
train/train_loss
0.83532
train/train_runtime
674.6173
train/train_samples_per_second
2.656
train/train_steps_per_second
0.166
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run abundant-chrysanthemum-31 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/iosmgelq Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_205459-iosmgelq/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 21:06:32,382] Trial 9 finished with value: 0.6006569266319275 and parameters: {'learning_rate': 0.0002981933140416747, 'num_train_epochs': 4, 'per_device_train_batch_size': 16, 'warmup_steps': 5}. Best is trial 2 with value: 0.5898026823997498.\n"]}],"source":["def objective(trial):\n","\n"," # Define hyperparameters outside the wandb.init to use them later in the code\n"," learning_rate = trial.suggest_float('learning_rate', 2e-4, 5e-4, log=True)\n"," num_train_epochs = trial.suggest_categorical('num_train_epochs', [4, 6, 8])\n"," per_device_train_batch_size = trial.suggest_categorical('per_device_train_batch_size', [16, 32])\n"," warmup_steps = trial.suggest_int('warmup_steps', 3, 5)\n","\n"," wandb.init(\n"," project=\"Education-Chatbot-Optimization\",\n"," entity=\"szehanz\",\n"," group=\"optuna-optimization\",\n"," job_type=\"hyperparameter_search\",\n"," reinit=True,\n"," config={\n"," \"learning_rate\": learning_rate,\n"," \"num_train_epochs\": num_train_epochs,\n"," \"per_device_train_batch_size\": per_device_train_batch_size,\n"," \"warmup_steps\": warmup_steps\n"," }\n"," )\n","\n"," # Format the current date and time\n"," current_time = datetime.now().strftime(\"%Y%m%d-%H%M%S\")\n"," output_dir = f\"train_out_dir_{current_time}\" # Append the current date and time to the directory name\n","\n"," # Create the output directory\n"," os.makedirs(output_dir, exist_ok=True) # Using exist_ok=True to avoid error if the directory already exists\n","\n","\n"," # Define TrainingArguments with the suggested hyperparameters\n"," training_args = TrainingArguments(\n"," output_dir=output_dir, # Directory for saving output models and checkpoints.\n"," save_strategy=\"steps\", # Save model checkpoints at regular step intervals.\n"," save_steps=10, # Save model checkpoints every 10 steps.\n"," learning_rate=learning_rate, # Initial learning rate for the optimizer.\n"," per_device_train_batch_size=per_device_train_batch_size, # Batch size per device during training.\n"," per_device_eval_batch_size=8, # Batch size per device during evaluation.\n"," num_train_epochs=num_train_epochs, # Total number of training epochs.\n"," warmup_steps=warmup_steps, # Number of warmup steps for the learning rate scheduler.\n"," evaluation_strategy='steps', # Perform evaluation at regular step intervals.\n"," eval_steps=10, # Perform evaluation every 10 steps.\n"," logging_steps=10,\n"," optim='paged_adamw_8bit', # Specifies the optimizer to use.\n"," lr_scheduler_type='linear', # Type of learning rate scheduler.\n"," gradient_accumulation_steps=1, # Number of steps to accumulate gradients before performing an update.\n"," load_best_model_at_end=True, # Load the best model based on evaluation metric at the end of training.\n"," report_to='wandb', # Disable automatic integrations with external reporting tools.\n"," )\n","\n","\n"," # Initialize the Trainer with early stopping callback inside the objective function\n"," trainer = SFTTrainer(\n"," model=model, # Ensure a function or a mechanism to initialize your model\n"," train_dataset=train_dataset,\n"," eval_dataset=val_dataset,\n"," peft_config=peft_config,\n"," dataset_text_field=\"instruction\",\n"," tokenizer=tokenizer,\n"," args=training_args,\n"," max_seq_length=4096,\n"," callbacks=[EarlyStoppingCallback(early_stopping_patience=3)],\n"," )\n","\n"," # Train the model and evaluate within the objective function\n"," trainer.train()\n"," eval_result = trainer.evaluate()\n","\n"," # Log the primary metric to WandB\n"," wandb.log({\"eval_loss\": eval_result[\"eval_loss\"]})\n","\n"," # Finish the WandB run for this trial\n"," wandb.finish()\n","\n"," # Return the metric to be optimized\n"," return eval_result[\"eval_loss\"]\n","\n","\n","# Run the optimization\n","study = optuna.create_study(direction='minimize')\n","study.optimize(objective, n_trials=10)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"fmdlQTVSHT8e","outputId":"a2935a56-5cad-4dbc-c55c-53b3b5ad1368"},"outputs":[{"name":"stdout","output_type":"stream","text":["Best trial:\n"," Value: 0.5898026823997498\n"," Params: \n"," learning_rate: 0.00040925708738231623\n"," num_train_epochs: 6\n"," per_device_train_batch_size: 16\n"," warmup_steps: 4\n"]}],"source":["# Best trial results\n","print(\"Best trial:\")\n","print(f\" Value: {study.best_trial.value}\")\n","print(\" Params: \")\n","for key, value in study.best_trial.params.items():\n"," print(f\" {key}: {value}\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"mKlA_ahVHT8e","outputId":"6365a674-b011-48bb-94ea-7aa9d657d323","colab":{"referenced_widgets":[""]}},"outputs":[{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_210737-q16rpssr"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run fortuitous-fish-3 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/huggingface"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/huggingface/runs/q16rpssr"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," \n"," \n"," [168/168 16:51, Epoch 6/6]\n","
\n","
\n"," \n","
\n","
Step
\n","
Training Loss
\n","
Validation Loss
\n","
\n"," \n"," \n","
\n","
10
\n","
2.218400
\n","
1.534913
\n","
\n","
\n","
20
\n","
1.136500
\n","
0.895845
\n","
\n","
\n","
30
\n","
0.955600
\n","
0.814537
\n","
\n","
\n","
40
\n","
0.707400
\n","
0.680818
\n","
\n","
\n","
50
\n","
0.629700
\n","
0.656619
\n","
\n","
\n","
60
\n","
0.556900
\n","
0.624320
\n","
\n","
\n","
70
\n","
0.532100
\n","
0.632881
\n","
\n","
\n","
80
\n","
0.524000
\n","
0.591038
\n","
\n","
\n","
90
\n","
0.476200
\n","
0.599967
\n","
\n","
\n","
100
\n","
0.487800
\n","
0.594422
\n","
\n","
\n","
110
\n","
0.475600
\n","
0.595004
\n","
\n","
\n","
120
\n","
0.478700
\n","
0.627798
\n","
\n","
\n","
130
\n","
0.426700
\n","
0.623343
\n","
\n","
\n","
140
\n","
0.471200
\n","
0.604500
\n","
\n","
\n","
150
\n","
0.420800
\n","
0.611532
\n","
\n","
\n","
160
\n","
0.440900
\n","
0.603333
\n","
\n"," \n","
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.012 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.35244443189199876, max=1.…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▃▂▁▁▁▁▁▁▁▁▁▁▁▁
eval/runtime
▁▇▅▆▆▇▇█▇██▇█▇▇█
eval/samples_per_second
█▂▄▃▃▂▂▁▂▁▁▂▁▂▂▁
eval/steps_per_second
█▂▄▃▃▂▂▁▂▁▁▂▁▂▂▁
train/epoch
▁▁▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▅▅▆▆▆▆▇▇▇▇███
train/global_step
▁▁▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▅▅▆▆▆▆▇▇▇▇███
train/learning_rate
██▇▇▆▆▅▅▄▄▃▃▂▂▁▁
train/loss
█▄▃▂▂▂▁▁▁▁▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.60333
eval/runtime
7.0342
eval/samples_per_second
7.961
eval/steps_per_second
0.995
train/epoch
6.0
train/global_step
168
train/learning_rate
2e-05
train/loss
0.4409
train/total_flos
2600137329082368.0
train/train_loss
0.67181
train/train_runtime
1023.9774
train/train_samples_per_second
2.625
train/train_steps_per_second
0.164
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run fortuitous-fish-3 at: https://wandb.ai/szehanz/huggingface/runs/q16rpssr Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_210737-q16rpssr/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"}],"source":["# Use best hyperparameters from the study\n","best_trial = study.best_trial\n","\n","best_learning_rate = best_trial.params['learning_rate']\n","best_num_train_epochs = best_trial.params['num_train_epochs']\n","best_per_device_train_batch_size = best_trial.params['per_device_train_batch_size']\n","best_warmup_steps = best_trial.params['warmup_steps']\n","\n","\n","# Define TrainingArguments with the best hyperparameters for retraining\n","best_training_args = TrainingArguments(\n"," output_dir=\"best_train_out_dir\",\n"," save_strategy=\"steps\",\n"," save_steps=10,\n"," learning_rate=best_learning_rate,\n"," per_device_train_batch_size=best_per_device_train_batch_size,\n"," per_device_eval_batch_size=8,\n"," num_train_epochs=best_num_train_epochs,\n"," warmup_steps=best_warmup_steps,\n"," evaluation_strategy='steps',\n"," eval_steps=10,\n"," logging_steps=10,\n"," optim='paged_adamw_8bit',\n"," lr_scheduler_type='linear',\n"," gradient_accumulation_steps=1,\n"," load_best_model_at_end=True,\n"," report_to='wandb',\n",")\n","\n","# Reinitialize the Trainer with the best hyperparameters\n","best_trainer = SFTTrainer(\n"," model=model,\n"," train_dataset=train_dataset,\n"," eval_dataset=val_dataset,\n"," peft_config=peft_config,\n"," dataset_text_field=\"instruction\",\n"," tokenizer=tokenizer,\n"," args=best_training_args,\n"," max_seq_length=4096,\n",")\n","\n","# Retrain the model with the best hyperparameters\n","best_trainer.train()\n","\n","\n","# Save trained model\n","best_trainer.model.save_pretrained(new_model)\n","\n","# Finish the WandB run for this trial\n","wandb.finish()"]},{"cell_type":"markdown","metadata":{"id":"_g0fB7P9s0ol"},"source":["Merging the base model with the trained adapter."]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"referenced_widgets":["aafec7a64d034e05b1aaf17bb153136b","3a01a0a298124d83a1e4fc74bcae457f"]},"id":"QQn30cRtAZ-P","outputId":"6508be7b-0a96-494e-bd33-d35c5c331f52"},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"3a01a0a298124d83a1e4fc74bcae457f","version_major":2,"version_minor":0},"text/plain":["Loading checkpoint shards: 0%| | 0/3 [00:00, ?it/s]"]},"metadata":{},"output_type":"display_data"}],"source":["# Reload model in FP16 and merge it with LoRA weights\n","model = AutoModelForCausalLM.from_pretrained(\n"," base_model,\n"," low_cpu_mem_usage=True,\n"," return_dict=True,\n"," torch_dtype=torch.float16,\n"," # device_map={\"\": 0},\n",")\n","model = PeftModel.from_pretrained(model, new_model)\n","model = model.merge_and_unload()\n","\n","\n","# Reload tokenizer to save it\n","tokenizer = AutoTokenizer.from_pretrained(base_model, trust_remote_code=True)\n","tokenizer.pad_token = tokenizer.eos_token\n","tokenizer.padding_side = \"right\""]},{"cell_type":"markdown","metadata":{"id":"n4_wCHy_s--5"},"source":["Push the model and tokenizer to the Hugging Face Hub."]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"referenced_widgets":["3202bad4cfeb4061b79b1899b34c72fe","adb2ab52a0b349a6acf355e8e2f86195","4757fe0198c8457691b53c53968b2c57","2f57f07de87446f582fcd4a95a31664a","2d123d7e3900443a808dbf6a7952b726","1bc2e343ca5f467b90153d0d38e89394","081336c65b904925ba18418b85c4d704","4937e797c5ad4014b4ba3dc70f7ee82f","04e88468316c42b3b931149b04261a11","9ed2ef69f2ac48088295ab5a0cbbdbff","b6a5dfa4ace74ea7b3697aa8c45b092f","f290633a52784cb48737e3819bcc649d"]},"id":"x-xPb-_qB0dz","outputId":"c6eb10d5-6b16-46f8-d147-12355811ec32"},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"081336c65b904925ba18418b85c4d704","version_major":2,"version_minor":0},"text/plain":["model-00002-of-00003.safetensors: 0%| | 0.00/4.95G [00:00, ?B/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"4937e797c5ad4014b4ba3dc70f7ee82f","version_major":2,"version_minor":0},"text/plain":["Upload 3 LFS files: 0%| | 0/3 [00:00, ?it/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"04e88468316c42b3b931149b04261a11","version_major":2,"version_minor":0},"text/plain":["model-00001-of-00003.safetensors: 0%| | 0.00/4.94G [00:00, ?B/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"9ed2ef69f2ac48088295ab5a0cbbdbff","version_major":2,"version_minor":0},"text/plain":["model-00003-of-00003.safetensors: 0%| | 0.00/3.59G [00:00, ?B/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"b6a5dfa4ace74ea7b3697aa8c45b092f","version_major":2,"version_minor":0},"text/plain":["README.md: 0%| | 0.00/5.18k [00:00, ?B/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"f290633a52784cb48737e3819bcc649d","version_major":2,"version_minor":0},"text/plain":["tokenizer.model: 0%| | 0.00/500k [00:00, ?B/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"text/plain":["CommitInfo(commit_url='https://huggingface.co/ssoh/llama-2-7b-combined_datasets/commit/59281478fddef1962456031d2a400819882b0d46', commit_message='Upload tokenizer', commit_description='', oid='59281478fddef1962456031d2a400819882b0d46', pr_url=None, pr_revision=None, pr_num=None)"]},"execution_count":14,"metadata":{},"output_type":"execute_result"}],"source":["model.push_to_hub(new_model, use_temp_dir=False)\n","tokenizer.push_to_hub(new_model, use_temp_dir=False)"]},{"cell_type":"markdown","metadata":{"id":"hAS2DuJuC7xR"},"source":["---"]},{"cell_type":"markdown","metadata":{"id":"8y_Rk94LzG7I"},"source":["# Quantize Llama 2 models using GGUF and llama.cpp\n","\n","\n","## Usage\n","\n","* `MODEL_ID`: The ID of the model to quantize (e.g., `ssoh/llama-2-7b-combined_datasets`).\n","* `QUANTIZATION_METHOD`: The quantization method to use.\n","\n","## Quantization methods\n","\n","The names of the quantization methods follow the naming convention: \"q\" + the number of bits + the variant used.\n","\n","We will be using **Q5_K_M** as it preserves most of the model's performance."]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":145,"referenced_widgets":["565b3eac349740cfb4916db8d1256473","d380e9abee2644b1ab1b2e4cdcf3e13f","824a18a3d40d4c34bcb9c37d2c377a79","22f854128d294447ac56fb4f4df7725b","cde8f66d29a5422b84de4e1863046c07","e19b264b02994dfb99c991e27a4a0a6d","6b54fd1f0c2c466395bd5104c3561935","a55670ac1776402bbe039e3dd003517a","490c48e8d09346e1a3d969498148a307","a3da4e46290c4f0b9077e2c2b0fa27b0","1e5096366c47471b8cdb6c4664a92496","a0a1bb1b676c491b9532b7d354b71411","5dc8c40d5a1c417c8fcf0a774ae1d623","f9b325c484cc4c3f9d66372fcf07c6c2","5ea490610878452699d623a468dad12f","c09bd5b327334e1eb3443ede501d8a5f","41244430849a4e569ab79d91937ac02d","3a6b8e559529473fbe0dbef9217e2cd0","d96d95f84ba34af0ba22f7912bd2584f","0361960758384c3cafb2f718c9d4132b","51ad39fd3f32417397c7f0b9d7d2db8f","236c3bfec0d945c6a904edbd95a4fd73","0289cb086a404616aeb40dff47663acb","9beb39e1f1c244f79f06dc27efa9b61d","ae530f75d3ea4ce0ad2d3c130a810311","42d4ae9e7ac4457fbf4c202f5072b547","c835df4cbea04e04ad7a01f61bb7d4f8","805d7e2011be49a4b261c3da7510e85e","d4047a007ebc49d1a45be48e495967f7","775e0d54755842b4ba92454209e2a478","c4ddb468de17447a9f420762d5b0018e","1409ec73b4764cfea08e76b95a6e6752","f13a661f0e6b447e978152be38815949"]},"executionInfo":{"elapsed":562,"status":"ok","timestamp":1707923665837,"user":{"displayName":"szehanz","userId":"16137883221268059572"},"user_tz":-480},"id":"zbCYFOmU7ANP","outputId":"f3ed43e5-78d0-42c0-a4ba-23e83904f0a6"},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"f13a661f0e6b447e978152be38815949","version_major":2,"version_minor":0},"text/plain":["VBox(children=(HTML(value='
=4.35.2 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from -r llama.cpp/./requirements/requirements-convert.txt (line 3)) (4.37.2)\n","Requirement already satisfied: gguf>=0.1.0 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from -r llama.cpp/./requirements/requirements-convert.txt (line 4)) (0.6.0)\n","Requirement already satisfied: protobuf<5.0.0,>=4.21.0 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from -r llama.cpp/./requirements/requirements-convert.txt (line 5)) (4.25.2)\n","Requirement already satisfied: torch~=2.1.1 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from -r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (2.1.2)\n","Requirement already satisfied: filelock in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (3.13.1)\n","Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (0.19.4)\n","Requirement already satisfied: packaging>=20.0 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (23.2)\n","Requirement already satisfied: pyyaml>=5.1 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (6.0.1)\n","Requirement already satisfied: regex!=2019.12.17 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (2023.10.3)\n","Requirement already satisfied: requests in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (2.31.0)\n","Requirement already satisfied: tokenizers<0.19,>=0.14 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (0.15.1)\n","Requirement already satisfied: safetensors>=0.4.1 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (0.4.2)\n","Requirement already satisfied: tqdm>=4.27 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (4.66.1)\n","Requirement already satisfied: typing-extensions in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (4.9.0)\n","Requirement already satisfied: sympy in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (1.12)\n","Requirement already satisfied: networkx in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (3.2.1)\n","Requirement already satisfied: jinja2 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (3.1.3)\n","Requirement already satisfied: fsspec in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (2023.10.0)\n","Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (12.1.105)\n","Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (8.9.2.26)\n","Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (12.1.3.1)\n","Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (11.0.2.54)\n","Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (10.3.2.106)\n","Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (11.4.5.107)\n","Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (12.1.0.106)\n","Requirement already satisfied: nvidia-nccl-cu12==2.18.1 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (2.18.1)\n","Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (12.1.105)\n","Requirement already satisfied: triton==2.1.0 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (2.1.0)\n","Requirement already satisfied: nvidia-nvjitlink-cu12 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from nvidia-cusolver-cu12==11.4.5.107->torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (12.3.101)\n","Requirement already satisfied: MarkupSafe>=2.0 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from jinja2->torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (2.1.5)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from requests->transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from requests->transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (3.6)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from requests->transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (2.2.0)\n","Requirement already satisfied: certifi>=2017.4.17 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from requests->transformers<5.0.0,>=4.35.2->-r llama.cpp/./requirements/requirements-convert.txt (line 3)) (2024.2.2)\n","Requirement already satisfied: mpmath>=0.19 in /home/iot/miniconda3/envs/tensorflow2/lib/python3.11/site-packages (from sympy->torch~=2.1.1->-r llama.cpp/./requirements/requirements-convert-hf-to-gguf.txt (line 2)) (1.3.0)\n","Git LFS initialized.\n","Cloning into 'llama-2-7b-combined_datasets'...\n","remote: Enumerating objects: 18, done.\u001b[K\n","remote: Counting objects: 100% (15/15), done.\u001b[K\n","remote: Compressing objects: 100% (15/15), done.\u001b[K\n","remote: Total 18 (delta 1), reused 0 (delta 0), pack-reused 3\u001b[K\n","Unpacking objects: 100% (18/18), 483.97 KiB | 891.00 KiB/s, done.\n","Filtering content: 100% (4/4), 4.55 GiB | 5.10 MiB/s, done.\n","Encountered 2 file(s) that may not have been copied correctly on Windows:\n","\tmodel-00001-of-00003.safetensors\n","\tmodel-00002-of-00003.safetensors\n","\n","See: `git lfs help smudge` for more details.\n"]}],"source":["# Set up environment and download model for llama.cpp inference.\n","# 1. Define model ID and quantization methods.\n","# 2. Parse model name from MODEL_ID.\n","# 3. Install and build the llama.cpp library with GPU support.\n","# 4. Install Python dependencies from llama.cpp's requirements.\n","# 5. Initialize Git Large File Storage (LFS) for handling large files.\n","# 6. Clone the specified model repository from Hugging Face.\n","\n","\n","MODEL_ID = \"ssoh/llama-2-7b-combined_datasets\"\n","QUANTIZATION_METHODS = [\"q5_k_m\"]\n","MODEL_NAME = MODEL_ID.split('/')[-1]\n","\n","\n","# Install and prepare llama.cpp\n","!git clone https://github.com/ggerganov/llama.cpp\n","!cd llama.cpp && git pull && make clean && LLAMA_CUBLAS=1 make\n","!pip install -r llama.cpp/requirements.txt\n","\n","\n","# Initialize Git LFS for large models\n","!git lfs install\n","\n","\n","# Download the model from Hugging Face\n","!git clone https://huggingface.co/{MODEL_ID}"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"UkMoXHX2DOrO"},"outputs":[],"source":["# # Specify the model ID from which to load the tokenizer\n","# model_id = \"meta-llama/Llama-2-7b-chat-hf\"\n","\n","# # Load the tokenizer associated with the specified model ID\n","# tokenizer = AutoTokenizer.from_pretrained(model_id)\n","\n","# # Create a temporary directory to store all downloaded tokenizer files\n","# temp_save_directory = \"temp_tokenizer_files\"\n","# tokenizer.save_pretrained(temp_save_directory)\n","\n","# # Specify the directory where the tokenizer.model file will be saved permanently\n","# MODEL_NAME = \"llama-2-7b-mini-ibased\"\n","# save_directory = MODEL_NAME\n","\n","# # Create the save directory if it does not exist\n","# os.makedirs(save_directory, exist_ok=True)\n","\n","# # Define the specific filename of the tokenizer we want to retain\n","# tokenizer_filename = \"tokenizer.model\"\n","\n","# # Check for the existence of tokenizer.model in the temporary directory\n","# source_file = os.path.join(temp_save_directory, tokenizer_filename)\n","# destination_file = os.path.join(save_directory, tokenizer_filename)\n","\n","# # Copy the tokenizer.model file to the final directory, if it exists\n","# if os.path.exists(source_file):\n","# shutil.copy(source_file, destination_file)\n","# print(f\"tokenizer.model has been saved in {save_directory}\")\n","# else:\n","# print(\"No tokenizer.model file found in the downloaded tokenizer files.\")\n","\n","# # Remove the temporary directory to clean up unnecessary files\n","# shutil.rmtree(temp_save_directory)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":159906,"status":"ok","timestamp":1707924525074,"user":{"displayName":"szehanz","userId":"16137883221268059572"},"user_tz":-480},"id":"fD24jJxq7t3k","outputId":"9f3bd35b-2232-4baa-be8a-3a8d9205570a"},"outputs":[{"name":"stdout","output_type":"stream","text":["Loading model file llama-2-7b-combined_datasets/model-00001-of-00003.safetensors\n","Loading model file llama-2-7b-combined_datasets/model-00001-of-00003.safetensors\n","Loading model file llama-2-7b-combined_datasets/model-00002-of-00003.safetensors\n","Loading model file llama-2-7b-combined_datasets/model-00003-of-00003.safetensors\n","params = Params(n_vocab=32000, n_embd=4096, n_layer=32, n_ctx=4096, n_ff=11008, n_head=32, n_head_kv=32, n_experts=None, n_experts_used=None, f_norm_eps=1e-05, rope_scaling_type=None, f_rope_freq_base=10000.0, f_rope_scale=None, n_orig_ctx=None, rope_finetuned=None, ftype=, path_model=PosixPath('llama-2-7b-combined_datasets'))\n","Found vocab files: {'tokenizer.model': PosixPath('llama-2-7b-combined_datasets/tokenizer.model'), 'vocab.json': None, 'tokenizer.json': PosixPath('llama-2-7b-combined_datasets/tokenizer.json')}\n","Loading vocab file 'llama-2-7b-combined_datasets/tokenizer.model', type 'spm'\n","Vocab info: \n","Special vocab info: \n","Permuting layer 0\n","Permuting layer 1\n","Permuting layer 2\n","Permuting layer 3\n","Permuting layer 4\n","Permuting layer 5\n","Permuting layer 6\n","Permuting layer 7\n","Permuting layer 8\n","Permuting layer 9\n","Permuting layer 10\n","Permuting layer 11\n","Permuting layer 12\n","Permuting layer 13\n","Permuting layer 14\n","Permuting layer 15\n","Permuting layer 16\n","Permuting layer 17\n","Permuting layer 18\n","Permuting layer 19\n","Permuting layer 20\n","Permuting layer 21\n","Permuting layer 22\n","Permuting layer 23\n","Permuting layer 24\n","Permuting layer 25\n","Permuting layer 26\n","Permuting layer 27\n","Permuting layer 28\n","Permuting layer 29\n","Permuting layer 30\n","Permuting layer 31\n","model.embed_tokens.weight -> token_embd.weight | F16 | [32000, 4096]\n","model.layers.0.input_layernorm.weight -> blk.0.attn_norm.weight | F16 | [4096]\n","model.layers.0.mlp.down_proj.weight -> blk.0.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.0.mlp.gate_proj.weight -> blk.0.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.0.mlp.up_proj.weight -> blk.0.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.0.post_attention_layernorm.weight -> blk.0.ffn_norm.weight | F16 | [4096]\n","model.layers.0.self_attn.k_proj.weight -> blk.0.attn_k.weight | F16 | [4096, 4096]\n","model.layers.0.self_attn.o_proj.weight -> blk.0.attn_output.weight | F16 | [4096, 4096]\n","model.layers.0.self_attn.q_proj.weight -> blk.0.attn_q.weight | F16 | [4096, 4096]\n","model.layers.0.self_attn.v_proj.weight -> blk.0.attn_v.weight | F16 | [4096, 4096]\n","model.layers.1.input_layernorm.weight -> blk.1.attn_norm.weight | F16 | [4096]\n","model.layers.1.mlp.down_proj.weight -> blk.1.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.1.mlp.gate_proj.weight -> blk.1.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.1.mlp.up_proj.weight -> blk.1.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.1.post_attention_layernorm.weight -> blk.1.ffn_norm.weight | F16 | [4096]\n","model.layers.1.self_attn.k_proj.weight -> blk.1.attn_k.weight | F16 | [4096, 4096]\n","model.layers.1.self_attn.o_proj.weight -> blk.1.attn_output.weight | F16 | [4096, 4096]\n","model.layers.1.self_attn.q_proj.weight -> blk.1.attn_q.weight | F16 | [4096, 4096]\n","model.layers.1.self_attn.v_proj.weight -> blk.1.attn_v.weight | F16 | [4096, 4096]\n","model.layers.10.input_layernorm.weight -> blk.10.attn_norm.weight | F16 | [4096]\n","model.layers.10.mlp.down_proj.weight -> blk.10.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.10.mlp.gate_proj.weight -> blk.10.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.10.mlp.up_proj.weight -> blk.10.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.10.post_attention_layernorm.weight -> blk.10.ffn_norm.weight | F16 | [4096]\n","model.layers.10.self_attn.k_proj.weight -> blk.10.attn_k.weight | F16 | [4096, 4096]\n","model.layers.10.self_attn.o_proj.weight -> blk.10.attn_output.weight | F16 | [4096, 4096]\n","model.layers.10.self_attn.q_proj.weight -> blk.10.attn_q.weight | F16 | [4096, 4096]\n","model.layers.10.self_attn.v_proj.weight -> blk.10.attn_v.weight | F16 | [4096, 4096]\n","model.layers.11.mlp.gate_proj.weight -> blk.11.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.11.self_attn.k_proj.weight -> blk.11.attn_k.weight | F16 | [4096, 4096]\n","model.layers.11.self_attn.o_proj.weight -> blk.11.attn_output.weight | F16 | [4096, 4096]\n","model.layers.11.self_attn.q_proj.weight -> blk.11.attn_q.weight | F16 | [4096, 4096]\n","model.layers.11.self_attn.v_proj.weight -> blk.11.attn_v.weight | F16 | [4096, 4096]\n","model.layers.2.input_layernorm.weight -> blk.2.attn_norm.weight | F16 | [4096]\n","model.layers.2.mlp.down_proj.weight -> blk.2.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.2.mlp.gate_proj.weight -> blk.2.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.2.mlp.up_proj.weight -> blk.2.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.2.post_attention_layernorm.weight -> blk.2.ffn_norm.weight | F16 | [4096]\n","model.layers.2.self_attn.k_proj.weight -> blk.2.attn_k.weight | F16 | [4096, 4096]\n","model.layers.2.self_attn.o_proj.weight -> blk.2.attn_output.weight | F16 | [4096, 4096]\n","model.layers.2.self_attn.q_proj.weight -> blk.2.attn_q.weight | F16 | [4096, 4096]\n","model.layers.2.self_attn.v_proj.weight -> blk.2.attn_v.weight | F16 | [4096, 4096]\n","model.layers.3.input_layernorm.weight -> blk.3.attn_norm.weight | F16 | [4096]\n","model.layers.3.mlp.down_proj.weight -> blk.3.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.3.mlp.gate_proj.weight -> blk.3.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.3.mlp.up_proj.weight -> blk.3.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.3.post_attention_layernorm.weight -> blk.3.ffn_norm.weight | F16 | [4096]\n","model.layers.3.self_attn.k_proj.weight -> blk.3.attn_k.weight | F16 | [4096, 4096]\n","model.layers.3.self_attn.o_proj.weight -> blk.3.attn_output.weight | F16 | [4096, 4096]\n","model.layers.3.self_attn.q_proj.weight -> blk.3.attn_q.weight | F16 | [4096, 4096]\n","model.layers.3.self_attn.v_proj.weight -> blk.3.attn_v.weight | F16 | [4096, 4096]\n","model.layers.4.input_layernorm.weight -> blk.4.attn_norm.weight | F16 | [4096]\n","model.layers.4.mlp.down_proj.weight -> blk.4.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.4.mlp.gate_proj.weight -> blk.4.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.4.mlp.up_proj.weight -> blk.4.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.4.post_attention_layernorm.weight -> blk.4.ffn_norm.weight | F16 | [4096]\n","model.layers.4.self_attn.k_proj.weight -> blk.4.attn_k.weight | F16 | [4096, 4096]\n","model.layers.4.self_attn.o_proj.weight -> blk.4.attn_output.weight | F16 | [4096, 4096]\n","model.layers.4.self_attn.q_proj.weight -> blk.4.attn_q.weight | F16 | [4096, 4096]\n","model.layers.4.self_attn.v_proj.weight -> blk.4.attn_v.weight | F16 | [4096, 4096]\n","model.layers.5.input_layernorm.weight -> blk.5.attn_norm.weight | F16 | [4096]\n","model.layers.5.mlp.down_proj.weight -> blk.5.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.5.mlp.gate_proj.weight -> blk.5.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.5.mlp.up_proj.weight -> blk.5.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.5.post_attention_layernorm.weight -> blk.5.ffn_norm.weight | F16 | [4096]\n","model.layers.5.self_attn.k_proj.weight -> blk.5.attn_k.weight | F16 | [4096, 4096]\n","model.layers.5.self_attn.o_proj.weight -> blk.5.attn_output.weight | F16 | [4096, 4096]\n","model.layers.5.self_attn.q_proj.weight -> blk.5.attn_q.weight | F16 | [4096, 4096]\n","model.layers.5.self_attn.v_proj.weight -> blk.5.attn_v.weight | F16 | [4096, 4096]\n","model.layers.6.input_layernorm.weight -> blk.6.attn_norm.weight | F16 | [4096]\n","model.layers.6.mlp.down_proj.weight -> blk.6.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.6.mlp.gate_proj.weight -> blk.6.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.6.mlp.up_proj.weight -> blk.6.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.6.post_attention_layernorm.weight -> blk.6.ffn_norm.weight | F16 | [4096]\n","model.layers.6.self_attn.k_proj.weight -> blk.6.attn_k.weight | F16 | [4096, 4096]\n","model.layers.6.self_attn.o_proj.weight -> blk.6.attn_output.weight | F16 | [4096, 4096]\n","model.layers.6.self_attn.q_proj.weight -> blk.6.attn_q.weight | F16 | [4096, 4096]\n","model.layers.6.self_attn.v_proj.weight -> blk.6.attn_v.weight | F16 | [4096, 4096]\n","model.layers.7.input_layernorm.weight -> blk.7.attn_norm.weight | F16 | [4096]\n","model.layers.7.mlp.down_proj.weight -> blk.7.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.7.mlp.gate_proj.weight -> blk.7.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.7.mlp.up_proj.weight -> blk.7.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.7.post_attention_layernorm.weight -> blk.7.ffn_norm.weight | F16 | [4096]\n","model.layers.7.self_attn.k_proj.weight -> blk.7.attn_k.weight | F16 | [4096, 4096]\n","model.layers.7.self_attn.o_proj.weight -> blk.7.attn_output.weight | F16 | [4096, 4096]\n","model.layers.7.self_attn.q_proj.weight -> blk.7.attn_q.weight | F16 | [4096, 4096]\n","model.layers.7.self_attn.v_proj.weight -> blk.7.attn_v.weight | F16 | [4096, 4096]\n","model.layers.8.input_layernorm.weight -> blk.8.attn_norm.weight | F16 | [4096]\n","model.layers.8.mlp.down_proj.weight -> blk.8.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.8.mlp.gate_proj.weight -> blk.8.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.8.mlp.up_proj.weight -> blk.8.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.8.post_attention_layernorm.weight -> blk.8.ffn_norm.weight | F16 | [4096]\n","model.layers.8.self_attn.k_proj.weight -> blk.8.attn_k.weight | F16 | [4096, 4096]\n","model.layers.8.self_attn.o_proj.weight -> blk.8.attn_output.weight | F16 | [4096, 4096]\n","model.layers.8.self_attn.q_proj.weight -> blk.8.attn_q.weight | F16 | [4096, 4096]\n","model.layers.8.self_attn.v_proj.weight -> blk.8.attn_v.weight | F16 | [4096, 4096]\n","model.layers.9.input_layernorm.weight -> blk.9.attn_norm.weight | F16 | [4096]\n","model.layers.9.mlp.down_proj.weight -> blk.9.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.9.mlp.gate_proj.weight -> blk.9.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.9.mlp.up_proj.weight -> blk.9.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.9.post_attention_layernorm.weight -> blk.9.ffn_norm.weight | F16 | [4096]\n","model.layers.9.self_attn.k_proj.weight -> blk.9.attn_k.weight | F16 | [4096, 4096]\n","model.layers.9.self_attn.o_proj.weight -> blk.9.attn_output.weight | F16 | [4096, 4096]\n","model.layers.9.self_attn.q_proj.weight -> blk.9.attn_q.weight | F16 | [4096, 4096]\n","model.layers.9.self_attn.v_proj.weight -> blk.9.attn_v.weight | F16 | [4096, 4096]\n","model.layers.11.input_layernorm.weight -> blk.11.attn_norm.weight | F16 | [4096]\n","model.layers.11.mlp.down_proj.weight -> blk.11.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.11.mlp.up_proj.weight -> blk.11.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.11.post_attention_layernorm.weight -> blk.11.ffn_norm.weight | F16 | [4096]\n","model.layers.12.input_layernorm.weight -> blk.12.attn_norm.weight | F16 | [4096]\n","model.layers.12.mlp.down_proj.weight -> blk.12.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.12.mlp.gate_proj.weight -> blk.12.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.12.mlp.up_proj.weight -> blk.12.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.12.post_attention_layernorm.weight -> blk.12.ffn_norm.weight | F16 | [4096]\n","model.layers.12.self_attn.k_proj.weight -> blk.12.attn_k.weight | F16 | [4096, 4096]\n","model.layers.12.self_attn.o_proj.weight -> blk.12.attn_output.weight | F16 | [4096, 4096]\n","model.layers.12.self_attn.q_proj.weight -> blk.12.attn_q.weight | F16 | [4096, 4096]\n","model.layers.12.self_attn.v_proj.weight -> blk.12.attn_v.weight | F16 | [4096, 4096]\n","model.layers.13.input_layernorm.weight -> blk.13.attn_norm.weight | F16 | [4096]\n","model.layers.13.mlp.down_proj.weight -> blk.13.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.13.mlp.gate_proj.weight -> blk.13.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.13.mlp.up_proj.weight -> blk.13.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.13.post_attention_layernorm.weight -> blk.13.ffn_norm.weight | F16 | [4096]\n","model.layers.13.self_attn.k_proj.weight -> blk.13.attn_k.weight | F16 | [4096, 4096]\n","model.layers.13.self_attn.o_proj.weight -> blk.13.attn_output.weight | F16 | [4096, 4096]\n","model.layers.13.self_attn.q_proj.weight -> blk.13.attn_q.weight | F16 | [4096, 4096]\n","model.layers.13.self_attn.v_proj.weight -> blk.13.attn_v.weight | F16 | [4096, 4096]\n","model.layers.14.input_layernorm.weight -> blk.14.attn_norm.weight | F16 | [4096]\n","model.layers.14.mlp.down_proj.weight -> blk.14.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.14.mlp.gate_proj.weight -> blk.14.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.14.mlp.up_proj.weight -> blk.14.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.14.post_attention_layernorm.weight -> blk.14.ffn_norm.weight | F16 | [4096]\n","model.layers.14.self_attn.k_proj.weight -> blk.14.attn_k.weight | F16 | [4096, 4096]\n","model.layers.14.self_attn.o_proj.weight -> blk.14.attn_output.weight | F16 | [4096, 4096]\n","model.layers.14.self_attn.q_proj.weight -> blk.14.attn_q.weight | F16 | [4096, 4096]\n","model.layers.14.self_attn.v_proj.weight -> blk.14.attn_v.weight | F16 | [4096, 4096]\n","model.layers.15.input_layernorm.weight -> blk.15.attn_norm.weight | F16 | [4096]\n","model.layers.15.mlp.down_proj.weight -> blk.15.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.15.mlp.gate_proj.weight -> blk.15.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.15.mlp.up_proj.weight -> blk.15.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.15.post_attention_layernorm.weight -> blk.15.ffn_norm.weight | F16 | [4096]\n","model.layers.15.self_attn.k_proj.weight -> blk.15.attn_k.weight | F16 | [4096, 4096]\n","model.layers.15.self_attn.o_proj.weight -> blk.15.attn_output.weight | F16 | [4096, 4096]\n","model.layers.15.self_attn.q_proj.weight -> blk.15.attn_q.weight | F16 | [4096, 4096]\n","model.layers.15.self_attn.v_proj.weight -> blk.15.attn_v.weight | F16 | [4096, 4096]\n","model.layers.16.input_layernorm.weight -> blk.16.attn_norm.weight | F16 | [4096]\n","model.layers.16.mlp.down_proj.weight -> blk.16.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.16.mlp.gate_proj.weight -> blk.16.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.16.mlp.up_proj.weight -> blk.16.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.16.post_attention_layernorm.weight -> blk.16.ffn_norm.weight | F16 | [4096]\n","model.layers.16.self_attn.k_proj.weight -> blk.16.attn_k.weight | F16 | [4096, 4096]\n","model.layers.16.self_attn.o_proj.weight -> blk.16.attn_output.weight | F16 | [4096, 4096]\n","model.layers.16.self_attn.q_proj.weight -> blk.16.attn_q.weight | F16 | [4096, 4096]\n","model.layers.16.self_attn.v_proj.weight -> blk.16.attn_v.weight | F16 | [4096, 4096]\n","model.layers.17.input_layernorm.weight -> blk.17.attn_norm.weight | F16 | [4096]\n","model.layers.17.mlp.down_proj.weight -> blk.17.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.17.mlp.gate_proj.weight -> blk.17.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.17.mlp.up_proj.weight -> blk.17.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.17.post_attention_layernorm.weight -> blk.17.ffn_norm.weight | F16 | [4096]\n","model.layers.17.self_attn.k_proj.weight -> blk.17.attn_k.weight | F16 | [4096, 4096]\n","model.layers.17.self_attn.o_proj.weight -> blk.17.attn_output.weight | F16 | [4096, 4096]\n","model.layers.17.self_attn.q_proj.weight -> blk.17.attn_q.weight | F16 | [4096, 4096]\n","model.layers.17.self_attn.v_proj.weight -> blk.17.attn_v.weight | F16 | [4096, 4096]\n","model.layers.18.input_layernorm.weight -> blk.18.attn_norm.weight | F16 | [4096]\n","model.layers.18.mlp.down_proj.weight -> blk.18.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.18.mlp.gate_proj.weight -> blk.18.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.18.mlp.up_proj.weight -> blk.18.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.18.post_attention_layernorm.weight -> blk.18.ffn_norm.weight | F16 | [4096]\n","model.layers.18.self_attn.k_proj.weight -> blk.18.attn_k.weight | F16 | [4096, 4096]\n","model.layers.18.self_attn.o_proj.weight -> blk.18.attn_output.weight | F16 | [4096, 4096]\n","model.layers.18.self_attn.q_proj.weight -> blk.18.attn_q.weight | F16 | [4096, 4096]\n","model.layers.18.self_attn.v_proj.weight -> blk.18.attn_v.weight | F16 | [4096, 4096]\n","model.layers.19.input_layernorm.weight -> blk.19.attn_norm.weight | F16 | [4096]\n","model.layers.19.mlp.down_proj.weight -> blk.19.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.19.mlp.gate_proj.weight -> blk.19.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.19.mlp.up_proj.weight -> blk.19.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.19.post_attention_layernorm.weight -> blk.19.ffn_norm.weight | F16 | [4096]\n","model.layers.19.self_attn.k_proj.weight -> blk.19.attn_k.weight | F16 | [4096, 4096]\n","model.layers.19.self_attn.o_proj.weight -> blk.19.attn_output.weight | F16 | [4096, 4096]\n","model.layers.19.self_attn.q_proj.weight -> blk.19.attn_q.weight | F16 | [4096, 4096]\n","model.layers.19.self_attn.v_proj.weight -> blk.19.attn_v.weight | F16 | [4096, 4096]\n","model.layers.20.input_layernorm.weight -> blk.20.attn_norm.weight | F16 | [4096]\n","model.layers.20.mlp.down_proj.weight -> blk.20.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.20.mlp.gate_proj.weight -> blk.20.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.20.mlp.up_proj.weight -> blk.20.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.20.post_attention_layernorm.weight -> blk.20.ffn_norm.weight | F16 | [4096]\n","model.layers.20.self_attn.k_proj.weight -> blk.20.attn_k.weight | F16 | [4096, 4096]\n","model.layers.20.self_attn.o_proj.weight -> blk.20.attn_output.weight | F16 | [4096, 4096]\n","model.layers.20.self_attn.q_proj.weight -> blk.20.attn_q.weight | F16 | [4096, 4096]\n","model.layers.20.self_attn.v_proj.weight -> blk.20.attn_v.weight | F16 | [4096, 4096]\n","model.layers.21.input_layernorm.weight -> blk.21.attn_norm.weight | F16 | [4096]\n","model.layers.21.mlp.down_proj.weight -> blk.21.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.21.mlp.gate_proj.weight -> blk.21.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.21.mlp.up_proj.weight -> blk.21.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.21.post_attention_layernorm.weight -> blk.21.ffn_norm.weight | F16 | [4096]\n","model.layers.21.self_attn.k_proj.weight -> blk.21.attn_k.weight | F16 | [4096, 4096]\n","model.layers.21.self_attn.o_proj.weight -> blk.21.attn_output.weight | F16 | [4096, 4096]\n","model.layers.21.self_attn.q_proj.weight -> blk.21.attn_q.weight | F16 | [4096, 4096]\n","model.layers.21.self_attn.v_proj.weight -> blk.21.attn_v.weight | F16 | [4096, 4096]\n","model.layers.22.input_layernorm.weight -> blk.22.attn_norm.weight | F16 | [4096]\n","model.layers.22.mlp.down_proj.weight -> blk.22.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.22.mlp.gate_proj.weight -> blk.22.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.22.mlp.up_proj.weight -> blk.22.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.22.post_attention_layernorm.weight -> blk.22.ffn_norm.weight | F16 | [4096]\n","model.layers.22.self_attn.k_proj.weight -> blk.22.attn_k.weight | F16 | [4096, 4096]\n","model.layers.22.self_attn.o_proj.weight -> blk.22.attn_output.weight | F16 | [4096, 4096]\n","model.layers.22.self_attn.q_proj.weight -> blk.22.attn_q.weight | F16 | [4096, 4096]\n","model.layers.22.self_attn.v_proj.weight -> blk.22.attn_v.weight | F16 | [4096, 4096]\n","model.layers.23.mlp.gate_proj.weight -> blk.23.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.23.mlp.up_proj.weight -> blk.23.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.23.self_attn.k_proj.weight -> blk.23.attn_k.weight | F16 | [4096, 4096]\n","model.layers.23.self_attn.o_proj.weight -> blk.23.attn_output.weight | F16 | [4096, 4096]\n","model.layers.23.self_attn.q_proj.weight -> blk.23.attn_q.weight | F16 | [4096, 4096]\n","model.layers.23.self_attn.v_proj.weight -> blk.23.attn_v.weight | F16 | [4096, 4096]\n","lm_head.weight -> output.weight | F16 | [32000, 4096]\n","model.layers.23.input_layernorm.weight -> blk.23.attn_norm.weight | F16 | [4096]\n","model.layers.23.mlp.down_proj.weight -> blk.23.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.23.post_attention_layernorm.weight -> blk.23.ffn_norm.weight | F16 | [4096]\n","model.layers.24.input_layernorm.weight -> blk.24.attn_norm.weight | F16 | [4096]\n","model.layers.24.mlp.down_proj.weight -> blk.24.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.24.mlp.gate_proj.weight -> blk.24.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.24.mlp.up_proj.weight -> blk.24.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.24.post_attention_layernorm.weight -> blk.24.ffn_norm.weight | F16 | [4096]\n","model.layers.24.self_attn.k_proj.weight -> blk.24.attn_k.weight | F16 | [4096, 4096]\n","model.layers.24.self_attn.o_proj.weight -> blk.24.attn_output.weight | F16 | [4096, 4096]\n","model.layers.24.self_attn.q_proj.weight -> blk.24.attn_q.weight | F16 | [4096, 4096]\n","model.layers.24.self_attn.v_proj.weight -> blk.24.attn_v.weight | F16 | [4096, 4096]\n","model.layers.25.input_layernorm.weight -> blk.25.attn_norm.weight | F16 | [4096]\n","model.layers.25.mlp.down_proj.weight -> blk.25.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.25.mlp.gate_proj.weight -> blk.25.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.25.mlp.up_proj.weight -> blk.25.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.25.post_attention_layernorm.weight -> blk.25.ffn_norm.weight | F16 | [4096]\n","model.layers.25.self_attn.k_proj.weight -> blk.25.attn_k.weight | F16 | [4096, 4096]\n","model.layers.25.self_attn.o_proj.weight -> blk.25.attn_output.weight | F16 | [4096, 4096]\n","model.layers.25.self_attn.q_proj.weight -> blk.25.attn_q.weight | F16 | [4096, 4096]\n","model.layers.25.self_attn.v_proj.weight -> blk.25.attn_v.weight | F16 | [4096, 4096]\n","model.layers.26.input_layernorm.weight -> blk.26.attn_norm.weight | F16 | [4096]\n","model.layers.26.mlp.down_proj.weight -> blk.26.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.26.mlp.gate_proj.weight -> blk.26.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.26.mlp.up_proj.weight -> blk.26.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.26.post_attention_layernorm.weight -> blk.26.ffn_norm.weight | F16 | [4096]\n","model.layers.26.self_attn.k_proj.weight -> blk.26.attn_k.weight | F16 | [4096, 4096]\n","model.layers.26.self_attn.o_proj.weight -> blk.26.attn_output.weight | F16 | [4096, 4096]\n","model.layers.26.self_attn.q_proj.weight -> blk.26.attn_q.weight | F16 | [4096, 4096]\n","model.layers.26.self_attn.v_proj.weight -> blk.26.attn_v.weight | F16 | [4096, 4096]\n","model.layers.27.input_layernorm.weight -> blk.27.attn_norm.weight | F16 | [4096]\n","model.layers.27.mlp.down_proj.weight -> blk.27.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.27.mlp.gate_proj.weight -> blk.27.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.27.mlp.up_proj.weight -> blk.27.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.27.post_attention_layernorm.weight -> blk.27.ffn_norm.weight | F16 | [4096]\n","model.layers.27.self_attn.k_proj.weight -> blk.27.attn_k.weight | F16 | [4096, 4096]\n","model.layers.27.self_attn.o_proj.weight -> blk.27.attn_output.weight | F16 | [4096, 4096]\n","model.layers.27.self_attn.q_proj.weight -> blk.27.attn_q.weight | F16 | [4096, 4096]\n","model.layers.27.self_attn.v_proj.weight -> blk.27.attn_v.weight | F16 | [4096, 4096]\n","model.layers.28.input_layernorm.weight -> blk.28.attn_norm.weight | F16 | [4096]\n","model.layers.28.mlp.down_proj.weight -> blk.28.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.28.mlp.gate_proj.weight -> blk.28.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.28.mlp.up_proj.weight -> blk.28.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.28.post_attention_layernorm.weight -> blk.28.ffn_norm.weight | F16 | [4096]\n","model.layers.28.self_attn.k_proj.weight -> blk.28.attn_k.weight | F16 | [4096, 4096]\n","model.layers.28.self_attn.o_proj.weight -> blk.28.attn_output.weight | F16 | [4096, 4096]\n","model.layers.28.self_attn.q_proj.weight -> blk.28.attn_q.weight | F16 | [4096, 4096]\n","model.layers.28.self_attn.v_proj.weight -> blk.28.attn_v.weight | F16 | [4096, 4096]\n","model.layers.29.input_layernorm.weight -> blk.29.attn_norm.weight | F16 | [4096]\n","model.layers.29.mlp.down_proj.weight -> blk.29.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.29.mlp.gate_proj.weight -> blk.29.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.29.mlp.up_proj.weight -> blk.29.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.29.post_attention_layernorm.weight -> blk.29.ffn_norm.weight | F16 | [4096]\n","model.layers.29.self_attn.k_proj.weight -> blk.29.attn_k.weight | F16 | [4096, 4096]\n","model.layers.29.self_attn.o_proj.weight -> blk.29.attn_output.weight | F16 | [4096, 4096]\n","model.layers.29.self_attn.q_proj.weight -> blk.29.attn_q.weight | F16 | [4096, 4096]\n","model.layers.29.self_attn.v_proj.weight -> blk.29.attn_v.weight | F16 | [4096, 4096]\n","model.layers.30.input_layernorm.weight -> blk.30.attn_norm.weight | F16 | [4096]\n","model.layers.30.mlp.down_proj.weight -> blk.30.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.30.mlp.gate_proj.weight -> blk.30.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.30.mlp.up_proj.weight -> blk.30.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.30.post_attention_layernorm.weight -> blk.30.ffn_norm.weight | F16 | [4096]\n","model.layers.30.self_attn.k_proj.weight -> blk.30.attn_k.weight | F16 | [4096, 4096]\n","model.layers.30.self_attn.o_proj.weight -> blk.30.attn_output.weight | F16 | [4096, 4096]\n","model.layers.30.self_attn.q_proj.weight -> blk.30.attn_q.weight | F16 | [4096, 4096]\n","model.layers.30.self_attn.v_proj.weight -> blk.30.attn_v.weight | F16 | [4096, 4096]\n","model.layers.31.input_layernorm.weight -> blk.31.attn_norm.weight | F16 | [4096]\n","model.layers.31.mlp.down_proj.weight -> blk.31.ffn_down.weight | F16 | [4096, 11008]\n","model.layers.31.mlp.gate_proj.weight -> blk.31.ffn_gate.weight | F16 | [11008, 4096]\n","model.layers.31.mlp.up_proj.weight -> blk.31.ffn_up.weight | F16 | [11008, 4096]\n","model.layers.31.post_attention_layernorm.weight -> blk.31.ffn_norm.weight | F16 | [4096]\n","model.layers.31.self_attn.k_proj.weight -> blk.31.attn_k.weight | F16 | [4096, 4096]\n","model.layers.31.self_attn.o_proj.weight -> blk.31.attn_output.weight | F16 | [4096, 4096]\n","model.layers.31.self_attn.q_proj.weight -> blk.31.attn_q.weight | F16 | [4096, 4096]\n","model.layers.31.self_attn.v_proj.weight -> blk.31.attn_v.weight | F16 | [4096, 4096]\n","model.norm.weight -> output_norm.weight | F16 | [4096]\n","Writing llama-2-7b-combined_datasets/llama-2-7b-combined_datasets.fp16.bin, format 1\n","Ignoring added_tokens.json since model matches vocab size without it.\n","gguf: This GGUF file is for Little Endian only\n","gguf: Setting special token type bos to 1\n","gguf: Setting special token type eos to 2\n","gguf: Setting special token type unk to 0\n","gguf: Setting special token type pad to 2\n","gguf: Setting add_bos_token to True\n","gguf: Setting add_eos_token to False\n","gguf: Setting chat_template to {% if messages[0]['role'] == 'system' %}{% set loop_messages = messages[1:] %}{% set system_message = messages[0]['content'] %}{% else %}{% set loop_messages = messages %}{% set system_message = false %}{% endif %}{% for message in loop_messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if loop.index0 == 0 and system_message != false %}{% set content = '<>\\n' + system_message + '\\n<>\\n\\n' + message['content'] %}{% else %}{% set content = message['content'] %}{% endif %}{% if message['role'] == 'user' %}{{ bos_token + '[INST] ' + content.strip() + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ ' ' + content.strip() + ' ' + eos_token }}{% endif %}{% endfor %}\n","[ 1/291] Writing tensor token_embd.weight | size 32000 x 4096 | type F16 | T+ 0\n","[ 2/291] Writing tensor blk.0.attn_norm.weight | size 4096 | type F32 | T+ 0\n","[ 3/291] Writing tensor blk.0.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 0\n","[ 4/291] Writing tensor blk.0.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 0\n","[ 5/291] Writing tensor blk.0.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 0\n","[ 6/291] Writing tensor blk.0.ffn_norm.weight | size 4096 | type F32 | T+ 0\n","[ 7/291] Writing tensor blk.0.attn_k.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 8/291] Writing tensor blk.0.attn_output.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 9/291] Writing tensor blk.0.attn_q.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 10/291] Writing tensor blk.0.attn_v.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 11/291] Writing tensor blk.1.attn_norm.weight | size 4096 | type F32 | T+ 0\n","[ 12/291] Writing tensor blk.1.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 0\n","[ 13/291] Writing tensor blk.1.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 0\n","[ 14/291] Writing tensor blk.1.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 0\n","[ 15/291] Writing tensor blk.1.ffn_norm.weight | size 4096 | type F32 | T+ 0\n","[ 16/291] Writing tensor blk.1.attn_k.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 17/291] Writing tensor blk.1.attn_output.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 18/291] Writing tensor blk.1.attn_q.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 19/291] Writing tensor blk.1.attn_v.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 20/291] Writing tensor blk.10.attn_norm.weight | size 4096 | type F32 | T+ 0\n","[ 21/291] Writing tensor blk.10.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 0\n","[ 22/291] Writing tensor blk.10.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 0\n","[ 23/291] Writing tensor blk.10.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 0\n","[ 24/291] Writing tensor blk.10.ffn_norm.weight | size 4096 | type F32 | T+ 0\n","[ 25/291] Writing tensor blk.10.attn_k.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 26/291] Writing tensor blk.10.attn_output.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 27/291] Writing tensor blk.10.attn_q.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 28/291] Writing tensor blk.10.attn_v.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 29/291] Writing tensor blk.11.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 0\n","[ 30/291] Writing tensor blk.11.attn_k.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 31/291] Writing tensor blk.11.attn_output.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 32/291] Writing tensor blk.11.attn_q.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 33/291] Writing tensor blk.11.attn_v.weight | size 4096 x 4096 | type F16 | T+ 0\n","[ 34/291] Writing tensor blk.2.attn_norm.weight | size 4096 | type F32 | T+ 0\n","[ 35/291] Writing tensor blk.2.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 0\n","[ 36/291] Writing tensor blk.2.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 0\n","[ 37/291] Writing tensor blk.2.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 1\n","[ 38/291] Writing tensor blk.2.ffn_norm.weight | size 4096 | type F32 | T+ 1\n","[ 39/291] Writing tensor blk.2.attn_k.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 40/291] Writing tensor blk.2.attn_output.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 41/291] Writing tensor blk.2.attn_q.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 42/291] Writing tensor blk.2.attn_v.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 43/291] Writing tensor blk.3.attn_norm.weight | size 4096 | type F32 | T+ 1\n","[ 44/291] Writing tensor blk.3.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 1\n","[ 45/291] Writing tensor blk.3.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 1\n","[ 46/291] Writing tensor blk.3.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 1\n","[ 47/291] Writing tensor blk.3.ffn_norm.weight | size 4096 | type F32 | T+ 1\n","[ 48/291] Writing tensor blk.3.attn_k.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 49/291] Writing tensor blk.3.attn_output.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 50/291] Writing tensor blk.3.attn_q.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 51/291] Writing tensor blk.3.attn_v.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 52/291] Writing tensor blk.4.attn_norm.weight | size 4096 | type F32 | T+ 1\n","[ 53/291] Writing tensor blk.4.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 1\n","[ 54/291] Writing tensor blk.4.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 1\n","[ 55/291] Writing tensor blk.4.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 1\n","[ 56/291] Writing tensor blk.4.ffn_norm.weight | size 4096 | type F32 | T+ 1\n","[ 57/291] Writing tensor blk.4.attn_k.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 58/291] Writing tensor blk.4.attn_output.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 59/291] Writing tensor blk.4.attn_q.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 60/291] Writing tensor blk.4.attn_v.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 61/291] Writing tensor blk.5.attn_norm.weight | size 4096 | type F32 | T+ 1\n","[ 62/291] Writing tensor blk.5.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 1\n","[ 63/291] Writing tensor blk.5.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 1\n","[ 64/291] Writing tensor blk.5.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 1\n","[ 65/291] Writing tensor blk.5.ffn_norm.weight | size 4096 | type F32 | T+ 1\n","[ 66/291] Writing tensor blk.5.attn_k.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 67/291] Writing tensor blk.5.attn_output.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 68/291] Writing tensor blk.5.attn_q.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 69/291] Writing tensor blk.5.attn_v.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 70/291] Writing tensor blk.6.attn_norm.weight | size 4096 | type F32 | T+ 1\n","[ 71/291] Writing tensor blk.6.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 1\n","[ 72/291] Writing tensor blk.6.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 1\n","[ 73/291] Writing tensor blk.6.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 1\n","[ 74/291] Writing tensor blk.6.ffn_norm.weight | size 4096 | type F32 | T+ 1\n","[ 75/291] Writing tensor blk.6.attn_k.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 76/291] Writing tensor blk.6.attn_output.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 77/291] Writing tensor blk.6.attn_q.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 78/291] Writing tensor blk.6.attn_v.weight | size 4096 x 4096 | type F16 | T+ 1\n","[ 79/291] Writing tensor blk.7.attn_norm.weight | size 4096 | type F32 | T+ 1\n","[ 80/291] Writing tensor blk.7.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 1\n","[ 81/291] Writing tensor blk.7.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 2\n","[ 82/291] Writing tensor blk.7.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 2\n","[ 83/291] Writing tensor blk.7.ffn_norm.weight | size 4096 | type F32 | T+ 2\n","[ 84/291] Writing tensor blk.7.attn_k.weight | size 4096 x 4096 | type F16 | T+ 2\n","[ 85/291] Writing tensor blk.7.attn_output.weight | size 4096 x 4096 | type F16 | T+ 2\n","[ 86/291] Writing tensor blk.7.attn_q.weight | size 4096 x 4096 | type F16 | T+ 2\n","[ 87/291] Writing tensor blk.7.attn_v.weight | size 4096 x 4096 | type F16 | T+ 2\n","[ 88/291] Writing tensor blk.8.attn_norm.weight | size 4096 | type F32 | T+ 2\n","[ 89/291] Writing tensor blk.8.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 2\n","[ 90/291] Writing tensor blk.8.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 2\n","[ 91/291] Writing tensor blk.8.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 2\n","[ 92/291] Writing tensor blk.8.ffn_norm.weight | size 4096 | type F32 | T+ 2\n","[ 93/291] Writing tensor blk.8.attn_k.weight | size 4096 x 4096 | type F16 | T+ 2\n","[ 94/291] Writing tensor blk.8.attn_output.weight | size 4096 x 4096 | type F16 | T+ 2\n","[ 95/291] Writing tensor blk.8.attn_q.weight | size 4096 x 4096 | type F16 | T+ 2\n","[ 96/291] Writing tensor blk.8.attn_v.weight | size 4096 x 4096 | type F16 | T+ 2\n","[ 97/291] Writing tensor blk.9.attn_norm.weight | size 4096 | type F32 | T+ 2\n","[ 98/291] Writing tensor blk.9.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 2\n","[ 99/291] Writing tensor blk.9.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 2\n","[100/291] Writing tensor blk.9.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 2\n","[101/291] Writing tensor blk.9.ffn_norm.weight | size 4096 | type F32 | T+ 2\n","[102/291] Writing tensor blk.9.attn_k.weight | size 4096 x 4096 | type F16 | T+ 2\n","[103/291] Writing tensor blk.9.attn_output.weight | size 4096 x 4096 | type F16 | T+ 2\n","[104/291] Writing tensor blk.9.attn_q.weight | size 4096 x 4096 | type F16 | T+ 2\n","[105/291] Writing tensor blk.9.attn_v.weight | size 4096 x 4096 | type F16 | T+ 2\n","[106/291] Writing tensor blk.11.attn_norm.weight | size 4096 | type F32 | T+ 2\n","[107/291] Writing tensor blk.11.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 2\n","[108/291] Writing tensor blk.11.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 2\n","[109/291] Writing tensor blk.11.ffn_norm.weight | size 4096 | type F32 | T+ 2\n","[110/291] Writing tensor blk.12.attn_norm.weight | size 4096 | type F32 | T+ 2\n","[111/291] Writing tensor blk.12.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 2\n","[112/291] Writing tensor blk.12.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 2\n","[113/291] Writing tensor blk.12.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 2\n","[114/291] Writing tensor blk.12.ffn_norm.weight | size 4096 | type F32 | T+ 2\n","[115/291] Writing tensor blk.12.attn_k.weight | size 4096 x 4096 | type F16 | T+ 2\n","[116/291] Writing tensor blk.12.attn_output.weight | size 4096 x 4096 | type F16 | T+ 2\n","[117/291] Writing tensor blk.12.attn_q.weight | size 4096 x 4096 | type F16 | T+ 2\n","[118/291] Writing tensor blk.12.attn_v.weight | size 4096 x 4096 | type F16 | T+ 3\n","[119/291] Writing tensor blk.13.attn_norm.weight | size 4096 | type F32 | T+ 3\n","[120/291] Writing tensor blk.13.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 3\n","[121/291] Writing tensor blk.13.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 3\n","[122/291] Writing tensor blk.13.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 3\n","[123/291] Writing tensor blk.13.ffn_norm.weight | size 4096 | type F32 | T+ 3\n","[124/291] Writing tensor blk.13.attn_k.weight | size 4096 x 4096 | type F16 | T+ 3\n","[125/291] Writing tensor blk.13.attn_output.weight | size 4096 x 4096 | type F16 | T+ 3\n","[126/291] Writing tensor blk.13.attn_q.weight | size 4096 x 4096 | type F16 | T+ 3\n","[127/291] Writing tensor blk.13.attn_v.weight | size 4096 x 4096 | type F16 | T+ 3\n","[128/291] Writing tensor blk.14.attn_norm.weight | size 4096 | type F32 | T+ 3\n","[129/291] Writing tensor blk.14.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 3\n","[130/291] Writing tensor blk.14.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 3\n","[131/291] Writing tensor blk.14.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 3\n","[132/291] Writing tensor blk.14.ffn_norm.weight | size 4096 | type F32 | T+ 3\n","[133/291] Writing tensor blk.14.attn_k.weight | size 4096 x 4096 | type F16 | T+ 3\n","[134/291] Writing tensor blk.14.attn_output.weight | size 4096 x 4096 | type F16 | T+ 3\n","[135/291] Writing tensor blk.14.attn_q.weight | size 4096 x 4096 | type F16 | T+ 3\n","[136/291] Writing tensor blk.14.attn_v.weight | size 4096 x 4096 | type F16 | T+ 3\n","[137/291] Writing tensor blk.15.attn_norm.weight | size 4096 | type F32 | T+ 3\n","[138/291] Writing tensor blk.15.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 3\n","[139/291] Writing tensor blk.15.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 3\n","[140/291] Writing tensor blk.15.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 3\n","[141/291] Writing tensor blk.15.ffn_norm.weight | size 4096 | type F32 | T+ 3\n","[142/291] Writing tensor blk.15.attn_k.weight | size 4096 x 4096 | type F16 | T+ 3\n","[143/291] Writing tensor blk.15.attn_output.weight | size 4096 x 4096 | type F16 | T+ 3\n","[144/291] Writing tensor blk.15.attn_q.weight | size 4096 x 4096 | type F16 | T+ 3\n","[145/291] Writing tensor blk.15.attn_v.weight | size 4096 x 4096 | type F16 | T+ 3\n","[146/291] Writing tensor blk.16.attn_norm.weight | size 4096 | type F32 | T+ 3\n","[147/291] Writing tensor blk.16.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 3\n","[148/291] Writing tensor blk.16.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 3\n","[149/291] Writing tensor blk.16.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 3\n","[150/291] Writing tensor blk.16.ffn_norm.weight | size 4096 | type F32 | T+ 3\n","[151/291] Writing tensor blk.16.attn_k.weight | size 4096 x 4096 | type F16 | T+ 3\n","[152/291] Writing tensor blk.16.attn_output.weight | size 4096 x 4096 | type F16 | T+ 3\n","[153/291] Writing tensor blk.16.attn_q.weight | size 4096 x 4096 | type F16 | T+ 3\n","[154/291] Writing tensor blk.16.attn_v.weight | size 4096 x 4096 | type F16 | T+ 3\n","[155/291] Writing tensor blk.17.attn_norm.weight | size 4096 | type F32 | T+ 3\n","[156/291] Writing tensor blk.17.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 3\n","[157/291] Writing tensor blk.17.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 4\n","[158/291] Writing tensor blk.17.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 4\n","[159/291] Writing tensor blk.17.ffn_norm.weight | size 4096 | type F32 | T+ 4\n","[160/291] Writing tensor blk.17.attn_k.weight | size 4096 x 4096 | type F16 | T+ 4\n","[161/291] Writing tensor blk.17.attn_output.weight | size 4096 x 4096 | type F16 | T+ 4\n","[162/291] Writing tensor blk.17.attn_q.weight | size 4096 x 4096 | type F16 | T+ 4\n","[163/291] Writing tensor blk.17.attn_v.weight | size 4096 x 4096 | type F16 | T+ 4\n","[164/291] Writing tensor blk.18.attn_norm.weight | size 4096 | type F32 | T+ 4\n","[165/291] Writing tensor blk.18.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 4\n","[166/291] Writing tensor blk.18.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 4\n","[167/291] Writing tensor blk.18.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 4\n","[168/291] Writing tensor blk.18.ffn_norm.weight | size 4096 | type F32 | T+ 4\n","[169/291] Writing tensor blk.18.attn_k.weight | size 4096 x 4096 | type F16 | T+ 4\n","[170/291] Writing tensor blk.18.attn_output.weight | size 4096 x 4096 | type F16 | T+ 4\n","[171/291] Writing tensor blk.18.attn_q.weight | size 4096 x 4096 | type F16 | T+ 4\n","[172/291] Writing tensor blk.18.attn_v.weight | size 4096 x 4096 | type F16 | T+ 4\n","[173/291] Writing tensor blk.19.attn_norm.weight | size 4096 | type F32 | T+ 4\n","[174/291] Writing tensor blk.19.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 4\n","[175/291] Writing tensor blk.19.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 4\n","[176/291] Writing tensor blk.19.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 4\n","[177/291] Writing tensor blk.19.ffn_norm.weight | size 4096 | type F32 | T+ 4\n","[178/291] Writing tensor blk.19.attn_k.weight | size 4096 x 4096 | type F16 | T+ 4\n","[179/291] Writing tensor blk.19.attn_output.weight | size 4096 x 4096 | type F16 | T+ 4\n","[180/291] Writing tensor blk.19.attn_q.weight | size 4096 x 4096 | type F16 | T+ 4\n","[181/291] Writing tensor blk.19.attn_v.weight | size 4096 x 4096 | type F16 | T+ 4\n","[182/291] Writing tensor blk.20.attn_norm.weight | size 4096 | type F32 | T+ 4\n","[183/291] Writing tensor blk.20.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 4\n","[184/291] Writing tensor blk.20.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 4\n","[185/291] Writing tensor blk.20.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 4\n","[186/291] Writing tensor blk.20.ffn_norm.weight | size 4096 | type F32 | T+ 4\n","[187/291] Writing tensor blk.20.attn_k.weight | size 4096 x 4096 | type F16 | T+ 4\n","[188/291] Writing tensor blk.20.attn_output.weight | size 4096 x 4096 | type F16 | T+ 4\n","[189/291] Writing tensor blk.20.attn_q.weight | size 4096 x 4096 | type F16 | T+ 4\n","[190/291] Writing tensor blk.20.attn_v.weight | size 4096 x 4096 | type F16 | T+ 4\n","[191/291] Writing tensor blk.21.attn_norm.weight | size 4096 | type F32 | T+ 4\n","[192/291] Writing tensor blk.21.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 4\n","[193/291] Writing tensor blk.21.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 4\n","[194/291] Writing tensor blk.21.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 5\n","[195/291] Writing tensor blk.21.ffn_norm.weight | size 4096 | type F32 | T+ 5\n","[196/291] Writing tensor blk.21.attn_k.weight | size 4096 x 4096 | type F16 | T+ 5\n","[197/291] Writing tensor blk.21.attn_output.weight | size 4096 x 4096 | type F16 | T+ 5\n","[198/291] Writing tensor blk.21.attn_q.weight | size 4096 x 4096 | type F16 | T+ 5\n","[199/291] Writing tensor blk.21.attn_v.weight | size 4096 x 4096 | type F16 | T+ 5\n","[200/291] Writing tensor blk.22.attn_norm.weight | size 4096 | type F32 | T+ 5\n","[201/291] Writing tensor blk.22.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 5\n","[202/291] Writing tensor blk.22.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 5\n","[203/291] Writing tensor blk.22.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 5\n","[204/291] Writing tensor blk.22.ffn_norm.weight | size 4096 | type F32 | T+ 5\n","[205/291] Writing tensor blk.22.attn_k.weight | size 4096 x 4096 | type F16 | T+ 5\n","[206/291] Writing tensor blk.22.attn_output.weight | size 4096 x 4096 | type F16 | T+ 5\n","[207/291] Writing tensor blk.22.attn_q.weight | size 4096 x 4096 | type F16 | T+ 5\n","[208/291] Writing tensor blk.22.attn_v.weight | size 4096 x 4096 | type F16 | T+ 5\n","[209/291] Writing tensor blk.23.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 5\n","[210/291] Writing tensor blk.23.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 5\n","[211/291] Writing tensor blk.23.attn_k.weight | size 4096 x 4096 | type F16 | T+ 5\n","[212/291] Writing tensor blk.23.attn_output.weight | size 4096 x 4096 | type F16 | T+ 5\n","[213/291] Writing tensor blk.23.attn_q.weight | size 4096 x 4096 | type F16 | T+ 5\n","[214/291] Writing tensor blk.23.attn_v.weight | size 4096 x 4096 | type F16 | T+ 5\n","[215/291] Writing tensor output.weight | size 32000 x 4096 | type F16 | T+ 5\n","[216/291] Writing tensor blk.23.attn_norm.weight | size 4096 | type F32 | T+ 5\n","[217/291] Writing tensor blk.23.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 5\n","[218/291] Writing tensor blk.23.ffn_norm.weight | size 4096 | type F32 | T+ 5\n","[219/291] Writing tensor blk.24.attn_norm.weight | size 4096 | type F32 | T+ 5\n","[220/291] Writing tensor blk.24.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 5\n","[221/291] Writing tensor blk.24.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 5\n","[222/291] Writing tensor blk.24.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 5\n","[223/291] Writing tensor blk.24.ffn_norm.weight | size 4096 | type F32 | T+ 6\n","[224/291] Writing tensor blk.24.attn_k.weight | size 4096 x 4096 | type F16 | T+ 6\n","[225/291] Writing tensor blk.24.attn_output.weight | size 4096 x 4096 | type F16 | T+ 6\n","[226/291] Writing tensor blk.24.attn_q.weight | size 4096 x 4096 | type F16 | T+ 6\n","[227/291] Writing tensor blk.24.attn_v.weight | size 4096 x 4096 | type F16 | T+ 6\n","[228/291] Writing tensor blk.25.attn_norm.weight | size 4096 | type F32 | T+ 6\n","[229/291] Writing tensor blk.25.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 6\n","[230/291] Writing tensor blk.25.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 6\n","[231/291] Writing tensor blk.25.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 6\n","[232/291] Writing tensor blk.25.ffn_norm.weight | size 4096 | type F32 | T+ 6\n","[233/291] Writing tensor blk.25.attn_k.weight | size 4096 x 4096 | type F16 | T+ 6\n","[234/291] Writing tensor blk.25.attn_output.weight | size 4096 x 4096 | type F16 | T+ 6\n","[235/291] Writing tensor blk.25.attn_q.weight | size 4096 x 4096 | type F16 | T+ 6\n","[236/291] Writing tensor blk.25.attn_v.weight | size 4096 x 4096 | type F16 | T+ 6\n","[237/291] Writing tensor blk.26.attn_norm.weight | size 4096 | type F32 | T+ 6\n","[238/291] Writing tensor blk.26.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 6\n","[239/291] Writing tensor blk.26.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 6\n","[240/291] Writing tensor blk.26.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 6\n","[241/291] Writing tensor blk.26.ffn_norm.weight | size 4096 | type F32 | T+ 6\n","[242/291] Writing tensor blk.26.attn_k.weight | size 4096 x 4096 | type F16 | T+ 6\n","[243/291] Writing tensor blk.26.attn_output.weight | size 4096 x 4096 | type F16 | T+ 6\n","[244/291] Writing tensor blk.26.attn_q.weight | size 4096 x 4096 | type F16 | T+ 6\n","[245/291] Writing tensor blk.26.attn_v.weight | size 4096 x 4096 | type F16 | T+ 6\n","[246/291] Writing tensor blk.27.attn_norm.weight | size 4096 | type F32 | T+ 6\n","[247/291] Writing tensor blk.27.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 6\n","[248/291] Writing tensor blk.27.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 6\n","[249/291] Writing tensor blk.27.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 6\n","[250/291] Writing tensor blk.27.ffn_norm.weight | size 4096 | type F32 | T+ 6\n","[251/291] Writing tensor blk.27.attn_k.weight | size 4096 x 4096 | type F16 | T+ 6\n","[252/291] Writing tensor blk.27.attn_output.weight | size 4096 x 4096 | type F16 | T+ 6\n","[253/291] Writing tensor blk.27.attn_q.weight | size 4096 x 4096 | type F16 | T+ 6\n","[254/291] Writing tensor blk.27.attn_v.weight | size 4096 x 4096 | type F16 | T+ 6\n","[255/291] Writing tensor blk.28.attn_norm.weight | size 4096 | type F32 | T+ 6\n","[256/291] Writing tensor blk.28.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 6\n","[257/291] Writing tensor blk.28.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 6\n","[258/291] Writing tensor blk.28.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 6\n","[259/291] Writing tensor blk.28.ffn_norm.weight | size 4096 | type F32 | T+ 6\n","[260/291] Writing tensor blk.28.attn_k.weight | size 4096 x 4096 | type F16 | T+ 6\n","[261/291] Writing tensor blk.28.attn_output.weight | size 4096 x 4096 | type F16 | T+ 6\n","[262/291] Writing tensor blk.28.attn_q.weight | size 4096 x 4096 | type F16 | T+ 6\n","[263/291] Writing tensor blk.28.attn_v.weight | size 4096 x 4096 | type F16 | T+ 6\n","[264/291] Writing tensor blk.29.attn_norm.weight | size 4096 | type F32 | T+ 7\n","[265/291] Writing tensor blk.29.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 7\n","[266/291] Writing tensor blk.29.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 7\n","[267/291] Writing tensor blk.29.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 7\n","[268/291] Writing tensor blk.29.ffn_norm.weight | size 4096 | type F32 | T+ 7\n","[269/291] Writing tensor blk.29.attn_k.weight | size 4096 x 4096 | type F16 | T+ 7\n","[270/291] Writing tensor blk.29.attn_output.weight | size 4096 x 4096 | type F16 | T+ 7\n","[271/291] Writing tensor blk.29.attn_q.weight | size 4096 x 4096 | type F16 | T+ 7\n","[272/291] Writing tensor blk.29.attn_v.weight | size 4096 x 4096 | type F16 | T+ 7\n","[273/291] Writing tensor blk.30.attn_norm.weight | size 4096 | type F32 | T+ 7\n","[274/291] Writing tensor blk.30.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 7\n","[275/291] Writing tensor blk.30.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 7\n","[276/291] Writing tensor blk.30.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 7\n","[277/291] Writing tensor blk.30.ffn_norm.weight | size 4096 | type F32 | T+ 7\n","[278/291] Writing tensor blk.30.attn_k.weight | size 4096 x 4096 | type F16 | T+ 7\n","[279/291] Writing tensor blk.30.attn_output.weight | size 4096 x 4096 | type F16 | T+ 7\n","[280/291] Writing tensor blk.30.attn_q.weight | size 4096 x 4096 | type F16 | T+ 7\n","[281/291] Writing tensor blk.30.attn_v.weight | size 4096 x 4096 | type F16 | T+ 7\n","[282/291] Writing tensor blk.31.attn_norm.weight | size 4096 | type F32 | T+ 7\n","[283/291] Writing tensor blk.31.ffn_down.weight | size 4096 x 11008 | type F16 | T+ 7\n","[284/291] Writing tensor blk.31.ffn_gate.weight | size 11008 x 4096 | type F16 | T+ 7\n","[285/291] Writing tensor blk.31.ffn_up.weight | size 11008 x 4096 | type F16 | T+ 7\n","[286/291] Writing tensor blk.31.ffn_norm.weight | size 4096 | type F32 | T+ 7\n","[287/291] Writing tensor blk.31.attn_k.weight | size 4096 x 4096 | type F16 | T+ 7\n","[288/291] Writing tensor blk.31.attn_output.weight | size 4096 x 4096 | type F16 | T+ 7\n","[289/291] Writing tensor blk.31.attn_q.weight | size 4096 x 4096 | type F16 | T+ 7\n","[290/291] Writing tensor blk.31.attn_v.weight | size 4096 x 4096 | type F16 | T+ 7\n","[291/291] Writing tensor output_norm.weight | size 4096 | type F32 | T+ 7\n","Wrote llama-2-7b-combined_datasets/llama-2-7b-combined_datasets.fp16.bin\n"]}],"source":["# Convert to fp16\n","fp16 = f\"{MODEL_NAME}/{MODEL_NAME.lower()}.fp16.bin\"\n","!python llama.cpp/convert.py {MODEL_NAME} --outtype f16 --outfile {fp16}"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":752625,"status":"ok","timestamp":1707925277694,"user":{"displayName":"szehanz","userId":"16137883221268059572"},"user_tz":-480},"id":"mw5y-GWdkbx6","outputId":"4b95a5a4-b44c-413b-ca05-621d0f935d0f"},"outputs":[{"name":"stdout","output_type":"stream","text":["FP16 file created successfully: llama-2-7b-combined_datasets/llama-2-7b-combined_datasets.fp16.bin\n","ggml_init_cublas: GGML_CUDA_FORCE_MMQ: no\n","ggml_init_cublas: CUDA_USE_TENSOR_CORES: yes\n","ggml_init_cublas: found 1 CUDA devices:\n"," Device 0: Tesla T4, compute capability 7.5, VMM: yes\n","main: build = 2203 (9d679f0f)\n","main: built with cc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 for x86_64-linux-gnu\n","main: quantizing 'llama-2-7b-combined_datasets/llama-2-7b-combined_datasets.fp16.bin' to 'llama-2-7b-combined_datasets/llama-2-7b-combined_datasets.Q5_K_M.gguf' as Q5_K_M\n","llama_model_loader: loaded meta data with 23 key-value pairs and 291 tensors from llama-2-7b-combined_datasets/llama-2-7b-combined_datasets.fp16.bin (version GGUF V3 (latest))\n","llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.\n","llama_model_loader: - kv 0: general.architecture str = llama\n","llama_model_loader: - kv 1: general.name str = LLaMA v2\n","llama_model_loader: - kv 2: llama.context_length u32 = 4096\n","llama_model_loader: - kv 3: llama.embedding_length u32 = 4096\n","llama_model_loader: - kv 4: llama.block_count u32 = 32\n","llama_model_loader: - kv 5: llama.feed_forward_length u32 = 11008\n","llama_model_loader: - kv 6: llama.rope.dimension_count u32 = 128\n","llama_model_loader: - kv 7: llama.attention.head_count u32 = 32\n","llama_model_loader: - kv 8: llama.attention.head_count_kv u32 = 32\n","llama_model_loader: - kv 9: llama.attention.layer_norm_rms_epsilon f32 = 0.000010\n","llama_model_loader: - kv 10: llama.rope.freq_base f32 = 10000.000000\n","llama_model_loader: - kv 11: general.file_type u32 = 1\n","llama_model_loader: - kv 12: tokenizer.ggml.model str = llama\n","llama_model_loader: - kv 13: tokenizer.ggml.tokens arr[str,32000] = [\"\", \"\", \"\", \"<0x00>\", \"<...\n","llama_model_loader: - kv 14: tokenizer.ggml.scores arr[f32,32000] = [0.000000, 0.000000, 0.000000, 0.0000...\n","llama_model_loader: - kv 15: tokenizer.ggml.token_type arr[i32,32000] = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...\n","llama_model_loader: - kv 16: tokenizer.ggml.bos_token_id u32 = 1\n","llama_model_loader: - kv 17: tokenizer.ggml.eos_token_id u32 = 2\n","llama_model_loader: - kv 18: tokenizer.ggml.unknown_token_id u32 = 0\n","llama_model_loader: - kv 19: tokenizer.ggml.padding_token_id u32 = 2\n","llama_model_loader: - kv 20: tokenizer.ggml.add_bos_token bool = true\n","llama_model_loader: - kv 21: tokenizer.ggml.add_eos_token bool = false\n","llama_model_loader: - kv 22: tokenizer.chat_template str = {% if messages[0]['role'] == 'system'...\n","llama_model_loader: - type f32: 65 tensors\n","llama_model_loader: - type f16: 226 tensors\n","llama_model_quantize_internal: meta size = 742080 bytes\n","[ 1/ 291] token_embd.weight - [ 4096, 32000, 1, 1], type = f16, quantizing to q5_K .. size = 250.00 MiB -> 85.94 MiB\n","[ 2/ 291] blk.0.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 3/ 291] blk.0.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 4/ 291] blk.0.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 5/ 291] blk.0.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 6/ 291] blk.0.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 7/ 291] blk.0.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 8/ 291] blk.0.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 9/ 291] blk.0.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 10/ 291] blk.0.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 11/ 291] blk.1.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 12/ 291] blk.1.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 13/ 291] blk.1.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 14/ 291] blk.1.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 15/ 291] blk.1.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 16/ 291] blk.1.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 17/ 291] blk.1.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 18/ 291] blk.1.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 19/ 291] blk.1.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 20/ 291] blk.10.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 21/ 291] blk.10.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 22/ 291] blk.10.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 23/ 291] blk.10.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 24/ 291] blk.10.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 25/ 291] blk.10.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 26/ 291] blk.10.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 27/ 291] blk.10.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 28/ 291] blk.10.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 29/ 291] blk.11.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 30/ 291] blk.11.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 31/ 291] blk.11.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 32/ 291] blk.11.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 33/ 291] blk.11.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 34/ 291] blk.2.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 35/ 291] blk.2.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 36/ 291] blk.2.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 37/ 291] blk.2.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 38/ 291] blk.2.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 39/ 291] blk.2.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 40/ 291] blk.2.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 41/ 291] blk.2.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 42/ 291] blk.2.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 43/ 291] blk.3.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 44/ 291] blk.3.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 45/ 291] blk.3.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 46/ 291] blk.3.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 47/ 291] blk.3.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 48/ 291] blk.3.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 49/ 291] blk.3.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 50/ 291] blk.3.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 51/ 291] blk.3.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 52/ 291] blk.4.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 53/ 291] blk.4.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 54/ 291] blk.4.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 55/ 291] blk.4.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 56/ 291] blk.4.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 57/ 291] blk.4.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 58/ 291] blk.4.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 59/ 291] blk.4.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 60/ 291] blk.4.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 61/ 291] blk.5.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 62/ 291] blk.5.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 63/ 291] blk.5.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 64/ 291] blk.5.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 65/ 291] blk.5.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 66/ 291] blk.5.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 67/ 291] blk.5.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 68/ 291] blk.5.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 69/ 291] blk.5.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 70/ 291] blk.6.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 71/ 291] blk.6.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 72/ 291] blk.6.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 73/ 291] blk.6.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 74/ 291] blk.6.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 75/ 291] blk.6.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 76/ 291] blk.6.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 77/ 291] blk.6.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 78/ 291] blk.6.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 79/ 291] blk.7.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 80/ 291] blk.7.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 81/ 291] blk.7.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 82/ 291] blk.7.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 83/ 291] blk.7.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 84/ 291] blk.7.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 85/ 291] blk.7.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 86/ 291] blk.7.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 87/ 291] blk.7.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 88/ 291] blk.8.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 89/ 291] blk.8.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 90/ 291] blk.8.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 91/ 291] blk.8.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 92/ 291] blk.8.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 93/ 291] blk.8.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 94/ 291] blk.8.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 95/ 291] blk.8.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 96/ 291] blk.8.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 97/ 291] blk.9.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 98/ 291] blk.9.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 99/ 291] blk.9.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 100/ 291] blk.9.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 101/ 291] blk.9.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 102/ 291] blk.9.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 103/ 291] blk.9.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 104/ 291] blk.9.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 105/ 291] blk.9.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 106/ 291] blk.11.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 107/ 291] blk.11.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 108/ 291] blk.11.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 109/ 291] blk.11.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 110/ 291] blk.12.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 111/ 291] blk.12.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 112/ 291] blk.12.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 113/ 291] blk.12.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 114/ 291] blk.12.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 115/ 291] blk.12.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 116/ 291] blk.12.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 117/ 291] blk.12.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 118/ 291] blk.12.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 119/ 291] blk.13.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 120/ 291] blk.13.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 121/ 291] blk.13.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 122/ 291] blk.13.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 123/ 291] blk.13.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 124/ 291] blk.13.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 125/ 291] blk.13.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 126/ 291] blk.13.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 127/ 291] blk.13.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 128/ 291] blk.14.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 129/ 291] blk.14.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 130/ 291] blk.14.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 131/ 291] blk.14.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 132/ 291] blk.14.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 133/ 291] blk.14.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 134/ 291] blk.14.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 135/ 291] blk.14.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 136/ 291] blk.14.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 137/ 291] blk.15.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 138/ 291] blk.15.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 139/ 291] blk.15.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 140/ 291] blk.15.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 141/ 291] blk.15.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 142/ 291] blk.15.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 143/ 291] blk.15.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 144/ 291] blk.15.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 145/ 291] blk.15.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 146/ 291] blk.16.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 147/ 291] blk.16.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 148/ 291] blk.16.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 149/ 291] blk.16.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 150/ 291] blk.16.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 151/ 291] blk.16.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 152/ 291] blk.16.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 153/ 291] blk.16.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 154/ 291] blk.16.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 155/ 291] blk.17.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 156/ 291] blk.17.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 157/ 291] blk.17.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 158/ 291] blk.17.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 159/ 291] blk.17.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 160/ 291] blk.17.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 161/ 291] blk.17.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 162/ 291] blk.17.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 163/ 291] blk.17.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 164/ 291] blk.18.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 165/ 291] blk.18.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 166/ 291] blk.18.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 167/ 291] blk.18.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 168/ 291] blk.18.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 169/ 291] blk.18.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 170/ 291] blk.18.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 171/ 291] blk.18.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 172/ 291] blk.18.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 173/ 291] blk.19.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 174/ 291] blk.19.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 175/ 291] blk.19.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 176/ 291] blk.19.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 177/ 291] blk.19.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 178/ 291] blk.19.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 179/ 291] blk.19.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 180/ 291] blk.19.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 181/ 291] blk.19.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 182/ 291] blk.20.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 183/ 291] blk.20.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 184/ 291] blk.20.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 185/ 291] blk.20.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 186/ 291] blk.20.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 187/ 291] blk.20.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 188/ 291] blk.20.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 189/ 291] blk.20.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 190/ 291] blk.20.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 191/ 291] blk.21.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 192/ 291] blk.21.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 193/ 291] blk.21.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 194/ 291] blk.21.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 195/ 291] blk.21.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 196/ 291] blk.21.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 197/ 291] blk.21.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 198/ 291] blk.21.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 199/ 291] blk.21.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 200/ 291] blk.22.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 201/ 291] blk.22.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 202/ 291] blk.22.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 203/ 291] blk.22.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 204/ 291] blk.22.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 205/ 291] blk.22.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 206/ 291] blk.22.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 207/ 291] blk.22.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 208/ 291] blk.22.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 209/ 291] blk.23.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 210/ 291] blk.23.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 211/ 291] blk.23.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 212/ 291] blk.23.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 213/ 291] blk.23.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 214/ 291] blk.23.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 215/ 291] output.weight - [ 4096, 32000, 1, 1], type = f16, quantizing to q6_K .. size = 250.00 MiB -> 102.54 MiB\n","[ 216/ 291] blk.23.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 217/ 291] blk.23.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 218/ 291] blk.23.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 219/ 291] blk.24.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 220/ 291] blk.24.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 221/ 291] blk.24.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 222/ 291] blk.24.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 223/ 291] blk.24.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 224/ 291] blk.24.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 225/ 291] blk.24.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 226/ 291] blk.24.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 227/ 291] blk.24.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 228/ 291] blk.25.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 229/ 291] blk.25.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 230/ 291] blk.25.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 231/ 291] blk.25.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 232/ 291] blk.25.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 233/ 291] blk.25.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 234/ 291] blk.25.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 235/ 291] blk.25.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 236/ 291] blk.25.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 237/ 291] blk.26.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 238/ 291] blk.26.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 239/ 291] blk.26.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 240/ 291] blk.26.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 241/ 291] blk.26.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 242/ 291] blk.26.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 243/ 291] blk.26.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 244/ 291] blk.26.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 245/ 291] blk.26.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 246/ 291] blk.27.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 247/ 291] blk.27.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 248/ 291] blk.27.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 249/ 291] blk.27.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 250/ 291] blk.27.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 251/ 291] blk.27.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 252/ 291] blk.27.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 253/ 291] blk.27.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 254/ 291] blk.27.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 255/ 291] blk.28.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 256/ 291] blk.28.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 257/ 291] blk.28.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 258/ 291] blk.28.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 259/ 291] blk.28.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 260/ 291] blk.28.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 261/ 291] blk.28.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 262/ 291] blk.28.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 263/ 291] blk.28.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 264/ 291] blk.29.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 265/ 291] blk.29.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 266/ 291] blk.29.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 267/ 291] blk.29.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 268/ 291] blk.29.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 269/ 291] blk.29.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 270/ 291] blk.29.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 271/ 291] blk.29.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 272/ 291] blk.29.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 273/ 291] blk.30.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 274/ 291] blk.30.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 275/ 291] blk.30.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 276/ 291] blk.30.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 277/ 291] blk.30.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 278/ 291] blk.30.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 279/ 291] blk.30.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 280/ 291] blk.30.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 281/ 291] blk.30.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 282/ 291] blk.31.attn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 283/ 291] blk.31.ffn_down.weight - [11008, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 86.00 MiB -> 35.27 MiB\n","[ 284/ 291] blk.31.ffn_gate.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 285/ 291] blk.31.ffn_up.weight - [ 4096, 11008, 1, 1], type = f16, quantizing to q5_K .. size = 86.00 MiB -> 29.56 MiB\n","[ 286/ 291] blk.31.ffn_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","[ 287/ 291] blk.31.attn_k.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 288/ 291] blk.31.attn_output.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 289/ 291] blk.31.attn_q.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q5_K .. size = 32.00 MiB -> 11.00 MiB\n","[ 290/ 291] blk.31.attn_v.weight - [ 4096, 4096, 1, 1], type = f16, quantizing to q6_K .. size = 32.00 MiB -> 13.12 MiB\n","[ 291/ 291] output_norm.weight - [ 4096, 1, 1, 1], type = f32, size = 0.016 MB\n","llama_model_quantize_internal: model size = 12853.02 MB\n","llama_model_quantize_internal: quant size = 4560.87 MB\n","\n","main: quantize time = 27944.02 ms\n","main: total time = 27944.02 ms\n"]}],"source":["# Verify creation of FP16 file and quantize the model for specified methods.\n","# First, check if the FP16 model file exists, indicating successful conversion.\n","# If the file does not exist, terminate the script to prevent further errors.\n","# Then, for each quantization method listed, perform model quantization,\n","# generating a quantized model file for each method.\n","\n","\n","if os.path.exists(fp16):\n"," print(f\"FP16 file created successfully: {fp16}\")\n","else:\n"," print(f\"Failed to create FP16 file at: {fp16}\")\n"," import sys\n"," sys.exit(\"Stopping script due to missing FP16 file.\")\n","\n","\n","# Quantize the model using specified methods\n","for method in QUANTIZATION_METHODS:\n"," qtype = f\"{MODEL_NAME}/{MODEL_NAME.lower()}.{method.upper()}.gguf\"\n"," !./llama.cpp/quantize {fp16} {qtype} {method}"]},{"cell_type":"markdown","metadata":{"id":"WqI1CPiXI4dP"},"source":["## Run inference\n","\n","Below is a script to run our quantized model. We are offloading every layer to the GPU (33 for a 7b parameter model) to speed up inference."]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":64968,"status":"ok","timestamp":1707925342654,"user":{"displayName":"szehanz","userId":"16137883221268059572"},"user_tz":-480},"id":"vNPL9WYg78l-","outputId":"16ef6d44-0eda-4b35-e4eb-d4eb9ac083a3"},"outputs":[{"name":"stdin","output_type":"stream","text":["Enter your prompt: what is deep learning\n"]},{"name":"stdout","output_type":"stream","text":["Log start\n","main: build = 2203 (9d679f0f)\n","main: built with cc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 for x86_64-linux-gnu\n","main: seed = 1708358764\n","ggml_init_cublas: GGML_CUDA_FORCE_MMQ: no\n","ggml_init_cublas: CUDA_USE_TENSOR_CORES: yes\n","ggml_init_cublas: found 1 CUDA devices:\n"," Device 0: Tesla T4, compute capability 7.5, VMM: yes\n","llama_model_loader: loaded meta data with 24 key-value pairs and 291 tensors from llama-2-7b-combined_datasets/llama-2-7b-combined_datasets.Q5_K_M.gguf (version GGUF V3 (latest))\n","llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.\n","llama_model_loader: - kv 0: general.architecture str = llama\n","llama_model_loader: - kv 1: general.name str = LLaMA v2\n","llama_model_loader: - kv 2: llama.context_length u32 = 4096\n","llama_model_loader: - kv 3: llama.embedding_length u32 = 4096\n","llama_model_loader: - kv 4: llama.block_count u32 = 32\n","llama_model_loader: - kv 5: llama.feed_forward_length u32 = 11008\n","llama_model_loader: - kv 6: llama.rope.dimension_count u32 = 128\n","llama_model_loader: - kv 7: llama.attention.head_count u32 = 32\n","llama_model_loader: - kv 8: llama.attention.head_count_kv u32 = 32\n","llama_model_loader: - kv 9: llama.attention.layer_norm_rms_epsilon f32 = 0.000010\n","llama_model_loader: - kv 10: llama.rope.freq_base f32 = 10000.000000\n","llama_model_loader: - kv 11: general.file_type u32 = 17\n","llama_model_loader: - kv 12: tokenizer.ggml.model str = llama\n","llama_model_loader: - kv 13: tokenizer.ggml.tokens arr[str,32000] = [\"\", \"\", \"\", \"<0x00>\", \"<...\n","llama_model_loader: - kv 14: tokenizer.ggml.scores arr[f32,32000] = [0.000000, 0.000000, 0.000000, 0.0000...\n","llama_model_loader: - kv 15: tokenizer.ggml.token_type arr[i32,32000] = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...\n","llama_model_loader: - kv 16: tokenizer.ggml.bos_token_id u32 = 1\n","llama_model_loader: - kv 17: tokenizer.ggml.eos_token_id u32 = 2\n","llama_model_loader: - kv 18: tokenizer.ggml.unknown_token_id u32 = 0\n","llama_model_loader: - kv 19: tokenizer.ggml.padding_token_id u32 = 2\n","llama_model_loader: - kv 20: tokenizer.ggml.add_bos_token bool = true\n","llama_model_loader: - kv 21: tokenizer.ggml.add_eos_token bool = false\n","llama_model_loader: - kv 22: tokenizer.chat_template str = {% if messages[0]['role'] == 'system'...\n","llama_model_loader: - kv 23: general.quantization_version u32 = 2\n","llama_model_loader: - type f32: 65 tensors\n","llama_model_loader: - type q5_K: 193 tensors\n","llama_model_loader: - type q6_K: 33 tensors\n","llm_load_vocab: special tokens definition check successful ( 259/32000 ).\n","llm_load_print_meta: format = GGUF V3 (latest)\n","llm_load_print_meta: arch = llama\n","llm_load_print_meta: vocab type = SPM\n","llm_load_print_meta: n_vocab = 32000\n","llm_load_print_meta: n_merges = 0\n","llm_load_print_meta: n_ctx_train = 4096\n","llm_load_print_meta: n_embd = 4096\n","llm_load_print_meta: n_head = 32\n","llm_load_print_meta: n_head_kv = 32\n","llm_load_print_meta: n_layer = 32\n","llm_load_print_meta: n_rot = 128\n","llm_load_print_meta: n_embd_head_k = 128\n","llm_load_print_meta: n_embd_head_v = 128\n","llm_load_print_meta: n_gqa = 1\n","llm_load_print_meta: n_embd_k_gqa = 4096\n","llm_load_print_meta: n_embd_v_gqa = 4096\n","llm_load_print_meta: f_norm_eps = 0.0e+00\n","llm_load_print_meta: f_norm_rms_eps = 1.0e-05\n","llm_load_print_meta: f_clamp_kqv = 0.0e+00\n","llm_load_print_meta: f_max_alibi_bias = 0.0e+00\n","llm_load_print_meta: n_ff = 11008\n","llm_load_print_meta: n_expert = 0\n","llm_load_print_meta: n_expert_used = 0\n","llm_load_print_meta: rope scaling = linear\n","llm_load_print_meta: freq_base_train = 10000.0\n","llm_load_print_meta: freq_scale_train = 1\n","llm_load_print_meta: n_yarn_orig_ctx = 4096\n","llm_load_print_meta: rope_finetuned = unknown\n","llm_load_print_meta: model type = 7B\n","llm_load_print_meta: model ftype = Q5_K - Medium\n","llm_load_print_meta: model params = 6.74 B\n","llm_load_print_meta: model size = 4.45 GiB (5.68 BPW) \n","llm_load_print_meta: general.name = LLaMA v2\n","llm_load_print_meta: BOS token = 1 ''\n","llm_load_print_meta: EOS token = 2 ''\n","llm_load_print_meta: UNK token = 0 ''\n","llm_load_print_meta: PAD token = 2 ''\n","llm_load_print_meta: LF token = 13 '<0x0A>'\n","llm_load_tensors: ggml ctx size = 0.22 MiB\n","llm_load_tensors: offloading 32 repeating layers to GPU\n","llm_load_tensors: offloading non-repeating layers to GPU\n","llm_load_tensors: offloaded 33/33 layers to GPU\n","llm_load_tensors: CPU buffer size = 85.94 MiB\n","llm_load_tensors: CUDA0 buffer size = 4474.94 MiB\n","..................................................................................................\n","llama_new_context_with_model: n_ctx = 512\n","llama_new_context_with_model: freq_base = 10000.0\n","llama_new_context_with_model: freq_scale = 1\n","llama_kv_cache_init: CUDA0 KV buffer size = 256.00 MiB\n","llama_new_context_with_model: KV self size = 256.00 MiB, K (f16): 128.00 MiB, V (f16): 128.00 MiB\n","llama_new_context_with_model: CUDA_Host input buffer size = 10.01 MiB\n","llama_new_context_with_model: CUDA0 compute buffer size = 70.50 MiB\n","llama_new_context_with_model: CUDA_Host compute buffer size = 8.00 MiB\n","llama_new_context_with_model: graph splits (measure): 3\n","\n","system_info: n_threads = 24 / 48 | AVX = 1 | AVX_VNNI = 0 | AVX2 = 1 | AVX512 = 1 | AVX512_VBMI = 0 | AVX512_VNNI = 1 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | MATMUL_INT8 = 0 | \n","sampling: \n","\trepeat_last_n = 64, repeat_penalty = 1.100, frequency_penalty = 0.000, presence_penalty = 0.000\n","\ttop_k = 40, tfs_z = 1.000, top_p = 0.950, min_p = 0.050, typical_p = 1.000, temp = 0.800\n","\tmirostat = 0, mirostat_lr = 0.100, mirostat_ent = 5.000\n","sampling order: \n","CFG -> Penalties -> top_k -> tfs_z -> typical_p -> top_p -> min_p -> temperature \n","generate: n_ctx = 512, n_batch = 512, n_predict = 128, n_keep = 0\n","\n","\n","\u001b[33m what is deep learning\u001b[0m in machine learning?\n"," Summarize the key characteristics and applications of deep learning.\n","\n","Deep learning is a subset of machine learning that involves the use of artificial neural networks to model and analyze complex data sets. It is based on the idea that a neural network with multiple layers can learn and represent more abstract and sophisticated patterns in data than a single-layer network. Deep learning has been successful in solving many challenging tasks in computer vision, natural language processing, speech recognition, and other areas of machine learning.\n","\n","Key characteristics of deep learning:\n","\n","1. Multi-layered neural networks: Deep learning\n","llama_print_timings: load time = 895.86 ms\n","llama_print_timings: sample time = 51.51 ms / 128 runs ( 0.40 ms per token, 2485.20 tokens per second)\n","llama_print_timings: prompt eval time = 38.97 ms / 5 tokens ( 7.79 ms per token, 128.32 tokens per second)\n","llama_print_timings: eval time = 3130.83 ms / 127 runs ( 24.65 ms per token, 40.56 tokens per second)\n","llama_print_timings: total time = 3251.49 ms / 132 tokens\n","Log end\n"]}],"source":["# Run text generation using a specific quantized model in llama.cpp.\n","# 1. Prompt the user to enter text for the model to process.\n","# 2. Construct the model file path ('qtype') using MODEL_NAME and a specified quantization method.\n","# 3. Execute the llama.cpp main program with the constructed model path,\n","# setting the number of tokens to generate, enabling color, limiting the number of generated lines,\n","# and using the user-provided prompt.\n","\n","prompt = input(\"Enter your prompt: \")\n","\n","# Construct the path to the model file with the quantization method 'Q5_K_M'\n","qtype = f\"{MODEL_NAME}/{MODEL_NAME.lower()}.Q5_K_M.gguf\"\n","\n","# Execute the llama.cpp main program with specified parameters\n","!./llama.cpp/main -m {qtype} -n 128 --color -ngl 35 -p \"{prompt}\""]},{"cell_type":"markdown","metadata":{"id":"Ar8pO7bb80US"},"source":["## Push to hub"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":188,"referenced_widgets":["042396eff4ce41bf9729880c8dd9144f","88e20b09bb994e0dbd092e3c625d5a1a","0e8715a0c48c4e0883fe45ac9794dc42","67965e7b79f64ec288167f9affb45d81","bfdd34dd4a294d3f9c8bb05b27e108f2","32a0ec8495224b92ad1c48613bc03891","77c4b22e3ed3478487e04edf011475ce","8b949ab00d9c41729973b0c9cc689493","37ea5d15761f44fdbcd1ddb8f582936a","eeee199faf7b4464997f3317f3973a19","306d81e5c3414519b7ccbe2329a1c3be","f79521693d2d42d180534ed94994f6fe"]},"executionInfo":{"elapsed":141900,"status":"ok","timestamp":1707925523299,"user":{"displayName":"szehanz","userId":"16137883221268059572"},"user_tz":-480},"id":"UOyKfUD-8jmh","outputId":"4093844f-7f46-484f-922a-f902fc089242"},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"f79521693d2d42d180534ed94994f6fe","version_major":2,"version_minor":0},"text/plain":["llama-2-7b-combined_datasets.Q5_K_M.gguf: 0%| | 0.00/4.78G [00:00, ?B/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"text/plain":["'https://huggingface.co/ssoh/llama-2-7b-combined_datasets-GGUF/tree/main/'"]},"execution_count":10,"metadata":{},"output_type":"execute_result"}],"source":["# Create a new model repository on Hugging Face and upload gguf files.\n","# 1. Initialize the HfApi object to interact with Hugging Face's API.\n","# 2. Define the username associated with the Hugging Face account.\n","# 3. Use create_repo to create an empty repository for the model,\n","# allowing for the repository to exist already with exist_ok=True.\n","# 4. Upload all gguf files from the local MODEL_NAME directory to the newly\n","# created repository on Hugging Face, using upload_folder with a filter\n","# to only include files with a .gguf extension.\n","\n","\n","api = HfApi()\n","username = \"ssoh\"\n","\n","\n","# Create an empty repository on Hugging Face\n","create_repo(\n"," repo_id=f\"{username}/{MODEL_NAME}-GGUF\",\n"," repo_type=\"model\",\n"," exist_ok=True,\n",")\n","\n","\n","# Upload gguf model files to the repository\n","api.upload_folder(\n"," folder_path=MODEL_NAME,\n"," repo_id=f\"{username}/{MODEL_NAME}-GGUF\",\n"," allow_patterns=\"*.gguf\",\n",")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"yE7yfvzvwaEj"},"outputs":[],"source":[]}],"metadata":{"accelerator":"GPU","colab":{"gpuType":"T4","provenance":[{"file_id":"1p68M5E5fZ7kSa7nA-e-20489nuFSXVp2","timestamp":1706370554565},{"file_id":"119-Y6eV94vuFqWLh8t8NBB-Uf54eCl3i","timestamp":1700232595435},{"file_id":"1PEQyJO1-f6j0S_XJ8DV50NkpzasXkrzd","timestamp":1699194238655}]},"kernelspec":{"display_name":"Python 3 (ipykernel)","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.11.0"},"widgets":{"application/vnd.jupyter.widget-state+json":{"01ff6ffe93d64b2f8d5dd55b9e3cfcc6":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"0786fc506a7640a287016991f57d3768":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_0ba6b1d30c4642648fcaa57af3c52f49","placeholder":"","style":"IPY_MODEL_23176fa0130348c5bc1b0deb591709f3","value":"model.safetensors.index.json: 100%"}},"08400a144d3c497a94ae4d84e72a1067":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"0af30e36f2524c1084c1237948f3b18e":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_963973c1e970410cb2ba97e9fb4ef511","placeholder":"","style":"IPY_MODEL_ca8d07b9b454471e883d43e03b475a9f","value":" 26.8k/26.8k [00:00<00:00, 389kB/s]"}},"0ba4f20507af472a8b1504de483f7800":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_187745df1f154e7da09a0c646a22cebb","IPY_MODEL_20cc750b1bde4efdb3c3a5b5321222b4","IPY_MODEL_77c0d63f6cd6494daf7e94cfe0397e45"],"layout":"IPY_MODEL_01ff6ffe93d64b2f8d5dd55b9e3cfcc6"}},"0ba6b1d30c4642648fcaa57af3c52f49":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"0cda6495ef4b4c9ab3eeff2392d89163":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"11b88a389a4042b5ad5ba06f51ac22e0":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_2cb9cfbde1e0483c97a2c531e0034adf","placeholder":"","style":"IPY_MODEL_de756c426cf0492bb122a45b94d4bbe7","value":"
Copy a token from your Hugging Face\ntokens page and paste it below. Immediately click login after copying\nyour token or it might be stored in plain text in this notebook file.
"}},"14d0ff6e07a148c0b65224af86af6b95":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"187745df1f154e7da09a0c646a22cebb":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_638517f3c94445c7b610b84744859ef8","placeholder":"","style":"IPY_MODEL_5206f9fc25234586b735fc9c65e6b19a","value":"generation_config.json: 100%"}},"19b8b7692cfd46eca5abb50ac2854262":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"19d3adedf1a245f69a2498b1838f6415":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_31ffba7793b944cd80bec0fb6ac2fbbe","IPY_MODEL_1ae848be349a41239a7ba6efadc82edf","IPY_MODEL_9a33d92ad0604eff9ac56944586facbb"],"layout":"IPY_MODEL_293d425206684064b0572e990a815cee"}},"1ae848be349a41239a7ba6efadc82edf":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_8ae8a9d03adc476a8dd64f09e194907d","max":2,"min":0,"orientation":"horizontal","style":"IPY_MODEL_aeb94dbf3f8a4b43bb07c833af3b98c9","value":2}},"1c6e5dd4ca3446ec8cf8a03b85ad57dc":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_0786fc506a7640a287016991f57d3768","IPY_MODEL_3af05a188f40469dbd52fda55c7a9e22","IPY_MODEL_0af30e36f2524c1084c1237948f3b18e"],"layout":"IPY_MODEL_dfe1c2648a564676bfe1e09bda61d439"}},"1ea12323b1244c768a17a6ed5420f854":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"1f9e8ddb08814b2db7761478eb9069f5":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_7982d1d315964d138f31643db445b48a","max":614,"min":0,"orientation":"horizontal","style":"IPY_MODEL_67346bc716384552a69d1afdc844db00","value":614}},"20cc750b1bde4efdb3c3a5b5321222b4":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_a199f20edde447829b17804b17af2fe5","max":188,"min":0,"orientation":"horizontal","style":"IPY_MODEL_447f608108364159ab7ed546ad02559a","value":188}},"21556be54ed34b15b909bf8e7b8fd93a":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_b8113970ea7245e9890221d4e4cf5e8e","placeholder":"","style":"IPY_MODEL_d3224d16458249a3bfd29253c2d6a86f","value":"\nPro Tip: If you don't already have one, you can create a dedicated\n'notebooks' token with 'write' access, that you can then easily reuse for all\nnotebooks.
"}},"2254fe28315f43a99c3579195c0c0008":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"22e8bae9ff6744bca3e90d46d220106f":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"23176fa0130348c5bc1b0deb591709f3":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"236b3417f0e94039a1a449e7ab96738b":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"25543b118c8e423aa7fd8c898d5e1256":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"2924e96aa10346efb39684e5369e2170":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"LabelModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"LabelModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"LabelView","description":"","description_tooltip":null,"layout":"IPY_MODEL_bce8d1501218410ba8b042aeb3f0fc26","placeholder":"","style":"IPY_MODEL_405603de026d484ab283f053f4b17c6d","value":"Your token has been saved to /root/.cache/huggingface/token"}},"293d425206684064b0572e990a815cee":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"29f303aa6ac8464aa91124c3fe659379":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"2cb9cfbde1e0483c97a2c531e0034adf":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"2dce1978d19e4de3a6a1b1cef6ed518f":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"3076e4abb7fe427fa4fccb43e9f3371e":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"30d47a9da70a4cf5a7e597f13d28d526":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"31ffba7793b944cd80bec0fb6ac2fbbe":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_7ee17b5879ec4909b7b616b79d5eab36","placeholder":"","style":"IPY_MODEL_d8b847adb46d4049a4b43bba2a0e06da","value":"Downloading shards: 100%"}},"32a57f9df45b41da91e1d638f531505d":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"3af05a188f40469dbd52fda55c7a9e22":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_82829039182948efb800703e3e21d96d","max":26788,"min":0,"orientation":"horizontal","style":"IPY_MODEL_32a57f9df45b41da91e1d638f531505d","value":26788}},"3e4a06b9b13444e3b82e0c3c26e17b8f":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"CheckboxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"CheckboxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"CheckboxView","description":"Add token as git credential?","description_tooltip":null,"disabled":false,"indent":true,"layout":"IPY_MODEL_f91ebc43c1344e8688e2eeb2771c7b65","style":"IPY_MODEL_ea00aa1eb73949fc94083f1d31372915","value":true}},"405603de026d484ab283f053f4b17c6d":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"42262413163d49fd8902c275c13da1e6":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_cf370d3015b04b6caa9cbfb8f21dd5e7","placeholder":"","style":"IPY_MODEL_1ea12323b1244c768a17a6ed5420f854","value":" 9.98G/9.98G [01:29<00:00, 126MB/s]"}},"441c37014e6b4c8995e7a5305f96fa38":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"447f608108364159ab7ed546ad02559a":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"46e41557d0bc4cb4a03c6894fcc57d0e":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"4cee3e23bcbd4643ba542d94b82dbfd2":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"5206f9fc25234586b735fc9c65e6b19a":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"52f2b6adb9904cbeb014387429c0d1ad":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_b61ac64b2a0c4beb8ea209782b9dd09b","IPY_MODEL_9e9c2d712ae84d3aa87fbe433ae0701b","IPY_MODEL_fe4d028a78e64a4d8b47f8bc8b8ec15d"],"layout":"IPY_MODEL_88a7aeaf3b2547ea91cf20ed2f1a3dc0"}},"537d173a4313491f8f89f799f1dc7b2a":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"541ef20ab6f34337a2d6d20098f6fef5":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"LabelModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"LabelModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"LabelView","description":"","description_tooltip":null,"layout":"IPY_MODEL_b0f0ac261e364edd99d7b75e747e2c47","placeholder":"","style":"IPY_MODEL_ff9f726db3434e3184e723d5da884d0a","value":"Token is valid (permission: write)."}},"55e506bd03d24dd7b24129dc64da9c01":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"5e5b95c9801443cdbce9c8e629c33589":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"PasswordModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"PasswordModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"PasswordView","continuous_update":true,"description":"Token:","description_tooltip":null,"disabled":false,"layout":"IPY_MODEL_29f303aa6ac8464aa91124c3fe659379","placeholder":"","style":"IPY_MODEL_3076e4abb7fe427fa4fccb43e9f3371e","value":""}},"62f1cf19fe204aa4a424248e807ce061":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"638517f3c94445c7b610b84744859ef8":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"6430379d01874ec3a7cf9fea59c42914":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ButtonModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ButtonModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ButtonView","button_style":"","description":"Login","disabled":false,"icon":"","layout":"IPY_MODEL_2dce1978d19e4de3a6a1b1cef6ed518f","style":"IPY_MODEL_e81c501824f94e7d839684fafbc65b31","tooltip":""}},"67346bc716384552a69d1afdc844db00":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"6edf40f558f54d8b82d949f83557d609":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"LabelModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"LabelModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"LabelView","description":"","description_tooltip":null,"layout":"IPY_MODEL_08400a144d3c497a94ae4d84e72a1067","placeholder":"","style":"IPY_MODEL_976a3440d2c3423c8be835b0d6f56492","value":"Connecting..."}},"77c0d63f6cd6494daf7e94cfe0397e45":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_4cee3e23bcbd4643ba542d94b82dbfd2","placeholder":"","style":"IPY_MODEL_25543b118c8e423aa7fd8c898d5e1256","value":" 188/188 [00:00<00:00, 12.3kB/s]"}},"77daad9def9f4254933afdeb7202e5d2":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"7982d1d315964d138f31643db445b48a":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"7c701d53772344f6a057cd43742d47f5":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_b9e4e59acd4d468393f42857d5635e25","placeholder":"","style":"IPY_MODEL_30d47a9da70a4cf5a7e597f13d28d526","value":"Loading checkpoint shards: 100%"}},"7ee17b5879ec4909b7b616b79d5eab36":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"8080eb1edf8f44f69b5f218046715f36":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_e2df35aaf7e0420b9524d533cb122521","max":2,"min":0,"orientation":"horizontal","style":"IPY_MODEL_d90c3a424bac4bb09e99339c28df2eda","value":2}},"82829039182948efb800703e3e21d96d":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"83127281047a429a846b9bb3b3209760":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"86014f569ee34895badef4acfe958051":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"86616a0d2f9d4da1a75e00d092ca9d4d":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_a7a17a5883784ed9961437d0102fd9a4","IPY_MODEL_9934540648a444a09f0783843ab2d901","IPY_MODEL_42262413163d49fd8902c275c13da1e6"],"layout":"IPY_MODEL_83127281047a429a846b9bb3b3209760"}},"88a7aeaf3b2547ea91cf20ed2f1a3dc0":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"8ae8a9d03adc476a8dd64f09e194907d":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"963973c1e970410cb2ba97e9fb4ef511":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"976a3440d2c3423c8be835b0d6f56492":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"9934540648a444a09f0783843ab2d901":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_f702ae2d46834e9b934a40abca49a990","max":9976576152,"min":0,"orientation":"horizontal","style":"IPY_MODEL_14d0ff6e07a148c0b65224af86af6b95","value":9976576152}},"9a33d92ad0604eff9ac56944586facbb":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_537d173a4313491f8f89f799f1dc7b2a","placeholder":"","style":"IPY_MODEL_55e506bd03d24dd7b24129dc64da9c01","value":" 2/2 [01:56<00:00, 52.47s/it]"}},"9c7550ec29c34ef2b674a3667ebd740e":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_236b3417f0e94039a1a449e7ab96738b","placeholder":"","style":"IPY_MODEL_77daad9def9f4254933afdeb7202e5d2","value":"config.json: 100%"}},"9e4d26b87e1243f3ae744ddbbe2c5b51":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"9e9c2d712ae84d3aa87fbe433ae0701b":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_86014f569ee34895badef4acfe958051","max":3500296424,"min":0,"orientation":"horizontal","style":"IPY_MODEL_22e8bae9ff6744bca3e90d46d220106f","value":3500296424}},"a066a28914bc46cc85ebcb7d90d27fbe":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"a199f20edde447829b17804b17af2fe5":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"a39b2a49ff814181aa0df84c57e9245b":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"a7a17a5883784ed9961437d0102fd9a4":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_ae173a50f4374c7fa55d8e360d30d4d1","placeholder":"","style":"IPY_MODEL_b93a21bcaf6344c49a0ab8e2a887922c","value":"model-00001-of-00002.safetensors: 100%"}},"a7ef8ff133144d4b9817800e5b4739a4":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"a9628200c0a34cccacdb0ea66e200b87":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_0cda6495ef4b4c9ab3eeff2392d89163","placeholder":"","style":"IPY_MODEL_9e4d26b87e1243f3ae744ddbbe2c5b51","value":" 2/2 [00:58<00:00, 26.87s/it]"}},"a96de5c1f80f43d8b0b689d5db0fa248":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"ae173a50f4374c7fa55d8e360d30d4d1":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"aeb94dbf3f8a4b43bb07c833af3b98c9":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"b0f0ac261e364edd99d7b75e747e2c47":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"b4ed4d5e266a4cd5b9011436b4e92951":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_7c701d53772344f6a057cd43742d47f5","IPY_MODEL_8080eb1edf8f44f69b5f218046715f36","IPY_MODEL_a9628200c0a34cccacdb0ea66e200b87"],"layout":"IPY_MODEL_2254fe28315f43a99c3579195c0c0008"}},"b577aeffe358446ea41e4b3c58b80641":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_441c37014e6b4c8995e7a5305f96fa38","placeholder":"","style":"IPY_MODEL_a39b2a49ff814181aa0df84c57e9245b","value":" 614/614 [00:00<00:00, 15.7kB/s]"}},"b61ac64b2a0c4beb8ea209782b9dd09b":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_a066a28914bc46cc85ebcb7d90d27fbe","placeholder":"","style":"IPY_MODEL_a96de5c1f80f43d8b0b689d5db0fa248","value":"model-00002-of-00002.safetensors: 100%"}},"b634ae14caf84bc99dcafd3a70b7a383":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"b64f26ac024c46eabfc4728586369130":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"LabelModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"LabelModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"LabelView","description":"","description_tooltip":null,"layout":"IPY_MODEL_a7ef8ff133144d4b9817800e5b4739a4","placeholder":"","style":"IPY_MODEL_ba4cf32b2f71428282721e7818b34a5a","value":"Login successful"}},"b8113970ea7245e9890221d4e4cf5e8e":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"b93a21bcaf6344c49a0ab8e2a887922c":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"b9e4e59acd4d468393f42857d5635e25":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"ba4cf32b2f71428282721e7818b34a5a":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"bce8d1501218410ba8b042aeb3f0fc26":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"c3d08bc595a74c3180a7a83afc569584":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"VBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"VBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"VBoxView","box_style":"","children":["IPY_MODEL_541ef20ab6f34337a2d6d20098f6fef5","IPY_MODEL_fe46e1cf697f4b1fab764104be32da95","IPY_MODEL_2924e96aa10346efb39684e5369e2170","IPY_MODEL_b64f26ac024c46eabfc4728586369130"],"layout":"IPY_MODEL_cad60b6f14f249c187d573dd3a4428e0"}},"ca8d07b9b454471e883d43e03b475a9f":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"cad60b6f14f249c187d573dd3a4428e0":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":"center","align_self":null,"border":null,"bottom":null,"display":"flex","flex":null,"flex_flow":"column","grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":"50%"}},"cf370d3015b04b6caa9cbfb8f21dd5e7":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"d3224d16458249a3bfd29253c2d6a86f":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"d8b847adb46d4049a4b43bba2a0e06da":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"d90c3a424bac4bb09e99339c28df2eda":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"de756c426cf0492bb122a45b94d4bbe7":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"df0d8231953b44f1bf8e6d2cd39b2f66":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_9c7550ec29c34ef2b674a3667ebd740e","IPY_MODEL_1f9e8ddb08814b2db7761478eb9069f5","IPY_MODEL_b577aeffe358446ea41e4b3c58b80641"],"layout":"IPY_MODEL_19b8b7692cfd46eca5abb50ac2854262"}},"dfe1c2648a564676bfe1e09bda61d439":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e2df35aaf7e0420b9524d533cb122521":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e81c501824f94e7d839684fafbc65b31":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ButtonStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ButtonStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","button_color":null,"font_weight":""}},"ea00aa1eb73949fc94083f1d31372915":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"f702ae2d46834e9b934a40abca49a990":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"f81ada25e7ff4f5da6b3f6c6e73590e4":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"f91ebc43c1344e8688e2eeb2771c7b65":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"fe46e1cf697f4b1fab764104be32da95":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"LabelModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"LabelModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"LabelView","description":"","description_tooltip":null,"layout":"IPY_MODEL_f81ada25e7ff4f5da6b3f6c6e73590e4","placeholder":"","style":"IPY_MODEL_62f1cf19fe204aa4a424248e807ce061","value":"Your token has been saved in your configured git credential helpers (store)."}},"fe4d028a78e64a4d8b47f8bc8b8ec15d":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_b634ae14caf84bc99dcafd3a70b7a383","placeholder":"","style":"IPY_MODEL_46e41557d0bc4cb4a03c6894fcc57d0e","value":" 3.50G/3.50G [00:26<00:00, 176MB/s]"}},"ff9f726db3434e3184e723d5da884d0a":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}}}}},"nbformat":4,"nbformat_minor":0}
\ No newline at end of file
+{"cells":[{"cell_type":"markdown","source":["## Fine-tuned the MCQ-tuned model using a Custom Summarisation + QnA dataset to create this Integrated model and then converted it to GGUF format"],"metadata":{"id":"qlvMWD587R0w"}},{"cell_type":"markdown","source":["---"],"metadata":{"id":"zMzaz60DvqTR"}},{"cell_type":"markdown","metadata":{"id":"wAQMA1-DKZZ5"},"source":["# Summarisation + QnA Custom Dataset Creation\n","\n","## 1. Introduction\n","\n","High-quality data is fundamental for producing a good model; the higher the quality of the data, the better the resulting model. The following steps outline the process of creating a dataset specifically for fine-tuning our Llama2 model.\n","\n","\n","\n","![](https://i.imgur.com/IDNhAWH.png)\n","\n","\n","There are several types of datasets that can be used to fine-tune Large Language Models (LLMs):\n","\n","1. **Instruction Datasets:** These datasets contain direct instructions or prompts followed by the correct or expected outputs.\n","\n","2. **Raw Completion:** This involves providing a prompt to the model and letting it generate a response without any predefined correct answer.\n","\n","3. **Preference Datasets:** These datasets include human feedback in the form of preferences, where annotators compare pairs of model outputs to determine which is better.\n","\n","4. **Human Feedback Data:** This is specific to Reinforcement Learning from Human Feedback (RLHF) and involves direct feedback on the model's outputs from human annotators.\n","\n","5. **Demonstration Data:** Also used in RLHF, these datasets consist of examples showing ideal model outputs or actions, typically created by humans.\n","\n","6. **Reward Modeling Data:** Used to train a reward model in RLHF, this dataset predicts human feedback on model outputs based on actual feedback data.\n","\n","7. **Dialogue Data:** Particularly relevant for conversational AI, this includes annotated conversations that indicate the quality of responses or provide corrections.\n","\n","\n","---\n","\n","\n","\n","* Typically, an instruction dataset is utilized for fine-tuning the Llama 2 Model. Since we are focusing on Supervised Fine Tuning, the instruction dataset becomes our primary choice.\n","\n","Therefore, we have 2 options:\n","\n","1. Create our own Instruction Dataset.\n","2. Modify an existing instruction dataset, which involves filtering, modifying, and enriching it.\n","\n","We have decided to proceed with the 1st option: creating our own Instruction Dataset.\n","\n","* This will involve prompt engineering and incorporating sanity checks to ensure quality and relevance."]},{"cell_type":"markdown","metadata":{"id":"hU_mUK-nol-t"},"source":["## 2. Load and analyze the dataset"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8P7g6eHuxxKe","outputId":"53c785e0-5e95-42d0-a973-17aaf53371d2"},"outputs":[{"name":"stderr","output_type":"stream","text":["huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n","To disable this warning, you can either:\n","\t- Avoid using `tokenizers` before the fork if possible\n","\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n"]},{"name":"stdout","output_type":"stream","text":["\u001b[31mERROR: Could not find a version that satisfies the requirement faiss-gpu (from versions: none)\u001b[0m\u001b[31m\n","\u001b[0m\u001b[31mERROR: No matching distribution found for faiss-gpu\u001b[0m\u001b[31m\n","\u001b[0m"]}],"source":["# Install libraries\n","!pip install -q datasets transformers sentence_transformers faiss-gpu huggingface_hub"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"KKb-ikj4J-in"},"outputs":[],"source":["# Import the required libraries\n","import json\n","import sys\n","import pandas as pd\n","from datasets import Dataset, DatasetDict, load_dataset\n","\n","from transformers import AutoTokenizer\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","\n","from sentence_transformers import SentenceTransformer\n","import faiss\n","from tqdm.autonotebook import tqdm\n","import numpy as np"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"bGi9FdmhdBDg","outputId":"33a7788a-741a-47f5-9093-eaae5aaa0525"},"outputs":[{"name":"stdout","output_type":"stream","text":["DatasetDict({\n"," train: Dataset({\n"," features: ['instruction', 'input_content', 'expected_output'],\n"," num_rows: 448\n"," })\n"," test: Dataset({\n"," features: ['instruction', 'input_content', 'expected_output'],\n"," num_rows: 56\n"," })\n"," val: Dataset({\n"," features: ['instruction', 'input_content', 'expected_output'],\n"," num_rows: 56\n"," })\n","})\n"]}],"source":["# Load JSON data from a file\n","with open(\"my_data_non_MCQ.json\", \"r\") as f:\n"," data = json.load(f)\n","\n","# Create a Pandas DataFrame from the list of dictionaries\n","df = pd.DataFrame(data)\n","\n","# Calculate the number of rows for each dataset split\n","num_rows = len(df)\n","train_end = int(num_rows * 0.8) # 80% for training\n","test_end = train_end + int(num_rows * 0.1) # 10% for testing\n","\n","# Split the DataFrame into training, testing, and validation sets\n","df_train = df[:train_end]\n","df_test = df[train_end:test_end]\n","df_val = df[test_end:] # Ensures the remainder is used for validation\n","\n","# Create Datasets from the DataFrames\n","dataset_train = Dataset.from_pandas(df_train)\n","dataset_test = Dataset.from_pandas(df_test)\n","dataset_val = Dataset.from_pandas(df_val)\n","\n","# Create a DatasetDict containing the split datasets\n","dataset = DatasetDict({\n"," 'train': dataset_train,\n"," 'test': dataset_test,\n"," 'val': dataset_val\n","})\n","\n","# Print the structure of the created DatasetDict\n","print(dataset)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":719},"id":"-MOvcr5mD8li","outputId":"755ebe31-20bc-42e1-feb2-e43e76a03373"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
instruction
\n","
input_content
\n","
expected_output
\n","
\n"," \n"," \n","
\n","
0
\n","
Summarize the concept and applications of AI
\n","
AI refers to the development of computer syste...
\n","
AI, or artificial intelligence, involves the c...
\n","
\n","
\n","
1
\n","
Summarize the concept and applications of Mach...
\n","
Machine Learning is a subset of AI that focuse...
\n","
Machine Learning is a branch of AI that enable...
\n","
\n","
\n","
2
\n","
Summarize the concept and applications of Deep...
\n","
Deep Learning is a subset of Machine Learning ...
\n","
Deep Learning, a subset of Machine Learning, e...
\n","
\n","
\n","
3
\n","
Summarize the differences between AI, Machine ...
\n","
\n","
AI, Machine Learning, and Deep Learning are in...
\n","
\n","
\n","
4
\n","
Summarize the concept and structure of artific...
\n","
Artificial neural networks are built on the pr...
\n","
Artificial neural networks are structured base...
\n","
\n","
\n","
...
\n","
...
\n","
...
\n","
...
\n","
\n","
\n","
443
\n","
Summarize the considerations when deciding to ...
\n","
When considering whether to use deep learning ...
\n","
Considerations when deciding to use deep learn...
\n","
\n","
\n","
444
\n","
Summarize the concept of Machine Learning
\n","
Machine Learning is a subset of Artificial Int...
\n","
Machine Learning is a branch of AI that utiliz...
\n","
\n","
\n","
445
\n","
Summarize the applications of Machine Learning
\n","
Machine Learning has various applications acro...
\n","
Machine Learning finds applications in image r...
\n","
\n","
\n","
446
\n","
Summarize the concept of Image Recognition in ...
\n","
Image recognition is one of the applications o...
\n","
In Machine Learning, image recognition is the ...
\n","
\n","
\n","
447
\n","
Summarize the concept of Natural Language Proc...
\n","
Natural Language Processing (NLP) is another a...
\n","
Natural Language Processing (NLP) in Machine L...
\n","
\n"," \n","
\n","
448 rows × 3 columns
\n","
"],"text/plain":[" instruction \\\n","0 Summarize the concept and applications of AI \n","1 Summarize the concept and applications of Mach... \n","2 Summarize the concept and applications of Deep... \n","3 Summarize the differences between AI, Machine ... \n","4 Summarize the concept and structure of artific... \n",".. ... \n","443 Summarize the considerations when deciding to ... \n","444 Summarize the concept of Machine Learning \n","445 Summarize the applications of Machine Learning \n","446 Summarize the concept of Image Recognition in ... \n","447 Summarize the concept of Natural Language Proc... \n","\n"," input_content \\\n","0 AI refers to the development of computer syste... \n","1 Machine Learning is a subset of AI that focuse... \n","2 Deep Learning is a subset of Machine Learning ... \n","3 \n","4 Artificial neural networks are built on the pr... \n",".. ... \n","443 When considering whether to use deep learning ... \n","444 Machine Learning is a subset of Artificial Int... \n","445 Machine Learning has various applications acro... \n","446 Image recognition is one of the applications o... \n","447 Natural Language Processing (NLP) is another a... \n","\n"," expected_output \n","0 AI, or artificial intelligence, involves the c... \n","1 Machine Learning is a branch of AI that enable... \n","2 Deep Learning, a subset of Machine Learning, e... \n","3 AI, Machine Learning, and Deep Learning are in... \n","4 Artificial neural networks are structured base... \n",".. ... \n","443 Considerations when deciding to use deep learn... \n","444 Machine Learning is a branch of AI that utiliz... \n","445 Machine Learning finds applications in image r... \n","446 In Machine Learning, image recognition is the ... \n","447 Natural Language Processing (NLP) in Machine L... \n","\n","[448 rows x 3 columns]"]},"execution_count":23,"metadata":{},"output_type":"execute_result"}],"source":["# Read as pandas DataFrame\n","dataset['train'].to_pandas()"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"7WkFWJSQhKUV","outputId":"5ef5b8f2-d42b-4208-bba6-3986059ae6a3"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
instruction
\n","
input_content
\n","
expected_output
\n","
\n"," \n"," \n","
\n","
0
\n","
Summarize the hyperparameters in Support Vecto...
\n","
We take into account some essential hyperparam...
\n","
Support Vector Machine (SVM) is a machine lear...
\n","
\n","
\n","
1
\n","
Summarize the hyperparameters in XGBoost
\n","
The following essential XGBoost hyperparameter...
\n","
XGBoost is a popular gradient boosting algorit...
\n","
\n","
\n","
2
\n","
Summarize other examples of model hyperparameters
\n","
Some other examples of model hyperparameters i...
\n","
In addition to SVM and XGBoost, other machine ...
\n","
\n","
\n","
3
\n","
Summarize the importance of hyperparameter tun...
\n","
Hyperparameter tuning is crucial in machine le...
\n","
Hyperparameter tuning plays a critical role in...
\n","
\n","
\n","
4
\n","
Summarize the concept and applications of Deep...
\n","
Deep Learning is a type of Machine Learning th...
\n","
Deep Learning is a subset of Machine Learning ...
\n","
\n","
\n","
5
\n","
Explain the use of Deep Learning in image and ...
\n","
Deep learning algorithms are used in image and...
\n","
Deep Learning algorithms play a crucial role i...
\n","
\n","
\n","
6
\n","
Describe the applications of Deep Learning in ...
\n","
Deep Learning algorithms are used for tasks su...
\n","
Deep Learning algorithms find applications in ...
\n","
\n","
\n","
7
\n","
Explain the role of Deep Learning in fraud det...
\n","
Deep Learning algorithms are used in financial...
\n","
Deep Learning algorithms play a vital role in ...
\n","
\n","
\n","
8
\n","
Summarize the concept of artificial neural net...
\n","
Artificial neural networks are built on the pr...
\n","
Artificial neural networks are modeled after h...
\n","
\n","
\n","
9
\n","
Summarize the architecture of artificial neura...
\n","
Artificial neural networks have input layers, ...
\n","
Artificial neural networks consist of input, h...
\n","
\n","
\n","
10
\n","
Differentiate between machine learning and dee...
\n","
Machine learning and deep learning are subsets...
\n","
Machine learning and deep learning are subsets...
\n","
\n","
\n","
11
\n","
Highlight the differences between machine lear...
\n","
Machine learning involves manual extraction of...
\n","
Machine learning requires manual feature extra...
\n","
\n","
\n","
12
\n","
Summarize the concept of Deep Learning
\n","
Deep learning is a branch of machine learning ...
\n","
Deep learning is a subfield of machine learnin...
\n","
\n","
\n","
13
\n","
Explain the architecture of an artificial neur...
\n","
An artificial neural network (ANN) is the basi...
\n","
An artificial neural network (ANN) serves as t...
\n","
\n","
\n","
14
\n","
Discuss the applications of Deep Learning
\n","
Deep learning has found applications in variou...
\n","
Deep learning has been applied to computer vis...
\n","
\n","
\n","
15
\n","
Explain the different types of machine learnin...
\n","
Deep learning employs various machine learning...
\n","
Deep learning encompasses supervised learning,...
\n","
\n","
\n","
16
\n","
Summarize the types of neural networks used in...
\n","
Deep learning models are able to automatically...
\n","
Deep learning models use various types of neur...
\n","
\n","
\n","
17
\n","
Summarize the applications of deep learning in...
\n","
Deep learning models can enable machines to id...
\n","
Deep learning has several applications in comp...
\n","
\n","
\n","
18
\n","
Summarize the applications of deep learning in...
\n","
Deep learning models can enable machines to un...
\n","
Deep learning plays a crucial role in natural ...
\n","
\n","
\n","
19
\n","
Summarize the applications of deep learning in...
\n","
Deep learning models can be used in reinforcem...
\n","
Deep learning is employed in reinforcement lea...
\n","
\n","
\n","
20
\n","
Summarize the concept of Artificial Intelligence
\n","
Artificial Intelligence (AI) is the incorporat...
\n","
Artificial Intelligence (AI) involves incorpor...
\n","
\n","
\n","
21
\n","
Summarize the concept of Machine Learning
\n","
Machine Learning (ML) is the study/process tha...
\n","
Machine Learning (ML) enables systems to learn...
\n","
\n","
\n","
22
\n","
Summarize the concept of Deep Learning
\n","
Deep Learning (DL) is a sub-part of Machine Le...
\n","
Deep Learning (DL) is a sub-part of Machine Le...
\n","
\n","
\n","
23
\n","
Summarize the differences between Artificial I...
\n","
Artificial Intelligence (AI) is the broader fa...
\n","
Artificial Intelligence (AI) encompasses Machi...
\n","
\n","
\n","
24
\n","
Summarize the concept and applications of AI
\n","
AI refers to the development of computer syste...
\n","
AI, or artificial intelligence, involves the c...
\n","
\n","
\n","
25
\n","
Summarize the concept and applications of Mach...
\n","
Machine Learning is a subset of AI that focuse...
\n","
Machine Learning is a branch of AI that enable...
\n","
\n","
\n","
26
\n","
Summarize the concept and applications of Deep...
\n","
Deep Learning is a subfield of Machine Learnin...
\n","
Deep Learning is a subfield of Machine Learnin...
\n","
\n","
\n","
27
\n","
Summarize the common examples of AI applications
\n","
AI has numerous applications across various in...
\n","
AI has a wide range of applications across var...
\n","
\n","
\n","
28
\n","
Summarize the role and responsibilities of an ...
\n","
An AI Engineer is a professional who designs, ...
\n","
An AI Engineer is responsible for designing, d...
\n","
\n","
\n","
29
\n","
Summarize the role and responsibilities of a M...
\n","
A Machine Learning Engineer is a professional ...
\n","
A Machine Learning Engineer is responsible for...
\n","
\n","
\n","
30
\n","
Summarize the role and responsibilities of a D...
\n","
A Deep Learning Engineer is a professional who...
\n","
A Deep Learning Engineer is responsible for de...
\n","
\n","
\n","
31
\n","
Differentiate between the roles of an AI Engin...
\n","
AI Engineers, Machine Learning Engineers, and ...
\n","
AI Engineers, Machine Learning Engineers, and ...
\n","
\n","
\n","
32
\n","
Summarize the concept of Artificial Neural Net...
\n","
Artificial Neural Network (ANN) is a type of n...
\n","
Artificial Neural Network (ANN) is a type of n...
\n","
\n","
\n","
33
\n","
Summarize the concept of Biological Neural Net...
\n","
Biological Neural Network (BNN) is a structure...
\n","
Biological Neural Network (BNN) is a neural ne...
\n","
\n","
\n","
34
\n","
Highlight the differences between Artificial N...
\n","
Artificial Neural Networks (ANNs) and Biologic...
\n","
Artificial Neural Networks (ANNs) and Biologic...
\n","
\n","
\n","
35
\n","
Summarize the overall differences between Arti...
\n","
While ANNs and BNNs share basic components, th...
\n","
Artificial Neural Networks (ANNs) and Biologic...
\n","
\n","
\n","
36
\n","
Summarize the concept of hyperparameter tuning...
\n","
Hyperparameter tuning is the process of select...
\n","
Hyperparameter tuning is the process of findin...
\n","
\n","
\n","
37
\n","
Summarize the different types of hyperparamete...
\n","
Neural networks have several essential hyperpa...
\n","
In neural networks, there are several importan...
\n","
\n","
\n","
38
\n","
Explain the impact of learning rate and epochs...
\n","
Learning rate and epochs are two critical hype...
\n","
Learning rate and epochs are crucial hyperpara...
\n","
\n","
\n","
39
\n","
Describe the role of architecture and activati...
\n","
Architecture and activation function are impor...
\n","
Architecture and activation function are cruci...
\n","
\n","
\n","
40
\n","
Summarize the concept of Hyperparameter Tuning
\n","
Hyperparameter tuning involves finding the bes...
\n","
Hyperparameter tuning is the process of findin...
\n","
\n","
\n","
41
\n","
Explain the advantages and disadvantages of Hy...
\n","
Hyperparameter tuning offers several advantage...
\n","
Hyperparameter tuning provides several advanta...
\n","
\n","
\n","
42
\n","
Discuss the challenges in Hyperparameter Tuning
\n","
Hyperparameter tuning faces several challenges...
\n","
Hyperparameter tuning encounters various chall...
\n","
\n","
\n","
43
\n","
Describe the applications of Hyperparameter Tu...
\n","
Hyperparameter tuning has various applications...
\n","
Hyperparameter tuning finds applications in di...
\n","
\n","
\n","
44
\n","
Summarize the challenges in Deep Learning
\n","
Deep learning has made significant advancement...
\n","
The challenges in deep learning include data a...
\n","
\n","
\n","
45
\n","
Summarize the advantages of Deep Learning
\n","
Deep Learning offers several advantages. Here ...
\n","
Advantages of deep learning include high accur...
\n","
\n","
\n","
46
\n","
Summarize the disadvantages of Deep Learning
\n","
Despite its advantages, Deep Learning also has...
\n","
Disadvantages of deep learning include high co...
\n","
\n","
\n","
47
\n","
Summarize the considerations when deciding to ...
\n","
When deciding whether to use Deep Learning for...
\n","
Considerations when deciding to use Deep Learn...
\n","
\n","
\n","
48
\n","
Summarize the concept of Machine Learning
\n","
Examples of Machine Learning: Machine Learning...
\n","
Machine Learning (ML) is a subset of Artificia...
\n","
\n","
\n","
49
\n","
Summarize the applications of Machine Learning...
\n","
Image recognition: Machine learning algorithms...
\n","
Machine Learning algorithms play a crucial rol...
\n","
\n","
\n","
50
\n","
Summarize the applications of Machine Learning...
\n","
Natural language processing (NLP): Machine lea...
\n","
Machine Learning algorithms are extensively em...
\n","
\n","
\n","
51
\n","
Summarize the applications of Machine Learning...
\n","
Recommendation systems: Machine learning algor...
\n","
Machine Learning algorithms are instrumental i...
\n","
\n","
\n","
52
\n","
Summarize the hyperparameters in Support Vecto...
\n","
Hyperparameters in Support Vector Machine We t...
\n","
In Support Vector Machine (SVM), there are thr...
\n","
\n","
\n","
53
\n","
Summarize the hyperparameters in XGBoost
\n","
Hyperparameters in XGBoost The following essen...
\n","
XGBoost has several important hyperparameters ...
\n","
\n","
\n","
54
\n","
Summarize some examples of model hyperparameters
\n","
Some other examples of model hyperparameters i...
\n","
Model hyperparameters can vary depending on th...
\n","
\n","
\n","
55
\n","
Summarize the importance of hyperparameter tun...
\n","
Hyperparameter tuning is a critical step in ma...
\n","
Hyperparameter tuning plays a crucial role in ...
\n","
\n"," \n","
\n","
"],"text/plain":[" instruction \\\n","0 Summarize the hyperparameters in Support Vecto... \n","1 Summarize the hyperparameters in XGBoost \n","2 Summarize other examples of model hyperparameters \n","3 Summarize the importance of hyperparameter tun... \n","4 Summarize the concept and applications of Deep... \n","5 Explain the use of Deep Learning in image and ... \n","6 Describe the applications of Deep Learning in ... \n","7 Explain the role of Deep Learning in fraud det... \n","8 Summarize the concept of artificial neural net... \n","9 Summarize the architecture of artificial neura... \n","10 Differentiate between machine learning and dee... \n","11 Highlight the differences between machine lear... \n","12 Summarize the concept of Deep Learning \n","13 Explain the architecture of an artificial neur... \n","14 Discuss the applications of Deep Learning \n","15 Explain the different types of machine learnin... \n","16 Summarize the types of neural networks used in... \n","17 Summarize the applications of deep learning in... \n","18 Summarize the applications of deep learning in... \n","19 Summarize the applications of deep learning in... \n","20 Summarize the concept of Artificial Intelligence \n","21 Summarize the concept of Machine Learning \n","22 Summarize the concept of Deep Learning \n","23 Summarize the differences between Artificial I... \n","24 Summarize the concept and applications of AI \n","25 Summarize the concept and applications of Mach... \n","26 Summarize the concept and applications of Deep... \n","27 Summarize the common examples of AI applications \n","28 Summarize the role and responsibilities of an ... \n","29 Summarize the role and responsibilities of a M... \n","30 Summarize the role and responsibilities of a D... \n","31 Differentiate between the roles of an AI Engin... \n","32 Summarize the concept of Artificial Neural Net... \n","33 Summarize the concept of Biological Neural Net... \n","34 Highlight the differences between Artificial N... \n","35 Summarize the overall differences between Arti... \n","36 Summarize the concept of hyperparameter tuning... \n","37 Summarize the different types of hyperparamete... \n","38 Explain the impact of learning rate and epochs... \n","39 Describe the role of architecture and activati... \n","40 Summarize the concept of Hyperparameter Tuning \n","41 Explain the advantages and disadvantages of Hy... \n","42 Discuss the challenges in Hyperparameter Tuning \n","43 Describe the applications of Hyperparameter Tu... \n","44 Summarize the challenges in Deep Learning \n","45 Summarize the advantages of Deep Learning \n","46 Summarize the disadvantages of Deep Learning \n","47 Summarize the considerations when deciding to ... \n","48 Summarize the concept of Machine Learning \n","49 Summarize the applications of Machine Learning... \n","50 Summarize the applications of Machine Learning... \n","51 Summarize the applications of Machine Learning... \n","52 Summarize the hyperparameters in Support Vecto... \n","53 Summarize the hyperparameters in XGBoost \n","54 Summarize some examples of model hyperparameters \n","55 Summarize the importance of hyperparameter tun... \n","\n"," input_content \\\n","0 We take into account some essential hyperparam... \n","1 The following essential XGBoost hyperparameter... \n","2 Some other examples of model hyperparameters i... \n","3 Hyperparameter tuning is crucial in machine le... \n","4 Deep Learning is a type of Machine Learning th... \n","5 Deep learning algorithms are used in image and... \n","6 Deep Learning algorithms are used for tasks su... \n","7 Deep Learning algorithms are used in financial... \n","8 Artificial neural networks are built on the pr... \n","9 Artificial neural networks have input layers, ... \n","10 Machine learning and deep learning are subsets... \n","11 Machine learning involves manual extraction of... \n","12 Deep learning is a branch of machine learning ... \n","13 An artificial neural network (ANN) is the basi... \n","14 Deep learning has found applications in variou... \n","15 Deep learning employs various machine learning... \n","16 Deep learning models are able to automatically... \n","17 Deep learning models can enable machines to id... \n","18 Deep learning models can enable machines to un... \n","19 Deep learning models can be used in reinforcem... \n","20 Artificial Intelligence (AI) is the incorporat... \n","21 Machine Learning (ML) is the study/process tha... \n","22 Deep Learning (DL) is a sub-part of Machine Le... \n","23 Artificial Intelligence (AI) is the broader fa... \n","24 AI refers to the development of computer syste... \n","25 Machine Learning is a subset of AI that focuse... \n","26 Deep Learning is a subfield of Machine Learnin... \n","27 AI has numerous applications across various in... \n","28 An AI Engineer is a professional who designs, ... \n","29 A Machine Learning Engineer is a professional ... \n","30 A Deep Learning Engineer is a professional who... \n","31 AI Engineers, Machine Learning Engineers, and ... \n","32 Artificial Neural Network (ANN) is a type of n... \n","33 Biological Neural Network (BNN) is a structure... \n","34 Artificial Neural Networks (ANNs) and Biologic... \n","35 While ANNs and BNNs share basic components, th... \n","36 Hyperparameter tuning is the process of select... \n","37 Neural networks have several essential hyperpa... \n","38 Learning rate and epochs are two critical hype... \n","39 Architecture and activation function are impor... \n","40 Hyperparameter tuning involves finding the bes... \n","41 Hyperparameter tuning offers several advantage... \n","42 Hyperparameter tuning faces several challenges... \n","43 Hyperparameter tuning has various applications... \n","44 Deep learning has made significant advancement... \n","45 Deep Learning offers several advantages. Here ... \n","46 Despite its advantages, Deep Learning also has... \n","47 When deciding whether to use Deep Learning for... \n","48 Examples of Machine Learning: Machine Learning... \n","49 Image recognition: Machine learning algorithms... \n","50 Natural language processing (NLP): Machine lea... \n","51 Recommendation systems: Machine learning algor... \n","52 Hyperparameters in Support Vector Machine We t... \n","53 Hyperparameters in XGBoost The following essen... \n","54 Some other examples of model hyperparameters i... \n","55 Hyperparameter tuning is a critical step in ma... \n","\n"," expected_output \n","0 Support Vector Machine (SVM) is a machine lear... \n","1 XGBoost is a popular gradient boosting algorit... \n","2 In addition to SVM and XGBoost, other machine ... \n","3 Hyperparameter tuning plays a critical role in... \n","4 Deep Learning is a subset of Machine Learning ... \n","5 Deep Learning algorithms play a crucial role i... \n","6 Deep Learning algorithms find applications in ... \n","7 Deep Learning algorithms play a vital role in ... \n","8 Artificial neural networks are modeled after h... \n","9 Artificial neural networks consist of input, h... \n","10 Machine learning and deep learning are subsets... \n","11 Machine learning requires manual feature extra... \n","12 Deep learning is a subfield of machine learnin... \n","13 An artificial neural network (ANN) serves as t... \n","14 Deep learning has been applied to computer vis... \n","15 Deep learning encompasses supervised learning,... \n","16 Deep learning models use various types of neur... \n","17 Deep learning has several applications in comp... \n","18 Deep learning plays a crucial role in natural ... \n","19 Deep learning is employed in reinforcement lea... \n","20 Artificial Intelligence (AI) involves incorpor... \n","21 Machine Learning (ML) enables systems to learn... \n","22 Deep Learning (DL) is a sub-part of Machine Le... \n","23 Artificial Intelligence (AI) encompasses Machi... \n","24 AI, or artificial intelligence, involves the c... \n","25 Machine Learning is a branch of AI that enable... \n","26 Deep Learning is a subfield of Machine Learnin... \n","27 AI has a wide range of applications across var... \n","28 An AI Engineer is responsible for designing, d... \n","29 A Machine Learning Engineer is responsible for... \n","30 A Deep Learning Engineer is responsible for de... \n","31 AI Engineers, Machine Learning Engineers, and ... \n","32 Artificial Neural Network (ANN) is a type of n... \n","33 Biological Neural Network (BNN) is a neural ne... \n","34 Artificial Neural Networks (ANNs) and Biologic... \n","35 Artificial Neural Networks (ANNs) and Biologic... \n","36 Hyperparameter tuning is the process of findin... \n","37 In neural networks, there are several importan... \n","38 Learning rate and epochs are crucial hyperpara... \n","39 Architecture and activation function are cruci... \n","40 Hyperparameter tuning is the process of findin... \n","41 Hyperparameter tuning provides several advanta... \n","42 Hyperparameter tuning encounters various chall... \n","43 Hyperparameter tuning finds applications in di... \n","44 The challenges in deep learning include data a... \n","45 Advantages of deep learning include high accur... \n","46 Disadvantages of deep learning include high co... \n","47 Considerations when deciding to use Deep Learn... \n","48 Machine Learning (ML) is a subset of Artificia... \n","49 Machine Learning algorithms play a crucial rol... \n","50 Machine Learning algorithms are extensively em... \n","51 Machine Learning algorithms are instrumental i... \n","52 In Support Vector Machine (SVM), there are thr... \n","53 XGBoost has several important hyperparameters ... \n","54 Model hyperparameters can vary depending on th... \n","55 Hyperparameter tuning plays a crucial role in ... "]},"execution_count":24,"metadata":{},"output_type":"execute_result"}],"source":["# Read as pandas DataFrame\n","dataset['test'].to_pandas()"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"03oFFWL4hM4S","outputId":"4ab2203a-2f25-4496-d7f7-76f902f06c36"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
instruction
\n","
input_content
\n","
expected_output
\n","
\n"," \n"," \n","
\n","
0
\n","
Summarize the concept and applications of Deep...
\n","
Deep Learning is a type of Machine Learning th...
\n","
Deep Learning is a subset of Machine Learning ...
\n","
\n","
\n","
1
\n","
Explain the use of Deep Learning in image and ...
\n","
Deep learning algorithms are used in image and...
\n","
Deep Learning algorithms play a crucial role i...
\n","
\n","
\n","
2
\n","
Describe the applications of Deep Learning in ...
\n","
Deep Learning algorithms are used for tasks su...
\n","
Deep Learning algorithms have extensive applic...
\n","
\n","
\n","
3
\n","
Explain the role of Deep Learning in fraud det...
\n","
Deep Learning algorithms are used in financial...
\n","
Deep Learning algorithms play a crucial role i...
\n","
\n","
\n","
4
\n","
Summarize the concept of artificial neural net...
\n","
Artificial neural networks are built on the pr...
\n","
Artificial neural networks are modeled after h...
\n","
\n","
\n","
5
\n","
Explain the structure of an artificial neural ...
\n","
An artificial neural network is composed of ar...
\n","
An artificial neural network consists of layer...
\n","
\n","
\n","
6
\n","
Differentiate between Machine Learning and Dee...
\n","
Machine Learning and Deep Learning are both su...
\n","
Machine Learning and Deep Learning are subsets...
\n","
\n","
\n","
7
\n","
Discuss the differences between Machine Learni...
\n","
Machine Learning and Deep Learning have differ...
\n","
Machine Learning and Deep Learning differ in t...
\n","
\n","
\n","
8
\n","
Summarize the concept of Deep Learning
\n","
Deep learning is a branch of machine learning ...
\n","
Deep learning is a subfield of machine learnin...
\n","
\n","
\n","
9
\n","
Explain the architecture and functioning of ar...
\n","
Artificial neural networks (ANNs) are the buil...
\n","
Artificial neural networks (ANNs) form the fou...
\n","
\n","
\n","
10
\n","
Discuss the applications of Deep Learning
\n","
Deep learning has achieved significant success...
\n","
Deep learning has made remarkable advancements...
\n","
\n","
\n","
11
\n","
Describe the different types of machine learni...
\n","
Deep learning incorporates various machine lea...
\n","
Deep learning encompasses multiple machine lea...
\n","
\n","
\n","
12
\n","
Summarize the types of neural networks in deep...
\n","
Deep learning models are able to automatically...
\n","
Deep learning models, such as feedforward neur...
\n","
\n","
\n","
13
\n","
Summarize the applications of deep learning in...
\n","
Deep learning models can enable machines to id...
\n","
Deep learning models in computer vision enable...
\n","
\n","
\n","
14
\n","
Summarize the applications of deep learning in...
\n","
Deep learning models can enable machines to un...
\n","
Deep learning models in NLP enable machines to...
\n","
\n","
\n","
15
\n","
Summarize the applications of deep learning in...
\n","
Deep learning models can be used in reinforcem...
\n","
Deep learning models in reinforcement learning...
\n","
\n","
\n","
16
\n","
Summarize the concept of Artificial Intelligence
\n","
Artificial Intelligence (AI) is the incorporat...
\n","
Artificial Intelligence (AI) is the study of t...
\n","
\n","
\n","
17
\n","
Summarize the concept of Machine Learning
\n","
Machine Learning (ML) is a subset of AI that a...
\n","
Machine Learning (ML) is a branch of AI that e...
\n","
\n","
\n","
18
\n","
Summarize the concept of Deep Learning
\n","
Deep Learning (DL) is a sub-part of Machine Le...
\n","
Deep Learning (DL) is a subset of Machine Lear...
\n","
\n","
\n","
19
\n","
Summarize the differences between Artificial I...
\n","
Artificial Intelligence (AI) encompasses both ...
\n","
Artificial Intelligence (AI) is the overall co...
\n","
\n","
\n","
20
\n","
Summarize the concept of Artificial Intelligen...
\n","
AI refers to the development of computer syste...
\n","
Artificial Intelligence (AI) involves the deve...
\n","
\n","
\n","
21
\n","
Summarize the concept of Machine Learning
\n","
Machine Learning is a subset of AI that focuse...
\n","
Machine Learning is a branch of AI that enable...
\n","
\n","
\n","
22
\n","
Summarize the concept of Deep Learning
\n","
Deep Learning is a subfield of Machine Learnin...
\n","
Deep Learning is a subfield of Machine Learnin...
\n","
\n","
\n","
23
\n","
Summarize the applications of AI, Machine Lear...
\n","
AI, Machine Learning, and Deep Learning have n...
\n","
AI, Machine Learning, and Deep Learning have w...
\n","
\n","
\n","
24
\n","
Summarize the role and responsibilities of an ...
\n","
AI Engineers design, develop, and implement ar...
\n","
AI Engineers are professionals who design, dev...
\n","
\n","
\n","
25
\n","
Summarize the role and responsibilities of a M...
\n","
Machine Learning Engineers design, develop, an...
\n","
Machine Learning Engineers are professionals w...
\n","
\n","
\n","
26
\n","
Summarize the role and responsibilities of a D...
\n","
Deep Learning Engineers design, develop, and i...
\n","
Deep Learning Engineers are professionals who ...
\n","
\n","
\n","
27
\n","
Differentiate between the roles of AI Engineer...
\n","
AI Engineers, Machine Learning Engineers, and ...
\n","
AI Engineers, Machine Learning Engineers, and ...
\n","
\n","
\n","
28
\n","
Summarize the concept of Artificial Neural Net...
\n","
Artificial Neural Networks (ANN) are a type of...
\n","
Artificial Neural Networks (ANN) are a type of...
\n","
\n","
\n","
29
\n","
Summarize the concept of Biological Neural Net...
\n","
Biological Neural Networks (BNN) are structure...
\n","
Biological Neural Networks (BNN) are structure...
\n","
\n","
\n","
30
\n","
Explain the differences between Artificial Neu...
\n","
Artificial Neural Networks (ANNs) and Biologic...
\n","
Artificial Neural Networks (ANNs) and Biologic...
\n","
\n","
\n","
31
\n","
Summarize the differences in parameters, compu...
\n","
ANN and BNN differ in parameters, computing, r...
\n","
Artificial Neural Networks (ANN) and Biologica...
\n","
\n","
\n","
32
\n","
Summarize the concept of hyperparameter tuning
\n","
Hyperparameter tuning is the process of select...
\n","
Hyperparameter tuning involves finding the bes...
\n","
\n","
\n","
33
\n","
Summarize the importance of hyperparameters in...
\n","
Hyperparameters are configuration variables th...
\n","
Hyperparameters play a crucial role in machine...
\n","
\n","
\n","
34
\n","
Summarize the different types of hyperparamete...
\n","
Neural networks have several essential hyperpa...
\n","
In neural networks, there are various hyperpar...
\n","
\n","
\n","
35
\n","
Summarize the impact of different hyperparamet...
\n","
Different hyperparameters in neural networks, ...
\n","
The performance and learning ability of a neur...
\n","
\n","
\n","
36
\n","
Summarize the concept of Hyperparameter Tuning
\n","
Hyperparameter Tuning involves finding the bes...
\n","
Hyperparameter Tuning is the process of findin...
\n","
\n","
\n","
37
\n","
Explain the drawbacks of GridSearchCV
\n","
GridSearchCV is an exhaustive approach to Hype...
\n","
GridSearchCV, while effective in identifying t...
\n","
\n","
\n","
38
\n","
Describe the advantages of RandomizedSearchCV
\n","
RandomizedSearchCV is an alternative approach ...
\n","
RandomizedSearchCV offers several advantages o...
\n","
\n","
\n","
39
\n","
Explain the concept of Bayesian Optimization i...
\n","
Bayesian Optimization is another strategy for ...
\n","
Bayesian Optimization treats the search for op...
\n","
\n","
\n","
40
\n","
Summarize the challenges in deep learning
\n","
Deep learning has made significant advancement...
\n","
The challenges in deep learning include data a...
\n","
\n","
\n","
41
\n","
Summarize the advantages of deep learning
\n","
Deep learning offers several advantages over t...
\n","
The advantages of deep learning include high a...
\n","
\n","
\n","
42
\n","
Summarize the disadvantages of deep learning
\n","
While deep learning has many advantages, it al...
\n","
The disadvantages of deep learning include hig...
\n","
\n","
\n","
43
\n","
Summarize the key considerations when deciding...
\n","
When deciding whether to use deep learning for...
\n","
The key considerations when deciding to use de...
\n","
\n","
\n","
44
\n","
Summarize the concept of Machine Learning
\n","
Examples of Machine Learning: Machine Learning...
\n","
Machine Learning (ML) is a subset of Artificia...
\n","
\n","
\n","
45
\n","
Summarize the applications of Machine Learning...
\n","
Examples of Machine Learning: Image recognitio...
\n","
Machine Learning (ML) algorithms play a crucia...
\n","
\n","
\n","
46
\n","
Summarize the applications of Machine Learning...
\n","
Examples of Machine Learning: Natural language...
\n","
Machine Learning (ML) algorithms are extensive...
\n","
\n","
\n","
47
\n","
Summarize the applications of Machine Learning...
\n","
Examples of Machine Learning: Recommendation s...
\n","
Machine Learning (ML) algorithms play a vital ...
\n","
\n","
\n","
48
\n","
Summarize the hyperparameters in Support Vecto...
\n","
Hyperparameters in Support Vector Machine (SVM...
\n","
Support Vector Machine (SVM) has three importa...
\n","
\n","
\n","
49
\n","
Summarize the hyperparameters in XGBoost
\n","
Hyperparameters in XGBoost include learning_ra...
\n","
XGBoost has five essential hyperparameters: le...
\n","
\n","
\n","
50
\n","
Provide examples of model hyperparameters
\n","
Examples of model hyperparameters include pena...
\n","
Some examples of model hyperparameters are the...
\n","
\n","
\n","
51
\n","
Summarize the importance of hyperparameter tuning
\n","
Hyperparameter tuning is crucial for optimizin...
\n","
Hyperparameter tuning plays a vital role in op...
\n","
\n","
\n","
52
\n","
Summarize the concept of Deep Learning
\n","
Deep Learning is a type of Machine Learning th...
\n","
Deep Learning is a subset of Machine Learning ...
\n","
\n","
\n","
53
\n","
Summarize the applications of Deep Learning in...
\n","
Deep learning algorithms are used in image and...
\n","
Deep Learning is applied in image and video re...
\n","
\n","
\n","
54
\n","
Summarize the applications of Deep Learning in...
\n","
Deep learning algorithms are used for tasks su...
\n","
Deep Learning is utilized in natural language ...
\n","
\n","
\n","
55
\n","
Summarize the applications of Deep Learning in...
\n","
Deep learning algorithms are used in financial...
\n","
Deep Learning is employed in financial transac...
\n","
\n"," \n","
\n","
"],"text/plain":[" instruction \\\n","0 Summarize the concept and applications of Deep... \n","1 Explain the use of Deep Learning in image and ... \n","2 Describe the applications of Deep Learning in ... \n","3 Explain the role of Deep Learning in fraud det... \n","4 Summarize the concept of artificial neural net... \n","5 Explain the structure of an artificial neural ... \n","6 Differentiate between Machine Learning and Dee... \n","7 Discuss the differences between Machine Learni... \n","8 Summarize the concept of Deep Learning \n","9 Explain the architecture and functioning of ar... \n","10 Discuss the applications of Deep Learning \n","11 Describe the different types of machine learni... \n","12 Summarize the types of neural networks in deep... \n","13 Summarize the applications of deep learning in... \n","14 Summarize the applications of deep learning in... \n","15 Summarize the applications of deep learning in... \n","16 Summarize the concept of Artificial Intelligence \n","17 Summarize the concept of Machine Learning \n","18 Summarize the concept of Deep Learning \n","19 Summarize the differences between Artificial I... \n","20 Summarize the concept of Artificial Intelligen... \n","21 Summarize the concept of Machine Learning \n","22 Summarize the concept of Deep Learning \n","23 Summarize the applications of AI, Machine Lear... \n","24 Summarize the role and responsibilities of an ... \n","25 Summarize the role and responsibilities of a M... \n","26 Summarize the role and responsibilities of a D... \n","27 Differentiate between the roles of AI Engineer... \n","28 Summarize the concept of Artificial Neural Net... \n","29 Summarize the concept of Biological Neural Net... \n","30 Explain the differences between Artificial Neu... \n","31 Summarize the differences in parameters, compu... \n","32 Summarize the concept of hyperparameter tuning \n","33 Summarize the importance of hyperparameters in... \n","34 Summarize the different types of hyperparamete... \n","35 Summarize the impact of different hyperparamet... \n","36 Summarize the concept of Hyperparameter Tuning \n","37 Explain the drawbacks of GridSearchCV \n","38 Describe the advantages of RandomizedSearchCV \n","39 Explain the concept of Bayesian Optimization i... \n","40 Summarize the challenges in deep learning \n","41 Summarize the advantages of deep learning \n","42 Summarize the disadvantages of deep learning \n","43 Summarize the key considerations when deciding... \n","44 Summarize the concept of Machine Learning \n","45 Summarize the applications of Machine Learning... \n","46 Summarize the applications of Machine Learning... \n","47 Summarize the applications of Machine Learning... \n","48 Summarize the hyperparameters in Support Vecto... \n","49 Summarize the hyperparameters in XGBoost \n","50 Provide examples of model hyperparameters \n","51 Summarize the importance of hyperparameter tuning \n","52 Summarize the concept of Deep Learning \n","53 Summarize the applications of Deep Learning in... \n","54 Summarize the applications of Deep Learning in... \n","55 Summarize the applications of Deep Learning in... \n","\n"," input_content \\\n","0 Deep Learning is a type of Machine Learning th... \n","1 Deep learning algorithms are used in image and... \n","2 Deep Learning algorithms are used for tasks su... \n","3 Deep Learning algorithms are used in financial... \n","4 Artificial neural networks are built on the pr... \n","5 An artificial neural network is composed of ar... \n","6 Machine Learning and Deep Learning are both su... \n","7 Machine Learning and Deep Learning have differ... \n","8 Deep learning is a branch of machine learning ... \n","9 Artificial neural networks (ANNs) are the buil... \n","10 Deep learning has achieved significant success... \n","11 Deep learning incorporates various machine lea... \n","12 Deep learning models are able to automatically... \n","13 Deep learning models can enable machines to id... \n","14 Deep learning models can enable machines to un... \n","15 Deep learning models can be used in reinforcem... \n","16 Artificial Intelligence (AI) is the incorporat... \n","17 Machine Learning (ML) is a subset of AI that a... \n","18 Deep Learning (DL) is a sub-part of Machine Le... \n","19 Artificial Intelligence (AI) encompasses both ... \n","20 AI refers to the development of computer syste... \n","21 Machine Learning is a subset of AI that focuse... \n","22 Deep Learning is a subfield of Machine Learnin... \n","23 AI, Machine Learning, and Deep Learning have n... \n","24 AI Engineers design, develop, and implement ar... \n","25 Machine Learning Engineers design, develop, an... \n","26 Deep Learning Engineers design, develop, and i... \n","27 AI Engineers, Machine Learning Engineers, and ... \n","28 Artificial Neural Networks (ANN) are a type of... \n","29 Biological Neural Networks (BNN) are structure... \n","30 Artificial Neural Networks (ANNs) and Biologic... \n","31 ANN and BNN differ in parameters, computing, r... \n","32 Hyperparameter tuning is the process of select... \n","33 Hyperparameters are configuration variables th... \n","34 Neural networks have several essential hyperpa... \n","35 Different hyperparameters in neural networks, ... \n","36 Hyperparameter Tuning involves finding the bes... \n","37 GridSearchCV is an exhaustive approach to Hype... \n","38 RandomizedSearchCV is an alternative approach ... \n","39 Bayesian Optimization is another strategy for ... \n","40 Deep learning has made significant advancement... \n","41 Deep learning offers several advantages over t... \n","42 While deep learning has many advantages, it al... \n","43 When deciding whether to use deep learning for... \n","44 Examples of Machine Learning: Machine Learning... \n","45 Examples of Machine Learning: Image recognitio... \n","46 Examples of Machine Learning: Natural language... \n","47 Examples of Machine Learning: Recommendation s... \n","48 Hyperparameters in Support Vector Machine (SVM... \n","49 Hyperparameters in XGBoost include learning_ra... \n","50 Examples of model hyperparameters include pena... \n","51 Hyperparameter tuning is crucial for optimizin... \n","52 Deep Learning is a type of Machine Learning th... \n","53 Deep learning algorithms are used in image and... \n","54 Deep learning algorithms are used for tasks su... \n","55 Deep learning algorithms are used in financial... \n","\n"," expected_output \n","0 Deep Learning is a subset of Machine Learning ... \n","1 Deep Learning algorithms play a crucial role i... \n","2 Deep Learning algorithms have extensive applic... \n","3 Deep Learning algorithms play a crucial role i... \n","4 Artificial neural networks are modeled after h... \n","5 An artificial neural network consists of layer... \n","6 Machine Learning and Deep Learning are subsets... \n","7 Machine Learning and Deep Learning differ in t... \n","8 Deep learning is a subfield of machine learnin... \n","9 Artificial neural networks (ANNs) form the fou... \n","10 Deep learning has made remarkable advancements... \n","11 Deep learning encompasses multiple machine lea... \n","12 Deep learning models, such as feedforward neur... \n","13 Deep learning models in computer vision enable... \n","14 Deep learning models in NLP enable machines to... \n","15 Deep learning models in reinforcement learning... \n","16 Artificial Intelligence (AI) is the study of t... \n","17 Machine Learning (ML) is a branch of AI that e... \n","18 Deep Learning (DL) is a subset of Machine Lear... \n","19 Artificial Intelligence (AI) is the overall co... \n","20 Artificial Intelligence (AI) involves the deve... \n","21 Machine Learning is a branch of AI that enable... \n","22 Deep Learning is a subfield of Machine Learnin... \n","23 AI, Machine Learning, and Deep Learning have w... \n","24 AI Engineers are professionals who design, dev... \n","25 Machine Learning Engineers are professionals w... \n","26 Deep Learning Engineers are professionals who ... \n","27 AI Engineers, Machine Learning Engineers, and ... \n","28 Artificial Neural Networks (ANN) are a type of... \n","29 Biological Neural Networks (BNN) are structure... \n","30 Artificial Neural Networks (ANNs) and Biologic... \n","31 Artificial Neural Networks (ANN) and Biologica... \n","32 Hyperparameter tuning involves finding the bes... \n","33 Hyperparameters play a crucial role in machine... \n","34 In neural networks, there are various hyperpar... \n","35 The performance and learning ability of a neur... \n","36 Hyperparameter Tuning is the process of findin... \n","37 GridSearchCV, while effective in identifying t... \n","38 RandomizedSearchCV offers several advantages o... \n","39 Bayesian Optimization treats the search for op... \n","40 The challenges in deep learning include data a... \n","41 The advantages of deep learning include high a... \n","42 The disadvantages of deep learning include hig... \n","43 The key considerations when deciding to use de... \n","44 Machine Learning (ML) is a subset of Artificia... \n","45 Machine Learning (ML) algorithms play a crucia... \n","46 Machine Learning (ML) algorithms are extensive... \n","47 Machine Learning (ML) algorithms play a vital ... \n","48 Support Vector Machine (SVM) has three importa... \n","49 XGBoost has five essential hyperparameters: le... \n","50 Some examples of model hyperparameters are the... \n","51 Hyperparameter tuning plays a vital role in op... \n","52 Deep Learning is a subset of Machine Learning ... \n","53 Deep Learning is applied in image and video re... \n","54 Deep Learning is utilized in natural language ... \n","55 Deep Learning is employed in financial transac... "]},"execution_count":25,"metadata":{},"output_type":"execute_result"}],"source":["# Read as pandas DataFrame\n","dataset['val'].to_pandas()"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":145,"referenced_widgets":["69d87602a6884896a846f2163ba6a152","ff52e55f50c44012a1c91fe73c0c1d0a","53af06d6b1e8417a97911beaa53df19d","1f400ccfb3d24a638fa56e24a8afd6b3","d5724f184784479a952c00fa269c1b13","4231d4950aa04e25a63fbe7852f6e252","f013627453f04098b445272139c8261c","c417f77b5c6e417b8ae3d88c2d760fd3","61e79946b798433f99ff8eef584e9dd1","2f748a15848e4318a2c47298c618614d","b92057f5402f42d1bad734cc51fbf18a","06b1d360762c4762b78839bb809089df","f97ca73d0c0c406092736cc7e76b358b","e4cad9a8c9a342ceb54add4f9ae7ded4","3fb9a25d0f9f463685aba687cce93454","c4578f5c5f88467e991c981a4e8387b4","e0092621d297474eb320368a8f78ac56","40ea058255ea438a87e8cd095826f536","e7cd0016f0d14c29a72fc1b4b5381b6e","dd810bc9d1e74e93a48cda6c75a7b0f2","2090f868fcc74f61b78aa47f9aa929ca","808904a9ed4d4a1f83ff289df87334d4","47979c550cfb4c41807b9b4a774ad552","05d6f50dac9e4e29802d4a35e0f4a6e5","d21e35ce94ff4758ab876f1bf52f51d8","ceb70d3f3a014aeaa82774d8ae13877e","828cdb9891e54cc7af37e767014ce828","d6a5a31c98a04fb2bce58817a552c072","69ccba421f874c099160b543d23c323a","93fb4b1e6eb0436e8c3fb3abc2646c44","b9fb9339a1954917a37ea9c18f4c7316","d2db3e5614da457095286971f2fd5c46","d1d20672589f43ce86888288b87557c9"]},"id":"U2YZULfoCura","outputId":"ad214a6e-2f07-4d6e-bfc9-306050305104"},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"d1d20672589f43ce86888288b87557c9","version_major":2,"version_minor":0},"text/plain":["VBox(children=(HTML(value='
"]},"metadata":{},"output_type":"display_data"}],"source":["# Load the tokenizer\n","tokenizer = AutoTokenizer.from_pretrained(\"meta-llama/Llama-2-7b-chat-hf\")\n","\n","\n","# Function to tokenize and calculate token counts\n","def tokenize_and_count(dataset_split):\n"," # Adjust field names based on your dataset structure\n"," instruction_token_counts = [len(tokenizer.tokenize(example[\"instruction\"])) for example in dataset_split]\n"," input_content_token_counts = [len(tokenizer.tokenize(example[\"input_content\"])) for example in dataset_split]\n"," expected_output_token_counts = [len(tokenizer.tokenize(example[\"expected_output\"])) for example in dataset_split]\n","\n"," # If you need combined token counts of specific fields, adjust as necessary:\n"," combined_token_counts = [instruction + input_content + expected_output for instruction, input_content, expected_output in zip(instruction_token_counts, input_content_token_counts, expected_output_token_counts)]\n","\n"," return instruction_token_counts, input_content_token_counts, expected_output_token_counts, combined_token_counts\n","\n","# Adjust the plot_distribution function to accept a subplot axis\n","def plot_distribution(token_counts, title, ax):\n"," sns.set_style(\"whitegrid\")\n"," ax.hist(token_counts, bins=50, color='#3498db', edgecolor='black')\n"," ax.set_title(title, fontsize=12)\n"," ax.set_xlabel(\"Number of tokens\", fontsize=10)\n"," ax.set_ylabel(\"Number of examples\", fontsize=10)\n"," ax.tick_params(axis='both', which='major', labelsize=8)\n","\n","# Assuming you have a matplotlib figure `fig` and axes `axs`\n","fig, axs = plt.subplots(3, 3, figsize=(18, 12)) # Adjust the figure size as necessary\n","\n","# Iterate over each dataset split and plot\n","split_names = ['train', 'test', 'val']\n","for i, split_name in enumerate(split_names):\n"," # Unpack the token counts from your dataset\n"," instruction_counts, input_content_counts, expected_output_counts, combined_counts = tokenize_and_count(dataset[split_name])\n","\n"," # Plotting the distributions on the specified subplot axis\n"," plot_distribution(instruction_counts, f\"{split_name} split: Instruction\", axs[i, 0]) # Changed for 3x3 grid structure\n"," plot_distribution(input_content_counts, f\"{split_name} split: Input Content\", axs[i, 1]) # Changed for 3x3 grid structure\n"," plot_distribution(expected_output_counts, f\"{split_name} split: Expected Output\", axs[i, 2]) # Changed for 3x3 grid structure\n"," # Note: Combined is not plotted due to 3x3 grid, adjust if needed\n","\n","# Adjust layout to prevent overlap\n","plt.tight_layout()\n","plt.show()\n"]},{"cell_type":"markdown","metadata":{"id":"_RXe958fNLwH"},"source":["## 3. Filter out rows with more than 2048 tokens\n","\n","We will remove samples with more than 2048 tokens (max context size of Llama 2 by default = 4096)."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"flzVgkcnvUWE","outputId":"445cecf1-58c7-40b1-e5cc-8cb6e74483ef"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABv0AAASlCAYAAACLEhU2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzde1yUdfr/8fdwEsXMA6iI4qoInjA06WBnMymzLQ+rZR4yt9xKO7KE5XqstKRdS/umlWJqpZum6a8Cy81WtzLLdsVCyROjgMagqS2gMMzvDx7MSpxmhhmGmXk9H499rHPPPZ/7uq/7Zubqvu6DwWKxWAQAAAAAAAAAAADAY/m5OwAAAAAAAAAAAAAA9UPTDwAAAAAAAAAAAPBwNP0AAAAAAAAAAAAAD0fTDwAAAAAAAAAAAPBwNP0AAAAAAAAAAAAAD0fTDwAAAAAAAAAAAPBwNP0AAAAAAAAAAAAAD0fTDwAAAAAAAAAAAPBwNP0AAAAAAAAAAAAAD0fTD/AggwYNUnJystPHnT17tiZNmlRpmslk0qOPPqorr7xSMTExWrlypXbt2qWYmBjt2rXLOl9ycrIGDRrk9Jhc5bfxnj59WnFxcfriiy/cGJXnc9W+CQCALaiR6o8aCQAA70ONVH/USO4zfvx4jR8/3t1hAB6Hph/gRHv27NHixYt19uxZd4dis2PHjmn9+vWaMmVKpenz58/Xjh079OCDD+qll17SddddZ9N4RUVFWrx4caWCrjFr1aqVRo0apVdeeaVe4yxevFgxMTE6deqUkyKrrDHsW40hBgCAZ/LE3xBqJM+okex18uRJLV68WJmZmXZ9zmg0aubMmbr55psVGxur/v376+6779bbb7+t4uJiF0UrHTx4UIsXL9bx48ddtowKnraPAoA3oEbyvN8fZ9dINf0vPz/fSRG7VmPZh0tKSrRq1SqNHDlS/fr1U79+/TRy5EitWrVKJSUlDo/b0Ou3dOlSffbZZw2yLHivAHcHAHiT77//XkuWLNHw4cPVokULp4+flpYmg8Hg1DFXrVqliIgIXXXVVZWmf/3117r55ps1efJk67QuXbpo7969CgwMrHG8oqIiLVmyRFOnTtWVV17p1Fhd5Z577tHq1av11Vdf6eqrr3Z3ONVy9b5V3xhcsW8CALwHNRI1UmPx888/a8mSJYqIiFDPnj1t+sz27dv12GOPKSgoSHfeeaeio6NVUlKi7777TgsXLtTBgwc1b948l8R78OBBLVmyRFdccYU6duzokmVU8MR9FAA8HTWSZ/7+OLNGmj17tpo1a1ZluruO/dirMRyvKiws1JQpU/TNN9/opptu0ogRI2QwGLRjxw49//zz+vTTT7Vs2bJq81yXhl6/ZcuWKSEhQYMHD3b5suC9aPoBblJWVqaSkhI1adLE5s8EBQU5NYaSkhJt2bJFd999d5X3CgoKqvyY+fn52RWvMxUWFjr042yLbt26KTo6Whs3bvSKA1qO7Fv15ex9EwDgu6iR7EON5FrHjh3TE088oQ4dOujtt99W27Ztre/de++9ys7O1vbt290XIADAZ1Aj2cdTaqSEhAS1bt3aSZH5pgULFuibb77RX/7yF40bN846fezYsXrnnXc0d+5cvfjii5ozZ44bowQaDrf3BJxk8eLFeumllyRJN998s/Vy/Ipb8cTExGju3LnavHmzbr/9dsXGxmrHjh2SpOXLl+vuu+/WlVdeqb59+2rEiBFKS0ursozf3ov9gw8+UExMjL777jvNnz9fV111leLi4vTII4/YdAul7777TqdPn9bAgQOrjGmxWPTOO+9Y10NStfdiv9jx48etxc6SJUusn128eLF1nkOHDunRRx/VFVdcodjYWI0YMULbtm2rNE5FDN98841mz56tq6++WjfccIP1/S+++EJjx45VXFyc+vXrpwcffFA//fRTlXg+++wzDRs2TLGxsRo2bJg+/fTTGnMxcOBAff7557JYLNZpJSUlOnTokH7++efa0lij8ePHa9iwYTp48KDGjx+vyy67TNddd53efPPNKvOuXr1at99+uy677DLFx8drxIgR2rJliyTH962attfx48cVExOjDz74oNL0Q4cO6bHHHtNVV12lvn37KiEhQX/7299siqG65wQcO3bMuq0vu+wyjR49uspBsYoYP/74Y73++uu6/vrrFRsbq4kTJyo7O9uRtAMAGhlqJGqk37K1Rrq4TvjrX/+qa665RnFxcfrTn/6kvLy8SvPW9Myii58Fs2vXLo0aNUqSNH36dOt2+G1NdLG33npLhYWFev755ys1/Cp07txZEydOtL4uLS3Va6+9psGDB6tPnz4aNGiQ/vrXv+rChQtV4p0yZYq+/fZbjRo1SrGxsbr55pu1adMm6zwffPCBHnvsMUnShAkTrPFevJ/Zss2Tk5PVr18/nTx5Ug8//LD69eunq666Si+++KLMZrMk2/ZRAIBzUSNRI9ni6aefVmxsrA4dOlRp+uTJkxUfH6+TJ09K+l8Odu/erZkzZ+rKK69U//79lZSUpDNnzlQZ19ac1OdYkSR9+OGHGjFihPr27asrrrhCTzzxRJU6TpLWrVunwYMHq2/fvho1apS+/fZbm/Jz4sQJrV+/XldddVWlhl+Fe++9V1deeaXWr1+vEydOSKr5uJikSvufPX+jCQkJ1v1z9+7dlcas6TmWFbd4vXjZhYWF2rhxo3VZrngmJ7wfV/oBTnLLLbfo6NGj+n//7/9p+vTpatWqlSRVOlvn66+/1ieffKJ7771XrVq1UkREhKTyWyMMGjRId9xxh0pKSvTRRx/pscce07Jly3TjjTfWueznnntOLVq00NSpU5WTk6O3335bc+fO1aJFi2r93Pfffy+DwaBevXpZp8XHx+ull15SUlKSrrnmGt15550256B169aaPXu2Zs+erVtuuUW33HKLJFl/wH766Sfdc889ateunR544AE1a9ZMn3zyiR555BEtXrzYOn+FOXPmqHXr1nrkkUdUWFgoSdq0aZOSk5N17bXXKjExUUVFRXrvvfc0duxYbdy40Xrbo507d2ratGmKiorSU089pdOnT2v69Olq3759tbH37t1bK1eu1E8//aTo6GhJ5c98GTp0qIYPH64FCxbYnIeLnTlzRn/84x91yy236LbbblN6erpSUlIUHR1tLUD//ve/67nnnlNCQoImTJig8+fP68CBA/rPf/6jO+64w+F9y577je/fv1/33nuvAgICNGbMGEVERMhoNOof//iHnnjiCZtiuJjJZNLdd9+toqIijR8/Xq1atdLGjRv10EMP6dVXX62yrd98800ZDAbdf//9+vXXX/XWW28pMTFR77//vl35BgA0PtRI1EjVsaVGqvD666/LYDDogQceUEFBgd5++23dd999+vDDDxUcHGzzMrt166ZHH31Ur776qsaMGaPLL79cktS/f/8aP/P555+rU6dOtc5zsRkzZmjjxo1KSEjQpEmTtHfvXi1btkyHDh3Sa6+9Vmne7OxsPfbYYxo1apSGDx+uDRs2KDk5Wb1791b37t0VHx+v8ePHa/Xq1frTn/6krl27WtdDsn2bS5LZbNbkyZPVt29fJSUl6auvvtKKFSvUqVMnjR07ts59FADgfNRI1EiSqm3IBQQEWK+afPbZZ/X111/r6aef1rp16+Tv76+1a9dq586deumll9SuXbtKn507d6512x45ckTvvfeecnNztXr1auutXm3NSX2PFb3++ut65ZVXdNttt2nUqFE6deqU1qxZo3vvvVebNm2yruP777+vmTNnql+/fpo4caKOHTumhx56SJdeeqnCw8Nrzd8///lPmc1m3XXXXTXOc9ddd2nXrl3asWOH/vCHP9iwVcrZ8je6e/duffzxxxo/fryCgoL03nvv6Y9//KPef/99635hq5deekkzZsxQ3759NXr0aElSZGSkXWMAkiQLAKd56623LNHR0ZZjx45VeS86OtrSo0cPy08//VTlvaKiokqvL1y4YBk2bJhlwoQJlabfdNNNlqefftr6esOGDZbo6GjLfffdZykrK7NOf+GFFyw9e/a0nD17ttZ4ExMTLVdccUW170VHR1vmzJlTadrXX39tiY6Otnz99dfWaU8//bTlpptusr4uKCiwREdHW1599dUqY06cONEybNgwy/nz563TysrKLGPGjLEMGTKkynrdc889ltLSUuv0X3/91TJgwADLjBkzKo2bn59vufzyyytNv/POOy3XXHNNpRzs3LnTEh0dXSneCnv27LFER0dbPvroI+u0Y8eOWaKjoyvlvCavvvqqJTo62lJQUGCdNm7cOEt0dLRl48aN1mnnz5+3XHPNNZZp06ZZpz300EOW22+/vdbxHdm3qtteF6/Xhg0brNPuvfdeS79+/Sw5OTmV5r14v6otht/um88//7wlOjrasnv3buu0X3/91TJo0CDLTTfdZDGbzZVivO222yrtF2+//bYlOjracuDAgVrzAgDwDNRI1EiO1EgVeb3uuuss586ds07/+OOPLdHR0Za3337bOu23+8DFyxo3bpz19d69e6vUQTU5d+6cJTo62vLQQw/VOa/FYrFkZmZaoqOjLc8++2yl6QsWLLBER0dbvvrqq0rx/rZWKigosPTp08eyYMEC67RPPvmk2nrOnm3+9NNPW6Kjoy1LliypNO9dd91lGT58eKXl17SPAgBcgxqJGqm6/yUkJFSad8eOHZbo6GjL//3f/1mMRqMlLi7O8vDDD1eapyIHw4cPt1y4cME6/c0337RER0dbPvvsM7tzUp9jRcePH7f07NnT8vrrr1eafuDAAUuvXr2s0y9cuGC5+uqrLXfeeWel7bxu3TpLdHR0pTquOhXHn3788cca5/nhhx8s0dHRlvnz51ssluqPi1X47b5Y199odHS0JSMjwzotJyfHEhsba3nkkUes0367z1eo2AcuFhcXZ9P+A9SG23sCDSg+Pl5RUVFVpl98hvKZM2d07tw5XX755frxxx9tGnf06NGVHsw8YMAAmc1m5eTk1Pq5X375RZdeeqmN0dfPL7/8oq+//lq33Xabfv31V506dUqnTp3S6dOnde211+ro0aPWWxJUGD16tPz9/a2vv/zyS509e1a333679fOnTp2Sn5+fLrvsMuvtIn7++WdlZmZq+PDhuuSSS6yfv+aaa6rNv/S/BySfPn3aOq1jx446cOCAw2ewS1KzZs0qneUWFBSk2NhYHTt2rNKyT5w4ob179zq8nJr2LVucOnVKu3fv1siRI9WhQ4dK7zn6wO8vvvhCffv21YABA6zTQkJCNGbMGOXk5OjgwYOV5h8xYkSlZw1UfO7iPAEAvBc1EjVSdTVShbvuukvNmze3vr711lsVFhamL774wuHl2+LXX3+VVF7D2KIinkmTJlWafv/991d6v0JUVFSlWql169bq0qWLTfWPrdv8Yvfcc0+l15dffnml228BABofaiTvr5EWL16s1NTUSv+bP39+pXmuvfZajRkzRq+99pqmTZumJk2aaO7cudWON2bMGAUGBlpf33PPPQoICLDWIbbmpL7Hij799FOVlZXptttuq7Sc0NBQde7c2bqcffv2qaCgQHfffXel40K/3RY1+e9//yup9nqt4r2K2s6Z+vXrpz59+lhfd+jQQTfffLN27txpvY060NC4vSfQgC6+xc7FPv/8c73++uvKzMys9LwPWxsuv/3xrSg8bLm9o+Wie4+7ktFolMVi0SuvvKJXXnml2nkKCgoq3Zbgt/k6evSoJFV6bsrFKg4G5ebmSip/xspvdenSpdYi2NEmV03at29fZcxLL71UBw4csL5+4IEH9OWXX+oPf/iDOnfurGuuuUbDhg2z3nLKFjXtW7aoOLBk720HapObm6vLLrusyvSK21Ll5uZWWl599mEAgOejRqJGkqrWSBV+G6/BYFDnzp3rPDBZXxV5qziYVJecnBz5+flVuQ1TWFiYWrRoUSXe6m5Xdemll1Z7m6/f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OlR33nmnoqOjdeHCBX3//fdKS0vTiBEjJEk9evTQ8OHDtW7dOp09e1bx8fHKyMjQxo0bNXjw4Epn3duqZ8+e8vf315tvvqlz584pKChIV111ldq0aWPzNrdVbfsoAMA1qJGokdLT06vd3tdcc41CQ0P11Vdf6d1339XUqVOt+8v8+fM1fvx4LVq0SElJSZU+V1JSovvuu0+33Xabjhw5onfffVeXX365br75ZrtzUp9jRZGRkXr88cf18ssvKycnR4MHD1ZISIiOHz+uzz77TKNHj9bkyZMVGBioxx9/XDNnztTEiRM1dOhQHT9+XB988IFNz/STpOnTp+vw4cOaM2eOduzYYb2ib+fOndq2bZuuuOIKJScnV/rMH/7wB73xxht69tln1adPH3377bfVXtVZ199odHS0Jk+erPHjxysoKMh6ov20adOsYwwdOlQpKSmaOnWqxo8fr+LiYr333nvq0qVLpYZhxfK++uorpaamqm3bturYsaMuu+wym/IAVKDpBzhR37599dhjj2nt2rXasWOHysrKtG3btlqLtauvvlrPP/+83nzzTb3wwgvq2LGjEhMTlZOT4/JiLSgoSHfccYfS0tL05JNPOm3c5557TvPmzdP8+fNVUlKiqVOnKjo6WlFRUdqwYYOWLFmijRs36pdfflHr1q3Vq1cvPfLIIzaNfccdd6ht27Z64403tHz5cl24cEHt2rXTgAEDrAdcpPLL+1955RUtWrRIL7/8siIjIzV//nxt27ZN33zzTaUxDx06pKysLD3zzDNOy4E9xowZoy1btig1NVWFhYVq3769xo8fr4cfftg6jyP7llReoJWWlmrt2rUKCgrSrbfeqqSkJA0bNqzSfD169NDf//53vfLKK3rvvfd0/vx5dejQQbfddptDMYSGhmrt2rVauHCh1qxZo/PnzysmJkZLly7VjTfeWL+EAQA8DjVSOWokx/zpT3/SgQMH9MYbb+i///2vrr76as2aNct65rVUftZ6cnKyUlNT9cILL6hPnz5aunSpXnzxxUpjBQYGasGCBfrrX/+q2bNnq7S0VPPnz6/1oNLNN9+szZs3a/ny5dq2bZvee+89BQUFKSYmRsnJyZWaj88995w6duyojRs36rPPPlNoaKimTJmiqVOnOrTuYWFhmjNnjpYtW6Znn31WZrNZq1atUps2bWze5vaoaR8F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kIdynp6HhoqbY1UAAAAONP127Nihhx56SD179lT//v0lSXv27NHtt9+upUuX6pprrnF6kLCN0WhUTI+eKi4qrHPe4KbNdGB/JsUvAAAu1FB1k9FoVMuWLbV06VJ9+eWXCg4O1rRp03TJJZcoLCxMAQHlJZ/BYFB4eLhyc3PtavplZGQ4JU5Hx8/KynLaskrO5EsGP02YMKHOeZsEB2vD+vVq376905ZfG1fn2ROQg3LkoRx5IAcVyEM58lAzjlUBAACUs7vp9/LLL+u+++5TYmJipekpKSlKSUmhkHIjk8mk4qJCdZmUouDwqBrnK847qCOpiTKZTDT9AABwoYaqm8xms3JychQVFaXExET9+OOPmjRpkt544w2njB8bGyt/f3+njHUxs9msjIyMOscvKytz2jJLi85KljKb66W2bdsqLi7Oacuvjq158GbkoBx5KEceyEEF8lDO0/NQEb8rcawKAACgnN1Nv0OHDmnRokVVpo8cOVJvv/22M2JCPQWHRykksre7wwAAwOc1VN0UHh4uPz8/3XHHHZKkXr16qWPHjsrJyVF+fr5KS0sVEBAgi8WivLw8dejQwa7x/f39XXqQsa7xXbFsW+slV6+7u5bVWJGDcuShHHkgBxXIQznyUDOOVQEAAJTzs/cDrVu3VmZmZpXpmZmZatOmjVOCAgAA8AYNVTe1bt1aV199tXbu3ClJOnbsmI4fP67LL79cvXv31ubNmyVJ6enpateunV239gQAAGjsOFYFAABQzu4r/f7whz9o5syZOnbsWKX7pL/55pu67777nB0fAACAx2rIumnOnDl65plnlJKSIoPBoLlz56pdu3aaM2eOpk+frmXLlikkJETz58936nK9XXUHEC8WGhrK7dIBAHAzjlUBAACUs7vp98gjj6h58+ZasWKF/vrXv0qS2rZtq6lTp2rChAlODxAAAMBTNWTd1KlTJ61evbrK9K5du2rdunVOXZYvKDmTLxn8NG7cuFrnC27aTAf2Z9L4AwDAjThWBQAAUM7upp/BYNB9992n++67T7/++qskqXnz5k4PDAAAwNNRN3mu0qKzkqVMXSalKDg8qtp5ivMO6khqokwmE00/AADciJoLAACgnN1Nv4tRQAEAANiGuskzBYdHKSSyt7vDAAAANqLmAgAAvszP3QEAAAAAAAAAAAAAqB+afgAAAAAAAAAAAICHo+kHAAAAAAAAAAAAeDi7mn4lJSWaOHGijh496qJwAAAAvAN1EwAAgOs5s+Y6f/68Hn74YSUkJOj3v/+9Jk2apOzsbElSQUGBJk+erCFDhmjYsGHavXt3vZcHAADgbHY1/QIDA3XgwAFXxQIAAOA1qJsAAABcz9k115gxY5SWlqbNmzfr5ptv1owZMyRJKSkpiouL09atW/XCCy/oqaeeUklJidOWCwAA4AwB9n7g97//vdavX6/ExERXxAMAAOA1qJsAAABcz1k1V5MmTXTDDTdYX1922WVasWKFJCktLU1bt26VJPXt21dt27bV7t27NXDgQJvHN5vN9YqvMfGmdWmszGZzlTxXvCb/9iFvjiN3jiFvjiN3NbM1J3Y3/cxms9577z19+eWX6tOnj5o2bVrp/enTp9s7JAAAgFeibgIAAHA9V9Vcq1at0qBBg3T69GmVlJQoLCzM+l5ERIRyc3PtGi8jI8OhOBqjrKwsd4fg9bKysuTnV/1N2rxpX2pI5M1x5M4x5M1x5M5xdjf9srKy1KtXL0nSkSNHKr1nMBicExUAAIAXoG4CAABwPVfUXEuXLpXRaNTKlStVXFxc7xglKTY2Vv7+/k4Zy93KysrcHYLXi46OVlxcXKVpZrNZGRkZXrUvNQTy5jhy5xjy5jhyV7OK3NTF7qbf6tWrHQoIAADA11A3AQAAuJ6za67ly5dr69atWrlypZo2baqmTZsqICBA+fn51qv9cnJy1KFDB7vG9ff395oDmN6yHo1ZbfuLN+1LDYm8OY7cOYa8OY7cOa76a8RtkJ2drR07dljPdrJYLE4LCgAAwJtQNwEAALieM2qu1NRUffTRR0pNTVWLFi2s02+99VatXbtWkrR3716dPHlS8fHxzgkcAADASey+0u/06dN6/PHHtWvXLhkMBm3dulWdOnXSM888o0svvVTJycmuiBMAAMDjUDcBAAC4nrNqrhMnTmjBggXq1KmTJkyYIEkKCgrS+++/r8TERCUlJWnIkCEKDAzUwoULFRgY6MrVAgAAsJvdV/rNnz9fAQEB2r59u4KDg63Thw4dqh07djg1OAAAAE9G3QQAAOB6zqq52rdvrwMHDuizzz7Thx9+qA8//FDvv/++JCk0NFQrVqzQ1q1b9dFHH+mqq65y+noAAADUl91X+v3rX//S8uXL1b59+0rTf/e73yk3N9dpgQEAAHg66iYAAADXo+aCN8rMzKwyzWw2KysrS2VlZfL391doaKgiIyPdEB0AoLGyu+lXWFhY6aypCr/88ouCgoKcEhQAAIA3oG4CAABwPWoueJOSM/mSwU/jxo2rc97gps10YH8mjT8AgJXdTb8BAwZo06ZNevzxx63TysrK9NZbb+nKK690ZmwAAAAejboJAADA9ai54E1Ki85KljJ1mZSi4PCoGucrzjuoI6mJMplMNP0AAFZ2N/3+/Oc/67777tO+fftUUlKihQsX6uDBgzpz5ozee+89V8QI+KwTJ05oz5498vf3r3U+bucAAI0TdRMAAIDrUXPBGwWHRykksre7wwAAeBi7m37R0dFKT0/XmjVrFBISosLCQt1yyy2699571bZtW1fECPgko9GokaNG6XxxcZ3zcjsHAGicqJsAAABcj5oLAACgnN1NP0m65JJL9NBDDzk7FgAXMZlMOl9czO0cAMDDUTcBAAC4HjUXAACAg02/M2fOaP369Tp06JAkKSoqSiNGjFDLli2dGRsAcTsHAPB01E0AAACuR80FAAAg+dn7gd27d2vQoEFavXq1zp49q7Nnz2r16tW6+eabtXv3blfECAAA4JGomwAAAFyPmgsAAKCc3Vf6zZ07V0OHDtXs2bPl7+8vSTKbzZozZ47mzp2rLVu2OD1IAAAAT0TdBAAA4HrUXAAAAOXsvtIvOztbkyZNshZRkuTv76/77rtP2dnZdo11//3364477tCdd96psWPH6scff5QkHT16VHfffbcSEhI0cuRI/fTTT/aGCQAA4HbOrJsAAABQPWouAACAcnY3/Xr16qXDhw9XmX748GH16NHDrrEWLVqkLVu26MMPP9SkSZOUnJwsSZo5c6ZGjx6t9PR0PfDAA9bpAAAAnsSZdRMAAACqR80FAABQzqbbe+7fv9/67wkTJuj5559Xdna2LrvsMknSf/7zH73zzjtKTEy0a+EtWrSw/vvcuXMyGAwqKCjQvn37tGLFCklSQkKC5s2bp+zsbHXu3Nnmsc1ms12xuIu9cZrN5ho/48yxJKmsrMxpYzXm9bRnvLrGciZ78i81bGy+oiKf5NV92Abu5cv5r886u6puAgAAwP9QcwEAAFRlU9PvrrvuksFgkMVisU5buHBhlfmeeuopDR061K4AkpKStGvXLknSG2+8oby8PIWFhSkg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9NZbb2nAgAE2bTsAAFB/1FXUVQAAoP6oqaipANiPph8Aq1tuuUU9e/bUq6++Wq9xWrZsqRkzZqhr164aNWqUunTpouLiYv3pT3/S7373O02ZMkWBgYH67rvvKn3u3nvvVUJCgrp166bZs2frkksu0fr16yVJa9asUa9evfTkk0+qW7du6tWrl1544QXt2rVLR44csY7xu9/9TklJSeratau6du1abXzLly/XAw88oNtvv11du3bVn//8Z/Xo0UNvv/22JCksLEz+/v5q1qyZwsLCFBISUmWMSy65RIGBgQoODlZYWJj1M++++67at2+vmTNnqlu3bho8eLCmTZumFStWqKysrNIY77zzjubMmaOlS5fqpptukiR9/PHHKisr0/PPP6+YmBh169ZN8+fPV15eXqWzyS699FLrMm666SbdcMMN+uqrrySVn33VtGlT3XjjjYqIiFCvXr00YcIEezcjAACoB+oq6ioAAFB/1FTUVADsE+DuAAA0LomJiZo4cWKNtxuwRVRUlPz8/ndOQWhoqLp372597e/vr5YtW6qgoKDS5/r162f9d0BAgPr06aPDhw9Lkvbv369du3ZVmqeC0WhUly5dJEm9e/euNbZff/1VP//8s/r3719pev/+/bV//34b17Bmhw4dUr9+/WQwGKzTLr/8chUWFurEiRPq0KGDJCk9PV2nTp3Su+++q759+1rn3b9/v4xGY5X4zp8/L6PRaH0dFRUlf39/6+uwsDBlZWVJKr/9RYcOHTR48GBdd911uu6663TLLbeoadOm9V4/AABgO+qq+qGuAgAAEjVVfVFTAb6Fph+ASuLj43Xttdfq5Zdf1ogRIyq9ZzAYZLFYKk2r7v7fAQGVv1oMBkO10357NlFtCgsLddNNNykxMbHKe2FhYdZ/e0qx0KtXL/3www/asGGDYmNjrYVXYWGhevfurZSUlCqfad26tfXf1eWzYts0b95cGzdu1DfffKOdO3fq1Vdf1ZIlS7R+/Xq1aNHChWsFAAAuRl3VMKirAADwbtRUDYOaCvAO3N4TQBVPPfWUPv/8c33//feVprdu3Vomk6lSMZWZmem05f773/+2/ru0tFQ//PCD9bYHvXv31k8//aSIiAh17ty50v+aNWtm8zKaN2+utm3bas+ePZWm79mzR1FRUXbFGxgYWKUY7Natm77//vtKOfruu+8U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depUSdItt9xiv13/0udSf/zxx7r77rvVrFkztWnTRiNGjNDBgwcd5tm9e7ceffRRtW/fXtHR0brppps0YsQI/f3335KkqKgoZWRkaPny5fZ9XPrs9Lx88cUXuv7662WxWOzboqKi9NFHHykjI8M+T84jkC5/Hvvl+vXrpw0bNmj//v3298bGxtpfP3funKZNm6ZOnTqpadOmuvnmmzV16lSdO3fOYZ6oqChNmDBBK1euVJcuXRQdHa2NGzdKkg4fPqzRo0fbb9nv0qWLli5dmiuWQ4cO6ZFHHlFMTIzatm2rl156Kdd+crRr104ZGRn69ttvHbYfOHBAqampBeYwPznPH//xxx81efJkXX/99YqJidGwYcN0/Phxh7FJSUkaNGiQrrvuOjVr1kyxsbEaPXq0pOzHPrRt21aSlJiYaM9rzi3/8fHxat68udLS0jR48GA1b95cI0eOlJT/evXr10/9+vVz2Hb27FlNnz5dcXFxio6O1g033KDhw4crLS2t0Bjy+ky/Cxcu6M0331THjh3tj1b497//nWsNYmNjNWTIEP3www/q2bOnoqOjdcstt2jFihVFSTsAwIdQI1EjFVYj5dQJmzZt0p133qno6GjdfvvtWrduncO4/D5f+PLPg4mNjdUff/yh77//3r4Ol9dEl/r555+1YcMG9ezZM1fDT8q+mDlq1CiHbd9995169+6tmJgYtWrVSkOHDs2Vq5x49+zZo/j4eLVq1UotW7bU6NGjdebMGfu4ws5dZ9Y85/OIVq9erRkzZuimm25SdHS0BgwYoD179tjHFXaOAgBKBvVRYNZHefnuu+/UsGFDvfHGGw7bV61apaioKL333nv2bZfmIOe6zt13362tW7fmmtfZnBTnOpEkpaam6rHHHlObNm3s8XzxxRe59vPHH3+of//+atasmW666Sb95z//UVZWllM5+s9//iOLxaIpU6Y4NPwkKSIiQk8//bSOHj2qDz74wL49r2tiUvb1tZzzz9lrcXv37tWgQYMUExOjG264QYmJiTIMwz5nfp9jmfOI15zvlfj4eC1atEiSHB71ChQXt2gAJunUqZN2796tTz75RKNHj1blypUlSVWqVJEkzZgxQ2+88YY6d+6snj176vjx41q4cKH69OmjFStWqGLFijp37pwGDRqkc+fOqW/fvgoLC9Phw4e1YcMGnTp1SldccYWmTp2qMWPGqFmzZurVq5ek7F9w+Tl8+LAOHDigxo0bO2yfOnWqPvzwQ23fvl2TJk2SJLVo0cKpY3344Yf1999/69ChQ/amVc5fPWVlZWno0KH68ccf1atXLzVo0EApKSmaN2+edu/erf/85z8Oc23evFmfffaZ+vTpo8qVK6t27dpKT09Xr169ZLFY1KdPH1WpUkXffPONnnvuOZ0+fVr333+/JCkzM1MDBgzQwYMH1a9fP1WvXl0ff/yxNm/enGfckZGRCg0N1bZt29SpUyf79lGjRun777/X77//7tTx52XSpEmqWLGihg8frv3792vevHmaMGGCXn/9dUnZfxE3aNAgVa5cWQ899JAqVqyoffv2af369ZKyz5Nx48Zp3Lhx6tSpkz2+S3/5X7hwQYMGDVLLli01atQohYaGuhSjzWbTkCFD9N1336lLly7q37+//vnnH/33v/9VSkqK2rVrV2gMlxszZoyWL1+uuLg4DRw4UNu3b9esWbOUmpqqN99802Hsnj179Pjjj6tnz57q3r27li1bpvj4eDVp0kTXXHONS8cCAPAd1EjUSAXVSDl2796tESNG6N5777XXCY8//rhmz56t9u3bu7TPZ599VhMnTlS5cuX08MMPS5LCwsLyHf/ll19KktN/hf/tt99q8ODBqlOnjoYPH67MzEwtXLhQ9913nz766CPVqVPHYfwTTzyhOnXq6Mknn9Rvv/2mJUuWqEqVKnr66aclqcBz19k1z/H222/LYrHogQce0OnTpzV79myNHDlSS5YskVTwOQoAKDnUR4FTH505cybXHzxJUsWKFRUSEqK2bduqd+/eeuutt9SxY0c1adJER44c0aRJk9SuXTvdd999Du/bunWrVq9erX79+ql06dJavHixHnzwQS1ZskRWq1WS8/VDca8T/fHHH7rvvvtUo0YNDR48WOXKldNnn32mYcOGafr06fbxR48eVf/+/WWz2fTQQw+pbNmy+vDDD526S/PMmTPavHmzWrZsqbp16+Y55vbbb9fzzz+vr776Sg899JBT6yI5dy3OZrPpwQcf1LXXXqunn35aGzdu1PTp02Wz2fT44487vS9Juueee3TkyBH997//tTf9AbcwAJhm9uzZhtVqNfbu3euwfd++fUajRo2MGTNmOGz//fffjcaNG9u3//bbb4bVajU+++yzAvcTExNjjBo1yqmYvv32W8NqtRpffvllrtdGjRplxMTE5NreoUMHh/k3b95sWK1WY/PmzfZtDz30kNGhQ4dc712xYoXRsGFDY+vWrQ7bFy9ebFitVuPHH3+0b7NarUbDhg2NP/74w2Hss88+a7Rv3944fvy4w/YRI0YYLVu2NM6cOWMYhmHMnTvXsFqtxurVq+1jMjIyjE6dOuWKN8ett95qPPjggw7b+vbta1it1lxjL7d3717DarUas2fPtm9btmyZYbVajfvvv9/Iysqyb3/ppZeMRo0aGadOnTIMwzDWr19vWK1WY/v27fnOf+zYMcNqtRrTpk3L9dqoUaMMq9VqJCQk5Hrt8vW69Lj69u1r/3rp0qWG1Wo15syZk2tsTuwFxTBt2jSHPCUnJxtWq9V47rnnHMZNmTLFsFqtxnfffecQo9VqdTgvjh07ZjRt2tSYMmVKrn0BAPwLNRI1Uo7LayTDuFgnrF271r7t77//Ntq3b2/cdddd9m2X1yKX7+vS86tLly4OdVBBhg0bZlitVuPkyZNOjb/zzjuNtm3bGidOnLBvS05ONho2bGg888wzueIdPXp0rv21adPGYVt+566za55zLnbu3Nk4e/asfdy8efMMq9Vq/P777/Zt+Z2jAICSRX0UGPVRfv9++umnXHF06dLFOHv2rPHQQw8ZLVq0MPbv3+8wZ857k5KS7Nv2799vREdHG8OGDXM5J8W9TjRgwACja9euDrVHVlaWcc899xi33nqrfduLL75oWK1W4+eff7ZvO3bsmNGyZcs8vwculXPtadKkSfmOMQzD6Natm0N9dfk1sRyjRo1yOBeduRY3ceJEh+N76KGHjCZNmhjHjh0zDCPvc94wLp4Dy5Yts28bP368U+cP4Aoe7wl4wPr165WVlaXOnTvr+PHj9n9hYWGqV6+e/fbvChUqSJI2bdrk8Mif4jhx4oSk7L8gKglr1qxRgwYNdPXVVzsc6/XXXy9JuW51b926tSIjI+1fG4ahdevWKTY2VoZhOMxxww036O+//9avv/4qSfrmm29UrVo13Xbbbfb3ly1b1v7Xa3m58sor7TnJsWDBgmL9Bbsk+19Q5WjVqpVsNpv2798vSbriiiskSRs2bND58+eLvJ/L/8LLFevWrVPlypXVt2/fXK9dGruzvv76a0nSwIEDHbY/8MADDq/niIyMVKtWrexfV6lSRfXr19fevXtd3jcAwD9QI1Ej5ahevbrDX9FXqFBBd911l3777TcdPXq0WDEU5vTp05Kcu+PtyJEjSk5OVvfu3VWpUiX79oYNG6pdu3a56h9Juvfeex2+btWqlf766y/7fvPjyprnuPvuux0+Wymn9qLeAgDfQX3kX/XRPffcozlz5uT6d+lxlC1bVpMnT1Zqaqr69OmjDRs2aPTo0apVq1au+Zo3b66mTZvav65Vq5ZuueUWbdq0STabzaWcFOc60V9//aXNmzerc+fOOn36tH0fJ06c0A033KDdu3fr8OHDkrKvD8XExKhZs2b291epUkXdunUrNH/O1mnly5cvtLYqqj59+tj/O+fuyfPnz+u7774zZX+Aq3i8J+ABu3fvlmEYuvXWW/N8PSQk+1uzbt26GjhwoObMmaNVq1apVatWio2N1R133GFvGhWVccmzps20Z88epaam2p+Jfbljx445fH3544+OHz+uU6dO6YMPPnB4FvflYyRp//79qlevXq5CpH79+vnGZxhGkRpchbm8EMspkE+dOiVJatOmjeLi4pSYmKi5c+eqTZs26tixo7p16+b0h16HhISoZs2aRY4xLS1N9evXt59vxbV//34FBQXlejRItWrVVLFixVwX88LDw3PNceWVV+rkyZNuiQcA4HuokS4K1BopR17xXnXVVZKyj6datWpujy1HzkXTf/75p9CLnAcOHJCUdy4bNGigTZs2KSMjQ+XKlbNvzy8HJ0+etO87L66seWH7ujzfAADvRX10kT/UR/Xq1VO7du0KHdeyZUvdd999WrRokW644Qb17Nkz3/kud9VVV9kfIxoUFOR0TopznSgtLU2GYeiNN97I9XmEOY4dO6YaNWrowIEDuvbaa3O9XlDuc1xapxXkn3/+MeWR5UFBQbkeK5oT9+XXvQBPoekHeEBWVpYsFovefvttBQcH53r90osC8fHx6t69u7744gv997//1aRJkzRr1ix9+OGHRWr45DwXvqT+Rz8rK0tWq9X+nPbLXX4Ml38uXc6H+N5xxx3q3r17nnMU50NuT506lWeBVFxBQXnfSJ1TKFssFk2bNk3/+9//9NVXX2njxo169tlnNWfOHH3wwQdOFSalS5fOdz95sdlseZ5v7uZsAVwSsQAAfAs10kWBWiO5Ir+aw2azuTzXpa6++mpJUkpKisNTCdylqDkoypq7M98AAM+gPrrIX+ujvJw7d07ff/+9pOw79M+cOaOyZcu6PI/ZObl8Pw888IBuvPHGPMcU9PmRzoqIiFBISEiBd1eeO3dOf/75p8MdkPkpbt2Yl/xq1JwcAWaj6QeYKL8f8hERETIMQ3Xq1HHqr1iioqIUFRWlRx55RNu2bdN9992nxYsXa8SIES7HlHMRY9++fS6/tyAFHeuOHTvUtm3bIv01VJUqVVS+fHllZWUV+pdQtWvXVkpKSq6/vPrzzz/zHH/hwgUdPHhQsbGxLsflLjExMYqJidGIESO0atUqjRw5UqtXr9a//vWvIv/12JVXXplnQX7gwAGHv0aKiIjQzz//rPPnz6tUqVJ5zuVKDLVr11ZWVpb27NmjBg0a2Lenp6fr1KlTql27tgtHAQDwZ9RI1EiF2bNnT654d+/eLUn2muLSu9YuvSMv5+67S7mS4w4dOmjWrFlauXJloU2/nDvp8srlrl27VLlyZYeLscXhypq7wow7OgEArqM+oj661LRp05SamqpRo0YpISFBr776qsaMGZNr3J49e3Jt2717t8qWLasqVapIktM5Kc51opzrTaVKlSp0P7Vq1coz7vxyf6ly5crpuuuu0+bNm7V///48rzWtXr1a586dU4cOHezbrrzyyjwfb3553VjYeZeVlaW9e/c6fC/mxH15jfr33387vDevOwGpw2AGPtMPMFHOX+Bc/kP+1ltvVXBwsBITE3P9la1hGPbng58+fVoXLlxweN1qtSooKEjnzp2zbytXrpzTf3VVo0YNhYeH65dffnH5eApStmzZXMcpSZ07d9bhw4f14Ycf5notMzNTGRkZBc4bHBysuLg4rV27VikpKblev/QRRjfddJOOHDmiNWvW2LedOXMmz31L0s6dO3X27Fk1b97cYfuBAweUmppaYFzFdfLkyVxr36hRI0myr23O+ePqX9TVrVtXP//8s8M58tVXX+ngwYMO42699VadOHFCixYtyjVHTmyuxHDzzTdLkubNm+ewfc6cOQ6vAwBAjUSNVJgjR45o/fr19q9Pnz6tFStWqFGjRvZHe+b8tfjWrVvt4zIyMrRixYpc85UtW9bpc6F58+a68cYbtWTJEn3++ee5Xj937pxefvllSdmfPdioUSOtWLHCYf6UlBT997//LXL9k9e568qauyK/cxQAULKoj6iPcvz888969913NWDAAD3wwAMaNGiQFi5caL/z71I//fSTw2f6Hjx4UF988YXat2+v4OBgl3JSnOtEVatWVZs2bfTBBx/oyJEjBe7n5ptv1v/+9z9t377d4fVVq1blm5NLDR06VIZhKD4+XpmZmQ6v7d27VwkJCapWrZruuece+/a6detq165dDnHs2LFD27Ztc3i/M9fBLs2PYRhatGiRSpUqZX8sbe3atRUcHOxQo0rS4sWLc81V1Gt/QEG40w8wUZMmTSRJr732mm6//XaVKlVKHTp0UEREhJ544gm9+uqr2r9/vzp27Kjy5ctr3759+vzzz9WrVy8NGjRImzdv1oQJE3Tbbbfpqquuks1m08cff2z/hX3pfr777jvNmTNH1atXV506dfJ8NnaOW265RevXr3frZ7U0adJEq1ev1uTJkxUdHa1y5copNjZWd955pz777DO98MIL2rJli1q0aCGbzaZdu3ZpzZo1mj17tqKjowuc+6mnntKWLVvUq1cv/etf/1JkZKROnjypX3/9Vd9995296OnVq5cWLVqkUaNG6ddff1W1atX08ccf53rcQ45vv/1WZcuWzfUXSKNGjdL333/v0gcxu2r58uVavHixOnbsqIiICP3zzz/68MMPVaFCBd10002Ssh9TERkZqc8++0xXXXWVKlWqpGuuuUZWq7XAuf/1r39p7dq1evDBB9W5c2elpaVp1apVuR6jcNddd2nFihWaPHmytm/frpYtW+rMmTP67rvvdN9996ljx44uxdCwYUN1795dH3zwgU6dOqXWrVsrKSlJy5cvV8eOHe0fvA0AADUSNVJhrrrqKj333HNKSkpS1apVtWzZMh07dkyTJ0+2j2nfvr1q1aql5557Trt27VJwcLCWLVumypUr5/qr7SZNmmjx4sX6z3/+o3r16qlKlSr5fl6QJE2dOlUPPPCAhg8frg4dOqht27YqW7as9uzZo9WrV+vIkSMaNWqUJOmZZ57R4MGDdc8996hnz57KzMzUwoULdcUVV2j48OFFOv78zl1n19zVfeV1jgIAShb1UWDUR7/99ps+/vjjXNsjIiLUvHlznT17VqNGjVK9evXsd2c++uij+uqrrzR69GitWrXK4SkCVqtVgwYNUr9+/VS6dGl7Y+nRRx91OSfFvU70wgsvqHfv3urWrZt69eqlunXrKj09Xf/73/906NAhrVy5UpL04IMP6uOPP9aDDz6o/v37q2zZsvrwww9Vq1Ytp/LYunVrjRo1SpMnT7Y/trRatWratWuXlixZoqysLL311lu68sor7e/p2bOn5s6dq0GDBqlnz546duyY3n//fUVGRjp8PmBh18HKlCmjjRs3atSoUWrWrJk2btyoDRs26OGHH7bfWXnFFVfotttu08KFC2WxWFS3bl1t2LAh12dSShe/7ydNmqQbbrhBwcHB6tKlS6E5AApC0w8wUbNmzfT444/r/fff18aNG5WVlaUvvvhC5cqV00MPPaSrrrpKc+fO1Ztvvikp+9nk7du3t/9PdlRUlG644QZ99dVXOnz4sMqWLauoqCi9/fbbiomJse8nPj5eY8eO1euvv67MzEx17969wIKtR48eWrhwoX788Ue3fU5J7969lZycrI8++khz585V7dq1FRsbq6CgIL355puaO3euPv74Y61fv15ly5ZVnTp11K9fP6ceTREWFqYlS5bozTff1Pr167V48WJVqlRJkZGRGjlypH1c2bJlNXfuXE2cOFELFy5UaGiounXrpptuukkPPvhgrnnXrFmjTp062T8EuCS1adNGSUlJWr16tdLT03XFFVeoWbNmSkhIcHgE56RJkzRx4kRNnjxZ58+f1/Dhwwtt+t14442Kj4/XnDlz9NJLL6lp06aaOXOm/S/ScwQHB+vtt9/WjBkz9Mknn2jdunWqVKmSWrRo4fA8d1dimDRpkurUqaPly5fr888/V1hYmIYMGVLkC14AAP9EjUSNVJirrrpKzz//vKZOnao///xTderU0WuvvebwGTGlSpVSYmKixo8frzfeeEPVqlXTgAEDVLFixVyfBTRs2DAdOHBAs2fP1j///KM2bdoU2PSrUqWK3n//fb333ntavXq1XnvtNZ0/f96+fv3797ePbdeunWbPnq1p06Zp2rRpCgkJUevWrfX000871HWuyO/cdXbNXZHfOQoAKFnUR4FRH33yySf65JNPcm3v3r27mjdvrn//+99KS0vT+++/rzJlykiSSpcurSlTpuiee+7R1KlTNW7cOPv7WrdurZiYGL355ps6cOCAIiMjNXnyZDVs2NDlnBT3OlFkZKSWLVumxMRELV++XH/99ZeqVKmixo0ba9iwYfb3V69eXfPnz9ekSZP01ltvqVKlSrr33ntVvXp1Pffcc07l8f7771fT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VXP98MMP2r9/v+Li4iRJR48e1c6dO3XkyBH17t3bqTmCg4N94mJjzt1xBT1O/Myh1JIMqUjcke+c9zv7aHVn9+kr54KvIr/mIbfmIr/mCpT8utz0++9//6t33nkn163qV111lQ4cOOC2wAAAAPwZNRUAAID53FVz9e7d26G5169fPw0YMEAdO3Z0W6wAAADF5fKDrTMyMhQaGppr+19//aXSpUu7JSgAAAB/R00FAABgPmouAAAQSFxu+rVq1UorVqxw2JaVlaXZs2fruuuuc1dcAAAAfo2aCgAAwHxm1VwLFizgLj8AAOB1XH6859NPP637779fv/zyi86fP69XXnlFO3fu1MmTJ7V48WIzYgQAAPA71FQAAADmo+YCAACBxOWmn9Vq1dq1a7Vw4UKVL19eGRkZ6tSpk/r06aPq1aubESMAAIDfoaYCAAAwHzUXAAAIJC43/STpiiuu0NChQ90dCwAAQEChpgIAADAfNRcAAAgURWr6nTx5UkuXLlVqaqokKTIyUnfffbcqVarkztgAAAD8GjUVAACA+ai5AABAoAhy9Q1bt25VbGysFixYoFOnTunUqVNasGCBbrnlFm3dutXtAS5btkxRUVH6/PPP3T43AACAp5R0TQUAABCIqLkAAEAgcflOvwkTJuj222/XuHHjFBwcLEmy2WwaP368JkyYoFWrVrktuH379mnJkiWKiYlx25wAAADeoCRrKgAAgEBFzQUAAAKJy02/PXv26I033rAXSpIUHBys+++/XytWrHBbYFlZWRozZozGjBmjl19+2eX322w2t8ViJlfjtNls+b7HnXO5Op8753JmvrS0NKWnpxc6T1hYmCIiIgrdl7viKik5MXhDLMjGmngX1sP7+NqalEScJVVTAQAABDJqLgAAEEhcbvo1btxYu3bt0tVXX+2wfdeuXWrYsKHbApszZ45atGihpk2bFun9SUlJbovFTCkpKS6PDwrK+6ms7pzL1fncOVdh8x06dEg9evbU2czMQucpExqqZUuXqmbNmm6JrbDjLGm+cp4HEtbEu7Ae3oc1uaikaioAAIBARs0FAAACiVNNvx07dtj/u3///nrxxRe1Z88eXXvttZKkn3/+WYsWLdLIkSPdElRKSorWrVunhQsXFnmO6Ohoh7/i8lZZWVkujbdarfk+7tSdc7k6nzvnKmy+bdu26WxmpuoP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FBjb6dOndeTIEbVo0cJhe4sWLbRjxw4njzB/qampat68uSwWi31by5YtlZGRoUOHDqlWrVqSpLVr1+r48eN677331KxZM/vYHTt2KC0tLVd8Z8+eVVpamv3ryMhIBQcH27+uVq2aUlJSJGU//qJWrVrq2LGjbrzxRt14443q1KmTypYtW+zjAwAAzqOuKh7qKgAAIFFTFRc1FRBYaPoBcNC6dWvdcMMNevXVV3X33Xc7vGaxWGQYhsO2vJ7/HRLi+KPFYrHkue3yvyYqSEZGhjp06KCRI0fmeq1atWr2//aVYqFx48b69ddftWzZMkVHR9sLr4yMDDVp0kQJCQm53lOlShX7f+eVz5y1qVChgpYvX67vv/9emzZt0rRp05SYmKilS5eqYsWKJh4VAAC4FHVVyaCuAgDAv1FTlQxqKsA/8HhPALk89dRT+uqrr/TTTz85bK9SpYrS09Mdiqnk5GS37fd///uf/b8vXLigX3/91f7YgyZNmuiPP/5Q7dq1Va9ePYd/5cqVc3ofFSpUUPXq1bVt2zaH7du2bVNkZKRL8ZYqVSpXMdigQQP99NNPDjn68ccfVb58edWsWdO+rW7dupo/f76++OILTZw40b69SZMm2rNnj6pWrZrrOK+44gqnYwsJCVG7du30zDPPaOXKldq/f782b97s0vEBAIDio65yDnUVAAAoCDWVc6ipAND0A5BLVFSUunXrpgULFjhsv+6663T8+HG9/fbbSktL06JFi7Rx40a37fe9997T+vXrlZqaqgkTJujkyZPq0aOHJKl37946efKknnzySW3fvl1paWnauHGjRo8eLZvN5tJ+Bg0apLffflurV6/Wrl27lJCQoB07drj8LPHatWvr559/1r59+3T8+HFlZWWpd+/eOnTokCZOnKjU1FR9/vnnmj59ugYOHOjwGAlJql+/vubPn69169bpxRdflCR169ZNlStX1tChQ/XDDz9o79692rJliyZNmuT0h1Z/9dVXmj9/vpKTk7V//36tWLFCWVlZ9sdKAACAkkNd5RzqKgAAUBBqKudQUwHg8Z4A8vTYY49p9erVDtsaNGigF154QbNmzdKMGTN066236oEHHtCHH37oln0+9dRTeuutt5ScnKx69eppxowZ9scE1KhRQ4sXL1ZCQoIGDRqkc+fOqVatWrrxxhtzFSiF6d+/v06fPq0pU6bo+PHjatCggf7zn//oqquucmmeBx54QPHx8erSpYsyMzP1xRdfqE6dOnrrrbc0depUffjhh6pUqZJ69uypoUOH5jnH1VdfrXnz5qlfv34KDg5WfHy8Fi5cqISEBA0fPlz//POPatSoobZt26pChQpOxXXFFVdo/fr1SkxM1NmzZ1WvXj29+uqrDs+qBwAAJYe6qnDUVQAAoDDUVIWjpgJgMS5/6DEAAAAAAAAAAAAAn8LjPQEAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MPAAAAAAAAAAAA8HE0/QAAAAAAAAAAAAAfR9MP8FEfffSRoqKitG/fPqfGjxs3TgMHDnTYlp6erscee0zXXXedoqKiNHfuXG3ZskVRUVHasmWLfVx8fLxiY2PdGr+ZLo/3xIkTiomJ0ddff+3BqHxfbGys4uPjPR0GAAAFokbKHzUSAACBixopf9RIntOvXz/169fP02EAfoWmHxAA9u7dq6VLl2rIkCEO2ydPnqyNGzfqoYce0tSpU3XjjTc6Nd+ZM2c0ffp0h4LOm1WuXFk9e/bUG2+8Uax5pk+frqioKB0/ftxNkTnatm2bpk+frlOnTpkyv6/EAABASaFG8o0ayVWHDx/W9OnTlZyc7NL70tLSNHbsWN1yyy2Kjo5WixYtdO+992revHnKzMw0KVpp586dmj59utMXYYvD185RAIBnUCO5t0bK79/Ro0fdFLG5vOVa0fnz5zV//nz16NFDzZs3V/PmzdWjRw/Nnz9f58+fL/K8JX18M2fO1Oeff14i+0JgCvF0AADMN3/+fNWuXVvXX3+9w/bNmzfrlltu0aBBg+zb6tevr+3bt6tUqVL5znfmzBklJiZq+PDhuu6660yL253uu+8+LViwQN99953atm3r6XDy9NNPPykxMVHdu3dXxYoVvS6GNWvWyGKxeCQuAADMQI3kGzWSq44cOaLExETVrl1bjRo1cuo9GzZs0OOPP67SpUvrzjvvlNVq1fnz5/Xjjz/qlVde0c6dOzVx4kRT4t25c6cSExPVpk0b1alTx5R95PDFcxQAUPKokdxbI40bN07lypXLtd1T135c5Q3XqzIyMjRkyBB9//336tChg+6++25ZLBZt3LhRL774otavX69Zs2blmefClPTxzZo1S3FxcerYsaPp+0JgoukH+Lnz589r1apVuvfee3O9duzYsVy/zIKCglSmTJmSCs9BRkZGkX45O6NBgwayWq1avny5X1zQysrK0vnz50t0rUqXLl1i+wIAwGzUSNn8rUYqir1792rEiBGqVauW5s2bp+rVq9tf69Onj/bs2aMNGzZ4LkAAAEoQNVI2d9ZIcXFxqlKlipsiC0xTpkzR999/r+eff159+/a1b+/du7cWLVqkCRMm6OWXX9b48eM9GCXgHXi8J1AC1qxZo6ioKH3//fe5Xnv//fcVFRWllJQUSdKOHTsUHx9vf6xQ+/btNXr0aJ04caJI+/7xxx914sQJtWvXzr4t5znuhmFo0aJF9scKSMrzWeyX2rdvn73YSUxMtL93+vTp9jGpqal67LHH1KZNG0VHR+vuu+/WF1984TBPTgzff/+9xo0bp7Zt2+rmm2+2v/7111+rd+/eiomJUfPmzfXQQw/pjz/+yBXP559/rq5duyo6Olpdu3bV+vXr881Fu3bt9NVXX8kwDPu28+fPKzU1VUeOHCkojfnq16+funbtqp07d6pfv3669tprdeONN+rtt9/ONXbBggXq0qWLrr32WrVu3Vp33323Vq1aJSn7kQ9Tp06VJN1yyy32vOY85ikqKkoTJkzQypUr1aVLF0VHR2vjxo35rte+ffsUFRWljz76yGF7amqqHn/8cV1//fVq1qyZ4uLi9NprrzkVQ16f6bd37177Wl977bXq1atXrotiOTGuXr1aM2bM0E033aTo6GgNGDBAe/bsKUraAQB+ghqJGunSOuHf//632rdvr5iYGD388MM6ePCgw9j8Pl/40s+C2bJli3r27ClJGj16tH0dLq+JLjV79mxlZGToxRdfdGj45ahXr54GDBhg//rChQt688031bFjRzVt2lSxsbH697//rXPnzuWKd8iQIfrhhx/Us2dPRUdH65ZbbtGKFSvsYz766CM9/vjjkqT+/fvb4730PHNmzePj49W8eXMdPnxYjzzyiJo3b67rr79eL7/8smw2myTnzlEAgHegRvLfGikvo0aNUnR0tFJTUx22Dxo0SK1bt9bhw4clXczB1q1bNXbsWF133XVq0aKFnnnmGZ08eTLXvM7mpDjXiiTp448/1t13361mzZqpTZs2GjFiRK46TpI++OADdezYUc2aNVPPnj31ww8/OJWfQ4cOaenSpbr++usdGn45+vTpo+uuu05Lly7VoUOHJOV/XUySw/nnyvW4uLg4+/m5detWhznz+xzLnEe8XrrvjIwMLV++3L6vvOpboDi40w8oAf/3f/+ncuXK6bPPPlObNm0cXlu9erWuueYaWa1WSdK3336rvXv36u6771a1atX0xx9/6MMPP9TOnTv14Ycfuvx4xZ9++kkWi0WNGze2b2vdurWmTp2qZ555Ru3bt9edd97p9HxVqlTRuHHjNG7cOHXq1EmdOnWSJPsvsD/++EP33XefatSoocGDB9uPe9iwYZo+fbp9fI7x48erSpUqGjZsmDIyMiRJK1asUHx8vG644QaNHDlSZ86c0eLFi9W7d28tX77c/tijTZs26dFHH1VkZKSeeuopnThxQqNHj1bNmjXzjL1JkyaaO3eu/vjjD3u+Dx8+rNtvv13du3fXlClTnM7DpU6ePKkHH3xQnTp1UufOnbV27VolJCTIarXaC9APP/xQkyZNUlxcnPr376+zZ8/q999/188//6xu3bqpU6dO2r17tz755BONHj1alStXtuc7x+bNm/XZZ5+pT58+qly5smrXru3S88Z37NihPn36KCQkRPfcc49q166ttLQ0ffnllxoxYoRTMVwqPT1d9957r86cOaN+/fqpcuXKWr58uYYOHapp06blWuu3335bFotFDzzwgE6fPq3Zs2dr5MiRWrJkiUv5BgD4D2okaqQcM2bMkMVi0eDBg3Xs2DHNmzdP999/vz7++GOFhoY6vc8GDRroscce07Rp03TPPfeoZcuWkqQWLVrk+56vvvpKdevWLXDMpcaMGaPly5crLi5OAwcO1Pbt2zVr1iylpqbqzTffdBi7Z88ePf744+rZs6e6d++uZcuWKT4+Xk2aNNE111yj1q1bq1+/flqwYIEefvhhXX311fbjkJxfc0my2WwaNGiQmjVrpmeeeUbfffed3n33XdWtW1e9e/cu9BwFAHgPaiT/qpHyasiFhITY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ERFRWDwuuETtudmx4FuHZysrH3k6Zn766SdVrVq18BucNWvWLDGnApWN3/QDKtHll1+u2NhYrVq1Su+//74uvPDCIm9QlPRJmzfeeKPcfbZt21Zut1vff/99uds4V9WqVSUVf+GsW7euLr30Uv3jH//QgQMHij3u8OHDZbZ91VVXqXr16nr11Vd1+vTpEtuoX7++WrVqpWXLlhUpeH366afFfkuuwA8//KAaNWroggsuKLzt9OnT2rFjh8fxmnT29d+lM5/Ya9Gihdxud+E8C9bVl8tvNG7cWOHh4fr666+L3L548eIif9epU0cdOnTQ0qVLiwWOsz/558sYrrnmGn333XfavHlz4W3Hjx/XW2+9pcaNG5f79wcBAPZDRrJvRiqwfPnyIr/Bsnr16iJvXkln3pj69ttvderUqcLbPvroI+3fv79IWyXth5LcfffdqlatmsaNG6fc3Nxi92dnZxcea9dcc42k4sdeenp6kft9UVL+8nafl6cvLq8OANZARrJPRkpLS9P+/fs1depUjRkzRo0bN9aYMWOK5J4C//jHP4rMdfHixcrPzy/MTd6uSUXfK+rSpYvCw8M1c+bMYt8qdbvdhe+FtWnTRnXq1NGSJUuKzGfZsmVeZZL4+Hj17t1bn332mRYtWlTs/sWLF+uLL75Qnz591LBhQ0lnruZQu3Ztbdy4sci2nh5f1nthmzdvLvL7mPv379e6det0xRVXFD4HExISdOzYMW3btq1wuwMHDuiDDz4o1l61atXIYvArvukHVKLIyEjdcMMNWrlypU6cOKHHH3+8yP3Vq1dXhw4d9Nprr+n06dNq0KCBPv3008JPFpXHJZdcotjYWH3++edFPk1TEdHR0UpMTNT777+v8847T7GxsbrggguUlJSkp556Sv3791ePHj102223qWnTpsrNzdW///1v5eTkaMWKFaW2Xb16dT399NMaPXq0evfurW7duqlOnTr6+eef9cknn6hdu3YaP368JOnRRx/VsGHD1L9/f/Xp00e//fabFi5cqAsuuEDHjx8v1vZnn32m6667rsgneH755Rd169ZNvXr18ulHmH01dOhQxcXFqV27dqpbt6527typhQsX6pprrim8lnrr1q0lSS+88IK6deumyMhIXXfddaVeDqFGjRq68cYbtXDhQjkcDjVt2lQff/xxsev4S9K4ceP0l7/8Rb169VK/fv3UpEkT7du3Tx9//LHeffddn8dw7733auXKlbrnnns0YMAA1apVS8uXL9fevXs1Y8aMEi/nCQDAuchI9s1IBWrVqqX+/furd+/eOnTokN544w01a9ZMt912W+E2f/7zn7VmzRrdfffduummm5Sdna333nuv2GW/EhISVLNmTS1ZskQxMTGqVq1asTdJz90+LS1NjzzyiLp166aePXsqKSlJp06d0ubNm7V69Wr17t1bktSyZUv16tVL//jHP3T06FF16NBBmZmZWrZsmTp37lzkU/featWqlcLDwzVnzhwdO3ZMUVFR+tOf/qS6det6vc+9VdoxCgAIPmSk0MhIa9as8fi+yhVXXKG4uDh9/vnnWrRokYYPH174vsyUKVM0YMAAvfjiixo9enSRx50+fVqDBw/WTTfdpF27dmnRokW65JJLdP311/u8JhV5ryghIUEjR47UtGnTtG/fPnXu3FkxMTHau3evPvzwQ912220aOnSoIiMjNXLkSI0fP16DBg1St27dtHfvXr3zzjte/aafJI0dO1Y7d+7UhAkTtH79+sJv9G3YsEHr1q3TpZdeqjFjxhR5zJ///GfNnj1bTz75pNq0aaONGzd6/FZnWe+FJSUlaejQoRowYICioqIKP2g/YsSIwja6deumtLQ0DR8+XAMGDFBeXp4WL16s5s2bFykYFvT3+eefKz09XfXr11eTJk100UUXebUOgDco+gGVrFu3bnr77bflcDiKXJKhwLRp0zRp0iQtWrRIbrdbV1xxhebMmVPitc3LEhUVpR49emj16tXFrvteEc8884wmTZqkKVOm6PTp0xo+fLiSkpKUmJiopUuXaubMmVq2bJl+++031alTRykpKXrwwQe9artHjx6qX7++Zs+erblz5+rUqVNq0KCB2rdvX/iGi3Tm6/3Tp0/Xiy++qGnTpikhIUFTpkzRunXr9NVXXxVpc8eOHcrKytITTzxhbA180a9fP7333ntKT0/X8ePH1bBhQw0YMEAPPPBA4TYXXnihHn74YS1ZskTr16+Xy+XSunXryrwG+rhx45Sfn68lS5YoKipKN954o0aPHq2bb765yHYtW7bUW2+9penTp2vx4sU6efKkGjVqVOQ49GUMcXFxWrJkiZ5//nktXLhQJ0+eVHJysmbNmqVrr722YgsGALAdMlLZQjEjFbjvvvv0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AMDiKPoBAAAAAAAAAAAAFkfRDwAAAAAAAAAAALA4in4AAAAAAAAAAACAxVH0AxBwe/fuVXJysrZu3RrooRTasWOHbrvtNqWmpqpnz55G2x4wYIAmT55stE0AAACJXAUAAGACmQqAVVH0A6AxY8YoOTlZs2fPLnL7hx9+qOTk5ACNKrBmzJihqlWravXq1Zo3b57HbQhEAADgXOSq4shVAADAV2Sq4shUALxB0Q+AJKlKlSqaM2eOjhw5EuihGHPq1KlyPzY7O1uXXHKJGjdurNq1axscFQAACHXkqqLIVQAAoDzIVEWRqQB4g6IfAEnS5Zdfrri4OL366qslbjNjxoxilw+YN2+eOnXqVPj3mDFj9MADD2jWrFm6/PLL1b59e82cOVP5+fl69tlndemll+rqq6/W0qVLi7W/c+dO3X777UpNTdXNN9+sr776qsj9WVlZuvvuu3XxxRfr8ssv11//+lcdPny48P4BAwZo4sSJmjx5si677DINHTrU4zxcLpdmzpypq6++Wm3atFHPnj31r3/9q/D+5ORk/fDDD3r55ZeVnJysGTNmFGtjzJgx+uqrrzR//nwlJycrOTlZe/fulSR99dVX6tu3r9q0aaMrr7xSaWlpys/PL3FdP/74Y11yySVasWKFJGn//v16+OGH1b59e1166aW6//77C9s+e43nzp2rK6+8UpdddpkmTJig06dPF27z5ptvqkuXLkpNTdXll1+uhx56qMT+AQCAWeQqchUAAKg4MhWZCoDvKPoBkCSFhYXp0Ucf1cKFC5WTk1Ohtr744gsdOHBACxcu1JgxYzRjxgwNGzZMtWrV0ltvvaXbb79dTz31VLF+nnvuOQ0ZMkTLly9X27Ztdd999+nXX3+VJB09elSDBg1SSkqKMjIy9Nprr+nQoUMaOXJkkTaWLVumyMhILV68WBMmTPA4vvnz5ys9PV2PP/64VqxYoSuvvFIPPPCAfvrpJ0nShg0bdMEFF+iuu+7Shg0bdNdddxVr48knn9TFF1+s2267TRs2bNCGDRsUHx+vX375Rffee69SU1P17rvv6umnn1ZGRoZeeeUVj2N577339OijjyotLU233HKLTp8+raFDhyomJkZvvvmmFi9erGrVqunuu+8u8mmwL7/8UtnZ2XrjjTc0depULVu2TMuWLZMkZWZmavLkyXrooYe0evVqvfba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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# Function to filter dataset based on combined token counts\n","def filter_by_token_count(dataset_split, combined_token_counts, max_tokens=2048):\n"," filtered_dataset = [example for example, count in zip(dataset_split, combined_token_counts) if count <= max_tokens]\n"," return filtered_dataset\n","\n","# Function to plot token distribution\n","def plot_distribution(token_counts, title, ax):\n"," sns.set_style(\"whitegrid\")\n"," ax.hist(token_counts, bins=50, color='#3498db', edgecolor='black')\n"," ax.set_title(title, fontsize=12)\n"," ax.set_xlabel(\"Number of tokens\", fontsize=10)\n"," ax.set_ylabel(\"Number of examples\", fontsize=10)\n"," ax.tick_params(axis='both', which='major', labelsize=8)\n","\n","\n","# Set up the figure for plotting\n","fig, axs = plt.subplots(3, 3, figsize=(18, 12)) # 3 splits, 3 metrics (instruction, input_content, expected_output)\n","\n","# Process each dataset split\n","for i, split_name in enumerate(['train', 'test', 'val']):\n"," # Tokenize and count\n"," instruction_counts, input_content_counts, expected_output_counts, combined_counts = tokenize_and_count(dataset[split_name])\n","\n"," # Filter dataset based on combined token count\n"," filtered_dataset = filter_by_token_count(dataset[split_name], combined_counts)\n","\n"," # Re-tokenize and count for the filtered dataset\n"," filtered_instruction_counts, filtered_input_content_counts, filtered_expected_output_counts, _ = tokenize_and_count(filtered_dataset)\n","\n"," # Plotting the distributions for the filtered datasets\n"," plot_distribution(filtered_instruction_counts, f\"{split_name} (filtered): Instruction\", axs[i, 0])\n"," plot_distribution(filtered_input_content_counts, f\"{split_name} (filtered): Input Content\", axs[i, 1])\n"," plot_distribution(filtered_expected_output_counts, f\"{split_name} (filtered): Expected Output\", axs[i, 2])\n","\n","# Adjust layout to prevent overlap\n","plt.tight_layout()\n","plt.show()\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"EtNSFWlUvUWF","outputId":"f5e95b39-8a6a-4a24-e14f-1a26a657b991"},"outputs":[{"name":"stdout","output_type":"stream","text":["Number of valid rows in train: 448\n","Removing 0 rows from train...\n","Number of valid rows in test: 56\n","Removing 0 rows from test...\n","Number of valid rows in val: 56\n","Removing 0 rows from val...\n"]},{"data":{"image/png":"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ibi4OE15YmIi3nzzTXh6emL06NH4448/qjFKIiIiqstkkzh5enpi3759aNOmjVb5smXLMHbsWERGRmLq1KkICAiopgiJiIiorpPNfZx69uxZouzRo0e4ceMGdu/eDeB5crVy5UokJSWhXbt2OrWvUqn0Eqc+Fcckx9j+KTk5GZmZmWXWsbCwgI2NTaXGUZPGTA44XrrjmOmG46U7jpluqmK8dGlbNolTadLT02FpaQkjo+dhKhQKWFlZ4d69ezonTnJ+7IqcYwOA+/fvY/SYMXiWn19mvXqmpjgcEYFWrVpVekxyHzO54XjpjmOmG46X7jhmupHLeMk6cdInOd7avqbcdv/atWt4lp+PDpOCYGplW2qd/PTbuBuyEC1atICLi0ulxVJTxkwuOF6645jphuOlO46ZbqrykStiyDpxsrKywsOHD1FUVAQjIyMIgoD09HS0bt1a57bkfGt7OccGQBObqZUtzGwcy61bFe9F7mMmNxwv3XHMdMPx0h3HTDdyGS/ZLA4vTfPmzeHo6Ijjx48DACIjI9GyZUudL9MRERER6YNszjgtW7YMFy5cQGZmJvz9/WFmZoYzZ85g+fLlWLJkCbZt2wYzMzMEBgZWd6hERERUR8kmcVqxYkWp5R07dsSXX35ZxdEQERERlSTrS3VEREREcsLEiYiIiEgkJk5EREREIjFxIiIiIhKJiRMRERGRSEyciIiIiERi4kREREQkEhMnIiIiIpGYOBERERGJxMSJiIiISCQmTkREREQiMXEiIiIiEomJExEREZFITJyIiIiIRGLiRERERCQSEyciIiIikZg4EREREYnExImIiIhIJCZORERERCIxcSIiIiISiYkTERERkUhMnIiIiIhE0nvi9OTJE5w9exYJCQn6bpqIiIioWklOnN59912Eh4cDAPLz8zF69GjMnTsXo0aNQmRkpOQAiYiIiORCcuJ05coVuLm5AQDOnDkDQRBw+fJl/N///R+2bNkiOUAiIiIiuZCcOOXm5qJJkyYAgIsXL2Lo0KGoX78+Xn75ZSQlJUkOkIiIiEguJCdOVlZWuH79OvLy8nDx4kX06dMHAJCTkwMTExPJARIRERHJhZHUBvz8/PDee++hQYMGsLKywksvvQQAuHz5Muzs7CQHSERERCQXkhOnt956C127dsX9+/fh7u4OA4PnJ7Gsra0xd+5cqc0T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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["def filter_and_plot(dataset_split_name, dataset_split_data, combined_token_counts, ax):\n"," # Filter out rows with more than 2048 tokens\n"," valid_indices = [i for i, count in enumerate(combined_token_counts) if count <= 2048]\n"," print(f\"Number of valid rows in {dataset_split_name}: {len(valid_indices)}\")\n"," print(f\"Removing {len(dataset_split_data) - len(valid_indices)} rows from {dataset_split_name}...\")\n","\n"," # Extract valid rows based on indices\n"," valid_dataset = [dataset_split_data[i] for i in valid_indices]\n","\n"," # Re-calculate token counts for the valid dataset\n"," filtered_instruction_counts, filtered_input_content_counts, filtered_expected_output_counts, valid_combined_counts = tokenize_and_count(valid_dataset)\n","\n"," # Plot the new distribution for valid rows\n"," plot_distribution(valid_combined_counts, f\"New distribution after filtering {dataset_split_name}\", ax)\n","\n","\n","\n","# Create a figure with subplots\n","fig, axs = plt.subplots(3, 1, figsize=(6, 9)) # Adjust figsize as necessary\n","\n","# Assuming the 'dataset' variable is a dictionary containing data splits 'train', 'test', and 'val'\n","for i, split_name in enumerate(['train', 'test', 'val']):\n"," # Tokenize and count for the specific dataset split\n"," instruction_counts, input_content_counts, expected_output_counts, combined_counts = tokenize_and_count(dataset[split_name])\n","\n"," # Filter datasets based on token count and plot the new distribution\n"," filter_and_plot(split_name, dataset[split_name], combined_counts, axs[i])\n","\n","plt.tight_layout()\n","plt.show()"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"2sifZa8A9BwV","outputId":"0de7579c-203d-4505-8af5-8d487e9088b6"},"outputs":[{"name":"stdout","output_type":"stream","text":["No entries removed due to token count. Skipping saving.\n"]}],"source":["# Initialize a flag to indicate whether any entries were removed in any split\n","entries_removed = False\n","\n","# Iterate over each split in the dataset\n","for split_name in ['train', 'test', 'val']:\n"," # Get the original length of the split\n"," original_length = len(dataset[split_name])\n","\n"," # Tokenize and count tokens in the split\n"," _, _, _, combined_counts = tokenize_and_count(dataset[split_name]) # Corrected to unpack four values\n","\n"," # Determine valid indices (entries with <= 2048 tokens)\n"," valid_indices = [i for i, count in enumerate(combined_counts) if count <= 2048]\n","\n"," # Check if any entries were removed\n"," if len(valid_indices) < original_length:\n"," entries_removed = True\n","\n"," # Update the dataset split with filtered entries\n"," # Note: This assumes dataset[split_name] is compatible with .select() method (Hugging Face datasets)\n"," dataset[split_name] = dataset[split_name].select(valid_indices)\n","\n","# Flag to control execution of subsequent code\n","continue_execution = entries_removed # Simplified logic\n","\n","if continue_execution:\n"," # Save the filtered dataset to disk\n"," dataset.save_to_disk('new_sum_qna_data')\n"," print(\"Dataset saved successfully.\")\n","else:\n"," print(\"No entries removed due to token count. Skipping saving.\")\n"]},{"cell_type":"markdown","metadata":{"id":"kXzTKu99w3g4"},"source":["---\n","\n","## 4. Near-deduplication Using Embeddings\n","\n","* Near-deduplication with embeddings is a technique that employs vector representations to effectively identify and manage nearly identical data entries.\n","\n","* By transforming data into these vectors (embeddings), we can quantitatively measure how similar different pieces of data are. This transformation significantly improves our ability to manage large datasets, where sorting through and removing near-duplicates manually would be impractical.\n","\n","* Widely used in fields like database management, information retrieval, and machine learning, this approach is crucial for efficient data handling and analysis.\n","\n","---\n","\n","### We Will Not Perform Deduplication on Our Summarisation + Questions & Answers Dataset.\n","\n","* **Intentional Repetition for Emphasis**: In educational contexts, certain concepts may be intentionally repeated to underscore their significance. Deduplication could diminish the dataset's educational effectiveness by removing these purposeful repetitions.\n","\n","* **Variations of Similar Questions**: Dataset often feature questions that, while seemingly similar, include minor variations in wording, options, or context. Inadequately designed deduplication algorithms risk eliminating these nuances, thereby losing valuable elements of the dataset.\n","\n","* **Difficulty in Defining \"Duplicates\"**: Identifying duplicates within the dataset poses a significant challenge, as questions that appear identical might differ in subtle yet crucial ways. These distinctions often represent unique learning opportunities that would be lost through deduplication.\n","\n","---\n"]},{"cell_type":"markdown","metadata":{"id":"TOCspcgXNOav"},"source":["## 5. Top-k sampling\n","\n","Only keep the top k samples with the most tokens.\n","\n","---\n","\n","### Decision on \"Top-k Sampling\" for Our Dataset\n","\n","\n","We have decided against employing \"Top-k sampling\" to select only the top k samples with the most tokens in our dataset. This approach does not align with the core objectives of dataset development for several critical reasons:\n","\n","\n","**Practical Considerations**\n","\n","* Favoring question length over substance could detract from the dataset's quality, as longer questions do not necessarily equate to higher educational value. Succinct yet profound questions are typically the most beneficial and stimulating for learners.\n","\n","* Given these considerations, we conclude that \"Top-k sampling,\" which prioritizes token count, falls short of fulfilling the requirements of our dataset. The true merit of a valuable dataset resides in its diverse and balanced assortment of topics and difficulty levels, not merely in question length. This philosophy ensures our dataset remains versatile and effective across various educational and machine learning applications.\n","---"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":244,"referenced_widgets":["a6956d1103da4062823dc056ab9330a4","d15ec587e6da46a3b3a48327c99605a0","1fa91e6a9fee4b99ac0f6085003b1a6f","08d92d37c77343668f4745c7fb68b3b7","322f4b5be7844621b1faf996f99ea482","5eed2f994425469c9c00b961c43149e8","4d255c8d3f764ca2ad1314ee3c01273b","1c0366becc344dddbb5f933284af302d","eadcd4545c4d49ef9067972cf0bcd3bd","b9056c395f1f48689c059bff61656f46","29be20ebe8c84270bcd5494c4ff6b8b2","f2971406394c4e0580262f575b2aab56","1d9595ffd69f4c73a42e27a46c093623","0f59bb4e535942ceb234e38e4cb017d6","d51602377cdb4fd5a23ef79ddf799118","0b3bce0b92c040a9b76ddad2b07b216f","40eb69eea651428885caa2124dfca968","6e5b0f16547047b394c300b0997a3619","0fb6a225115f4b58a1169d5c4706fbac","4c3dd269401a4fe4a71a98f3f38110b0","e100b1ec01264de39c40ccba0656f914","12c8984929ff4c9bbf5ba7c9ee2f40c5","79cd790b766e4f328030d53b7fef84e4","489bb009a332405d93a646b978d8c951","6cfee80cccd04bdf9991414140ec2987","79a5cb1992a84140abb94da72bf0002a","76c48d31148b4a7a822a284a77dec0e8","5b2f81b887944852a1b641f4c971c514","c4d9e21d4cf84f97a1fb3ad543c64c3a","ccea2b134d6e426cab3c7badc6bebbb0","7eaed3f949f646ac81f8d5cb3aff1e87","b5ef43208ed743b08381f2f1aa60bfb6","db729f357d4a4a6dbdb5fae60e7496e3","5890a9b1ff6343c3a00b362be5b8cbd2","d98b4dd55d364f65942c78bc52661a00","672e1e89a6ca4226a9d582e3d24fcd30","e6ff14f7fbcd409497436400a2ec20a1","f2d1a1473c1f4c9b8d257321f20bb271","d6429fa009aa40658e805ba0ebdd863e","6baea04b2c9b49c5973407433942c38c","0811c93087fb42de829504dd58438549","ad7b29ef600c42a685f25e46062d1d55","58d0e1f247434374b64169485dde959b","5c18240e2a39456c98fd3d6d2baf2995","f3cada5a04ff4d86bcd9fec05ccd06f8","f58734e5cdfa4ac1a08f1a728afe8548","bdc222b8db974d7db527d048bd85f606","1440ddbc8f1c49779b3cbc711fbb1ef8","9f1528b09e284ce896d331ea24c52687","1940a355bf42422daa21ce7a709bada6","535362fa80414ef18cb9c6dc62b350d1","4791db5f77c142c2ba93799d3c87e0b1","a294fc0485f84deabf31609b95891d19","0b094167d51140f8847b1f0c095d18ec","8669b3af0f3041eca1f7f168afd96d89","1315bc7503944ce8830784d65e857bbc","3bf91aa087ad4390bed96ce5a1f380bb","1e75de6e5c384ee082a57f3bcf73e585","5f2da726260e4e1c8d6837d1dd5e3664","ea12b6202d9440ccbeb5fd11da76cc02","3cdfdcbd568f4427b41749226aea61eb","c778d23e7f284e5c8d89985cb7739291","329e05fca23d4e79bd3dc1c9d6268f7d","740e6aaf38394c149a98a6ec7c9212ee","d1e52ecfc5f5475a818f8816c724891d","7373f216800f409eae9ea127d46f3977","c3deeae4017a4579af28a74c2414b76f","a24f5e3c1eaa45dfb67bd7577a6f2238","05eadb782dc549c7b289473a9255ad26","2bbca5dc529a49c18e6891ccb5eff645","1dcada1289f04e389800a5ede5f37e19","38066a02c95344468b6ea715580f40b3"]},"id":"pj1b5S_68KB0","outputId":"84413cb5-038e-4f5c-a2c6-8e70b6fb64d2"},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"c3deeae4017a4579af28a74c2414b76f","version_major":2,"version_minor":0},"text/plain":["Uploading the dataset shards: 0%| | 0/1 [00:00, ?it/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"a24f5e3c1eaa45dfb67bd7577a6f2238","version_major":2,"version_minor":0},"text/plain":["Creating parquet from Arrow format: 0%| | 0/1 [00:00, ?ba/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"05eadb782dc549c7b289473a9255ad26","version_major":2,"version_minor":0},"text/plain":["Uploading the dataset shards: 0%| | 0/1 [00:00, ?it/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"2bbca5dc529a49c18e6891ccb5eff645","version_major":2,"version_minor":0},"text/plain":["Creating parquet from Arrow format: 0%| | 0/1 [00:00, ?ba/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"1dcada1289f04e389800a5ede5f37e19","version_major":2,"version_minor":0},"text/plain":["Uploading the dataset shards: 0%| | 0/1 [00:00, ?it/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"38066a02c95344468b6ea715580f40b3","version_major":2,"version_minor":0},"text/plain":["Creating parquet from Arrow format: 0%| | 0/1 [00:00, ?ba/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"text/plain":["CommitInfo(commit_url='https://huggingface.co/datasets/ssoh/sum_n_qna_dataset/commit/8f46f92190bcd1be846e61fb97f6dec9c4296879', commit_message='Upload dataset', commit_description='', oid='8f46f92190bcd1be846e61fb97f6dec9c4296879', pr_url=None, pr_revision=None, pr_num=None)"]},"execution_count":31,"metadata":{},"output_type":"execute_result"}],"source":["# @title\n","# Push to Hugging Face Hub\n","dataset.push_to_hub(\"ssoh/sum_n_qna_dataset\")"]},{"cell_type":"markdown","source":["---"],"metadata":{"id":"03vf5B_3v2L7"}},{"cell_type":"markdown","metadata":{"id":"OSHlAbqzDFDq"},"source":["# Fine-Tuning the Llama 2 Model\n","\n","Our approach employs Supervised Fine-Tuning (SFT) to optimize the Llama 2 model. Key details of this process include:\n","\n","- **Supervised Fine-Tuning (SFT)**: This method involves training the model on a curated dataset comprising specific instructions paired with corresponding responses. The primary objective is to fine-tune the model's parameters, effectively reducing the discrepancy between its generated answers and the provided ground-truth responses. These ground-truth responses serve as labels, guiding the model towards more accurate and contextually appropriate outputs.\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"GLXwJqbjtPho"},"outputs":[],"source":["# Install necessary libraries for the project: transformers, datasets, accelerate, peft, trl, bitsandbytes, wandb and optuna\n","!pip install -q -U transformers datasets accelerate peft trl bitsandbytes optuna wandb"]},{"cell_type":"code","execution_count":null,"metadata":{"executionInfo":{"elapsed":16567,"status":"ok","timestamp":1707717596596,"user":{"displayName":"szehanz","userId":"16137883221268059572"},"user_tz":-480},"id":"nAMzy_0FtaUZ","outputId":"bb94c46a-e798-4acb-ac67-1991a493fd9a"},"outputs":[{"name":"stderr","output_type":"stream","text":["2024-02-19 17:04:21.290747: I tensorflow/core/util/port.cc:110] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n","2024-02-19 17:04:21.330596: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n","To enable the following instructions: SSE4.1 SSE4.2 AVX AVX2 AVX512F AVX512_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n"]}],"source":["# Operating System and Core Machine Learning Libraries\n","import os\n","import torch, transformers\n","\n","\n","# Dataset Handling\n","from datasets import load_dataset\n","\n","# Transformer Models and Tokenization\n","from transformers import (\n"," AutoModelForCausalLM,\n"," AutoTokenizer,\n"," BitsAndBytesConfig, # Configuration class for BitsAndBytes optimization\n"," TrainingArguments, # Class for setting up training hyperparameters\n"," pipeline, # Utility for easy model inference deployment\n"," EarlyStoppingCallback,\n"," Trainer\n",")\n","\n","# Advanced Fine-Tuning and Optimization Techniques\n","from peft import get_peft_model, LoraConfig, PeftModel, prepare_model_for_kbit_training # Classes for Parameter-efficient Fine-tuning (PEFT)\n","from trl import SFTTrainer # Trainer class for Supervised Fine-Tuning (SFT) within Text Reinforcement Learning (TRL) framework\n","\n","from datasets import DatasetDict\n","\n","import optuna\n","\n","import shutil\n","\n","import warnings\n","\n","# Filter out the specific warning\n","warnings.filterwarnings(\"ignore\", category=UserWarning, module=\"torch.utils.checkpoint\")\n","\n","from datetime import datetime\n","\n","import wandb\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":145,"referenced_widgets":["c3d08bc595a74c3180a7a83afc569584","11b88a389a4042b5ad5ba06f51ac22e0","5e5b95c9801443cdbce9c8e629c33589","3e4a06b9b13444e3b82e0c3c26e17b8f","6430379d01874ec3a7cf9fea59c42914","21556be54ed34b15b909bf8e7b8fd93a","cad60b6f14f249c187d573dd3a4428e0","2cb9cfbde1e0483c97a2c531e0034adf","de756c426cf0492bb122a45b94d4bbe7","29f303aa6ac8464aa91124c3fe659379","3076e4abb7fe427fa4fccb43e9f3371e","f91ebc43c1344e8688e2eeb2771c7b65","ea00aa1eb73949fc94083f1d31372915","2dce1978d19e4de3a6a1b1cef6ed518f","e81c501824f94e7d839684fafbc65b31","b8113970ea7245e9890221d4e4cf5e8e","d3224d16458249a3bfd29253c2d6a86f","6edf40f558f54d8b82d949f83557d609","08400a144d3c497a94ae4d84e72a1067","976a3440d2c3423c8be835b0d6f56492","541ef20ab6f34337a2d6d20098f6fef5","fe46e1cf697f4b1fab764104be32da95","2924e96aa10346efb39684e5369e2170","b64f26ac024c46eabfc4728586369130","b0f0ac261e364edd99d7b75e747e2c47","ff9f726db3434e3184e723d5da884d0a","f81ada25e7ff4f5da6b3f6c6e73590e4","62f1cf19fe204aa4a424248e807ce061","bce8d1501218410ba8b042aeb3f0fc26","405603de026d484ab283f053f4b17c6d","a7ef8ff133144d4b9817800e5b4739a4","ba4cf32b2f71428282721e7818b34a5a","49bf9fa57c4b47e79358032afb163a0a","47759f34ca484a2ea2106a2b474a26b5"]},"executionInfo":{"elapsed":23,"status":"ok","timestamp":1707717596597,"user":{"displayName":"szehanz","userId":"16137883221268059572"},"user_tz":-480},"id":"_ehhhUGo5APj","outputId":"f6fee22f-cbb5-452c-b5d2-daa4c7120ef4"},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"47759f34ca484a2ea2106a2b474a26b5","version_major":2,"version_minor":0},"text/plain":["VBox(children=(HTML(value='
"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.006 MB uploaded\\r'), FloatProgress(value=1.0, max=1.0)))"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run floating-rat-21 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/izssxy0g Synced 6 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_171830-izssxy0g/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Successfully finished last run (ID:izssxy0g). Initializing new run: "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"c712af4c6bc74fe3bb82ebf0731faab8","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.01111313893343322, max=1.0)…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_184243-wdbp5xpl"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run abundant-moon-22 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/wdbp5xpl"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"96be26e86d7640f39dc7a381f9e8ac87","version_major":2,"version_minor":0},"text/plain":["Map: 0%| | 0/448 [00:00, ? examples/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"f61d0aae58d0414898a1543855aa90b5","version_major":2,"version_minor":0},"text/plain":["Map: 0%| | 0/56 [00:00, ? examples/s]"]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...\n"]},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.006 MB uploaded\\r'), FloatProgress(value=1.0, max=1.0)))"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▂▂▁▁▁▁▁▁▁
eval/runtime
▁▅▇▇█▇▇█▇▇▇
eval/samples_per_second
█▄▂▂▁▂▂▁▂▂▂
eval/steps_per_second
█▅▂▂▁▂▂▁▂▂▃
eval_loss
▁
train/epoch
▁▁▂▂▃▃▃▃▄▄▅▅▆▆▆▆▇▇████
train/global_step
▁▁▂▂▃▃▃▃▄▄▅▅▆▆▆▆▇▇█████
train/learning_rate
█▇▆▆▅▄▃▃▂▁
train/loss
█▄▂▂▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.60271
eval/runtime
7.0512
eval/samples_per_second
7.942
eval/steps_per_second
0.993
eval_loss
0.60271
train/epoch
7.14
train/global_step
100
train/learning_rate
4e-05
train/loss
0.44
train/total_flos
3478708041547776.0
train/train_loss
0.74873
train/train_runtime
1107.7796
train/train_samples_per_second
3.235
train/train_steps_per_second
0.101
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run abundant-moon-22 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/wdbp5xpl Synced 6 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_184243-wdbp5xpl/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 19:01:36,909] Trial 0 finished with value: 0.6027135848999023 and parameters: {'learning_rate': 0.0004025111363668074, 'num_train_epochs': 8, 'per_device_train_batch_size': 32, 'warmup_steps': 3}. Best is trial 0 with value: 0.6027135848999023.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"8d7ed437bb30461db50fd93c2f619150","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011112901077528175, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_190136-zbvi8cl0"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run thriving-fireworks-23 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/zbvi8cl0"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"76ef17e7b1bc40cfac453df2d5f9979b","version_major":2,"version_minor":0},"text/plain":["Map: 0%| | 0/448 [00:00, ? examples/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"af68d7f99f184edbb84f34b5f8bbe616","version_major":2,"version_minor":0},"text/plain":["Map: 0%| | 0/56 [00:00, ? examples/s]"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.17041999774800135, max=1.…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▃▂▂▁▁▁▁▁▁▁▁▁▁
eval/runtime
▁▄▅▅▆▆█▆▆▇▆▆█▅▅
eval/samples_per_second
█▅▄▄▃▃▁▃▃▂▃▃▁▄▄
eval/steps_per_second
█▅▄▅▃▄▂▃▄▂▃▃▁▄▄
eval_loss
▁
train/epoch
▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▆▆▆▆▇▇▇▇████
train/global_step
▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▆▆▆▆▇▇▇▇█████
train/learning_rate
█▇▇▆▆▅▅▄▄▃▃▂▂▁
train/loss
█▄▃▂▂▂▁▁▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.5983
eval/runtime
7.0249
eval/samples_per_second
7.972
eval/steps_per_second
0.996
eval_loss
0.5983
train/epoch
5.0
train/global_step
140
train/learning_rate
0.00012
train/loss
0.4829
train/total_flos
2170063307145216.0
train/train_loss
0.74847
train/train_runtime
856.9078
train/train_samples_per_second
4.182
train/train_steps_per_second
0.261
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run thriving-fireworks-23 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/zbvi8cl0 Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_190136-zbvi8cl0/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 19:16:12,165] Trial 1 finished with value: 0.5983005166053772 and parameters: {'learning_rate': 0.0003028497239265799, 'num_train_epochs': 8, 'per_device_train_batch_size': 16, 'warmup_steps': 5}. Best is trial 1 with value: 0.5983005166053772.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"532aab0877da4d6b86a40ad31df51c38","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113190833323945, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_191612-pzfniief"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run dazzling-dragon-24 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/pzfniief"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.034 MB of 0.034 MB uploaded\\r'), FloatProgress(value=1.0, max=1.0)))"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▃▂▁▁▁▁▁▁▁▁
eval/runtime
▁▆▇█▇▅▇▇▆▄▇▆
eval/samples_per_second
█▃▂▁▂▄▂▃▃▅▂▃
eval/steps_per_second
█▃▂▁▂▄▂▂▃▅▂▃
eval_loss
▁
train/epoch
▁▁▂▂▂▂▃▃▄▄▄▄▅▅▆▆▇▇▇▇████
train/global_step
▁▁▂▂▂▂▃▃▄▄▅▅▅▅▆▆▇▇▇▇█████
train/learning_rate
█▇▇▆▅▄▄▃▂▂▁
train/loss
█▄▃▂▂▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.5898
eval/runtime
7.0266
eval/samples_per_second
7.97
eval/steps_per_second
0.996
eval_loss
0.5898
train/epoch
3.93
train/global_step
110
train/learning_rate
0.00014
train/loss
0.4727
train/total_flos
1713943443406848.0
train/train_loss
0.79161
train/train_runtime
675.7172
train/train_samples_per_second
3.978
train/train_steps_per_second
0.249
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run dazzling-dragon-24 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/pzfniief Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_191612-pzfniief/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 19:27:45,486] Trial 2 finished with value: 0.5898026823997498 and parameters: {'learning_rate': 0.00040925708738231623, 'num_train_epochs': 6, 'per_device_train_batch_size': 16, 'warmup_steps': 4}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"edd5a710ce3c41a6a72989df0b9696ee","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113297299986395, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_192745-srz53111"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run legendary-firecracker-25 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/srz53111"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.17041103603603602, max=1.…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▄▂▂▁▁▁▁▁▁▁▁
eval/runtime
▁▅▃▅▇▄▅▄▅█▆▂
eval/samples_per_second
█▄▆▃▂▅▃▅▄▁▃▇
eval/steps_per_second
█▄▅▄▂▅▄▅▄▁▃▆
eval_loss
▁
train/epoch
▁▁▂▂▂▂▃▃▄▄▄▄▅▅▆▆▆▆▇▇████
train/global_step
▁▁▂▂▂▂▃▃▄▄▄▄▅▅▆▆▆▆▇▇█████
train/learning_rate
█▇▇▆▅▄▄▃▂▂▁
train/loss
█▅▃▂▂▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.61139
eval/runtime
7.018
eval/samples_per_second
7.98
eval/steps_per_second
0.997
eval_loss
0.61139
train/epoch
8.0
train/global_step
112
train/learning_rate
0.0
train/loss
0.4414
train/total_flos
3887818337157120.0
train/train_loss
0.80241
train/train_runtime
1240.3127
train/train_samples_per_second
2.89
train/train_steps_per_second
0.09
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run legendary-firecracker-25 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/srz53111 Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_192745-srz53111/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 19:48:44,337] Trial 3 finished with value: 0.6113868951797485 and parameters: {'learning_rate': 0.00021804269178716187, 'num_train_epochs': 8, 'per_device_train_batch_size': 32, 'warmup_steps': 3}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"d19268ffc4064e02bd0a33b8b30bfc2b","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113139222207894, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_194844-o101oodx"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run abundant-wonton-26 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/o101oodx"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.17057929403816924, max=1.…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▃▂▂▁▁▁▁▁▁▁▁▁▁
eval/runtime
▁▄▄▅▅▇█▆▅▇▆▅▆▅▂
eval/samples_per_second
█▅▅▄▄▂▁▃▄▂▃▄▃▄▇
eval/steps_per_second
█▅▅▄▄▂▁▂▄▂▃▄▃▄▇
eval_loss
▁
train/epoch
▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▆▆▆▆▇▇▇▇████
train/global_step
▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▆▆▆▆▇▇▇▇█████
train/learning_rate
█▇▇▆▆▅▅▄▄▃▃▂▂▁
train/loss
█▄▃▂▂▂▁▁▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.59633
eval/runtime
6.9881
eval/samples_per_second
8.014
eval/steps_per_second
1.002
eval_loss
0.59633
train/epoch
5.0
train/global_step
140
train/learning_rate
0.00012
train/loss
0.4825
train/total_flos
2170063307145216.0
train/train_loss
0.74968
train/train_runtime
855.8976
train/train_samples_per_second
4.187
train/train_steps_per_second
0.262
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run abundant-wonton-26 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/o101oodx Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_194844-o101oodx/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 20:03:18,557] Trial 4 finished with value: 0.5963263511657715 and parameters: {'learning_rate': 0.0003062471523433562, 'num_train_epochs': 8, 'per_device_train_batch_size': 16, 'warmup_steps': 4}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"c6b42332b56944d189e15ca4507bb147","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113268544431777, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_200318-1kupsvst"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run bright-pig-27 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/1kupsvst"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.023 MB uploaded\\r'), FloatProgress(value=0.25586993243243245, max=1.…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▃▂▂▁▁▁▁▁▁▁▁▁▁
eval/runtime
▁▅▇▄▅▆▄▇▆██▇█▅▃
eval/samples_per_second
█▄▂▄▄▃▅▂▃▁▁▂▁▄▆
eval/steps_per_second
█▃▂▄▃▂▅▂▂▁▁▁▁▄▅
eval_loss
▁
train/epoch
▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▆▆▆▆▇▇▇▇████
train/global_step
▁▁▂▂▂▂▃▃▃▃▄▄▄▄▅▅▅▅▆▆▆▆▇▇▇▇█████
train/learning_rate
█▇▇▆▆▅▅▄▄▃▃▂▂▁
train/loss
█▄▃▂▂▂▁▁▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.59246
eval/runtime
6.9975
eval/samples_per_second
8.003
eval/steps_per_second
1.0
eval_loss
0.59246
train/epoch
5.0
train/global_step
140
train/learning_rate
6e-05
train/loss
0.4697
train/total_flos
2170063307145216.0
train/train_loss
0.73962
train/train_runtime
855.0423
train/train_samples_per_second
3.144
train/train_steps_per_second
0.196
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run bright-pig-27 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/1kupsvst Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_200318-1kupsvst/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 20:17:52,091] Trial 5 finished with value: 0.5924574732780457 and parameters: {'learning_rate': 0.0003549720190405869, 'num_train_epochs': 6, 'per_device_train_batch_size': 16, 'warmup_steps': 5}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"63a4222d599e4da4890c36a23ae52a3a","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011112871322095291, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_201752-hvk8kkmo"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run red-chrysanthemum-28 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/hvk8kkmo"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.022 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.6506108890265188, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▂▁▁▁▁▁▁
eval/runtime
▁▂▃▁▇▅█▇▇
eval/samples_per_second
█▇▆█▂▄▁▂▂
eval/steps_per_second
█▆▆█▃▄▁▃▃
eval_loss
▁
train/epoch
▁▁▂▂▃▃▄▄▅▅▆▆▇▇████
train/global_step
▁▁▂▂▃▃▄▄▅▅▆▆▇▇█████
train/learning_rate
█▇▆▅▄▃▂▁
train/loss
█▄▂▂▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.618
eval/runtime
7.029
eval/samples_per_second
7.967
eval/steps_per_second
0.996
eval_loss
0.618
train/epoch
6.0
train/global_step
84
train/learning_rate
2e-05
train/loss
0.4703
train/total_flos
2927298512683008.0
train/train_loss
0.87718
train/train_runtime
928.7795
train/train_samples_per_second
2.894
train/train_steps_per_second
0.09
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run red-chrysanthemum-28 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/hvk8kkmo Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_201752-hvk8kkmo/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 20:33:38,930] Trial 6 finished with value: 0.6180019974708557 and parameters: {'learning_rate': 0.00029993812811393003, 'num_train_epochs': 6, 'per_device_train_batch_size': 32, 'warmup_steps': 5}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"5c842ce8d6714182920a1750adb3d273","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113082922141379, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_203338-u9an5iy8"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run red-wish-29 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/u9an5iy8"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.034 MB of 0.034 MB uploaded\\r'), FloatProgress(value=1.0, max=1.0)))"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▂▁▁▁
eval/runtime
▁▆█▄▅▃
eval/samples_per_second
█▃▁▄▄▆
eval/steps_per_second
█▃▁▅▅▆
eval_loss
▁
train/epoch
▁▁▃▃▄▄▆▆▇▇██
train/global_step
▁▁▃▃▄▄▆▆▇▇███
train/learning_rate
█▆▅▃▁
train/loss
█▃▂▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.64278
eval/runtime
7.0018
eval/samples_per_second
7.998
eval/steps_per_second
1.0
eval_loss
0.64278
train/epoch
4.0
train/global_step
56
train/learning_rate
6e-05
train/loss
0.5395
train/total_flos
1969319745945600.0
train/train_loss
0.94465
train/train_runtime
619.7752
train/train_samples_per_second
2.891
train/train_steps_per_second
0.09
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run red-wish-29 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/u9an5iy8 Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_203338-u9an5iy8/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 20:44:20,345] Trial 7 finished with value: 0.6427821516990662 and parameters: {'learning_rate': 0.0004921796551065912, 'num_train_epochs': 4, 'per_device_train_batch_size': 32, 'warmup_steps': 3}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"2cfb2293dad348b985a23b767d53ace8","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113233355637122, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_204420-k8hrtsr1"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run sparkling-peony-30 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/k8hrtsr1"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.006 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.170631457447707, max=1.0)…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▂▁▁▁
eval/runtime
▁▃▆▅█▄
eval/samples_per_second
█▆▃▄▁▅
eval/steps_per_second
█▆▃▄▁▅
eval_loss
▁
train/epoch
▁▁▃▃▄▄▆▆▇▇██
train/global_step
▁▁▃▃▄▄▆▆▇▇███
train/learning_rate
█▆▅▃▁
train/loss
█▄▂▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.67955
eval/runtime
7.0075
eval/samples_per_second
7.991
eval/steps_per_second
0.999
eval_loss
0.67955
train/epoch
4.0
train/global_step
56
train/learning_rate
4e-05
train/loss
0.595
train/total_flos
1969319745945600.0
train/train_loss
1.08562
train/train_runtime
620.2921
train/train_samples_per_second
2.889
train/train_steps_per_second
0.09
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run sparkling-peony-30 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/k8hrtsr1 Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_204420-k8hrtsr1/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 20:54:59,931] Trial 8 finished with value: 0.679550051689148 and parameters: {'learning_rate': 0.0002997058981392026, 'num_train_epochs': 4, 'per_device_train_batch_size': 32, 'warmup_steps': 5}. Best is trial 2 with value: 0.5898026823997498.\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"15cedcbf21794e1895357c52edcbef03","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.01111316335575086, max=1.0)…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_205459-iosmgelq"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run abundant-chrysanthemum-31 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/Education-Chatbot-Optimization"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/iosmgelq"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.012 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.3512258282433079, max=1.0…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
Run history:
eval/loss
█▃▃▂▂▁▁▁▁▁▁▁
eval/runtime
▁▆▅▆█▇██▇▇▆▅
eval/samples_per_second
█▃▃▃▁▂▁▁▂▂▃▄
eval/steps_per_second
█▃▄▃▁▂▂▂▂▂▃▄
eval_loss
▁
train/epoch
▁▁▂▂▂▂▃▃▄▄▄▄▅▅▆▆▇▇▇▇████
train/global_step
▁▁▂▂▂▂▃▃▄▄▅▅▅▅▆▆▇▇▇▇█████
train/learning_rate
█▇▇▆▅▅▄▃▂▂▁
train/loss
█▄▃▂▂▁▁▁▁▁▁
train/total_flos
▁
train/train_loss
▁
train/train_runtime
▁
train/train_samples_per_second
▁
train/train_steps_per_second
▁
Run summary:
eval/loss
0.60066
eval/runtime
6.9977
eval/samples_per_second
8.003
eval/steps_per_second
1.0
eval_loss
0.60066
train/epoch
3.93
train/global_step
110
train/learning_rate
1e-05
train/loss
0.4804
train/total_flos
1713943443406848.0
train/train_loss
0.83532
train/train_runtime
674.6173
train/train_samples_per_second
2.656
train/train_steps_per_second
0.166
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run abundant-chrysanthemum-31 at: https://wandb.ai/szehanz/Education-Chatbot-Optimization/runs/iosmgelq Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Find logs at: ./wandb/run-20240219_205459-iosmgelq/logs"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"name":"stderr","output_type":"stream","text":["[I 2024-02-19 21:06:32,382] Trial 9 finished with value: 0.6006569266319275 and parameters: {'learning_rate': 0.0002981933140416747, 'num_train_epochs': 4, 'per_device_train_batch_size': 16, 'warmup_steps': 5}. Best is trial 2 with value: 0.5898026823997498.\n"]}],"source":["def objective(trial):\n","\n"," # Define hyperparameters outside the wandb.init to use them later in the code\n"," learning_rate = trial.suggest_float('learning_rate', 2e-4, 5e-4, log=True)\n"," num_train_epochs = trial.suggest_categorical('num_train_epochs', [4, 6, 8])\n"," per_device_train_batch_size = trial.suggest_categorical('per_device_train_batch_size', [16, 32])\n"," warmup_steps = trial.suggest_int('warmup_steps', 3, 5)\n","\n"," wandb.init(\n"," project=\"Education-Chatbot-Optimization\",\n"," entity=\"szehanz\",\n"," group=\"optuna-optimization\",\n"," job_type=\"hyperparameter_search\",\n"," reinit=True,\n"," config={\n"," \"learning_rate\": learning_rate,\n"," \"num_train_epochs\": num_train_epochs,\n"," \"per_device_train_batch_size\": per_device_train_batch_size,\n"," \"warmup_steps\": warmup_steps\n"," }\n"," )\n","\n"," # Format the current date and time\n"," current_time = datetime.now().strftime(\"%Y%m%d-%H%M%S\")\n"," output_dir = f\"train_out_dir_{current_time}\" # Append the current date and time to the directory name\n","\n"," # Create the output directory\n"," os.makedirs(output_dir, exist_ok=True) # Using exist_ok=True to avoid error if the directory already exists\n","\n","\n"," # Define TrainingArguments with the suggested hyperparameters\n"," training_args = TrainingArguments(\n"," output_dir=output_dir, # Directory for saving output models and checkpoints.\n"," save_strategy=\"steps\", # Save model checkpoints at regular step intervals.\n"," save_steps=10, # Save model checkpoints every 10 steps.\n"," learning_rate=learning_rate, # Initial learning rate for the optimizer.\n"," per_device_train_batch_size=per_device_train_batch_size, # Batch size per device during training.\n"," per_device_eval_batch_size=8, # Batch size per device during evaluation.\n"," num_train_epochs=num_train_epochs, # Total number of training epochs.\n"," warmup_steps=warmup_steps, # Number of warmup steps for the learning rate scheduler.\n"," evaluation_strategy='steps', # Perform evaluation at regular step intervals.\n"," eval_steps=10, # Perform evaluation every 10 steps.\n"," logging_steps=10,\n"," optim='paged_adamw_8bit', # Specifies the optimizer to use.\n"," lr_scheduler_type='linear', # Type of learning rate scheduler.\n"," gradient_accumulation_steps=1, # Number of steps to accumulate gradients before performing an update.\n"," load_best_model_at_end=True, # Load the best model based on evaluation metric at the end of training.\n"," report_to='wandb', # Disable automatic integrations with external reporting tools.\n"," )\n","\n","\n"," # Initialize the Trainer with early stopping callback inside the objective function\n"," trainer = SFTTrainer(\n"," model=model, # Ensure a function or a mechanism to initialize your model\n"," train_dataset=train_dataset,\n"," eval_dataset=val_dataset,\n"," peft_config=peft_config,\n"," dataset_text_field=\"instruction\",\n"," tokenizer=tokenizer,\n"," args=training_args,\n"," max_seq_length=4096,\n"," callbacks=[EarlyStoppingCallback(early_stopping_patience=3)],\n"," )\n","\n"," # Train the model and evaluate within the objective function\n"," trainer.train()\n"," eval_result = trainer.evaluate()\n","\n"," # Log the primary metric to WandB\n"," wandb.log({\"eval_loss\": eval_result[\"eval_loss\"]})\n","\n"," # Finish the WandB run for this trial\n"," wandb.finish()\n","\n"," # Return the metric to be optimized\n"," return eval_result[\"eval_loss\"]\n","\n","\n","# Run the optimization\n","study = optuna.create_study(direction='minimize')\n","study.optimize(objective, n_trials=10)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"fmdlQTVSHT8e","outputId":"a2935a56-5cad-4dbc-c55c-53b3b5ad1368"},"outputs":[{"name":"stdout","output_type":"stream","text":["Best trial:\n"," Value: 0.5898026823997498\n"," Params: \n"," learning_rate: 0.00040925708738231623\n"," num_train_epochs: 6\n"," per_device_train_batch_size: 16\n"," warmup_steps: 4\n"]}],"source":["# Best trial results\n","print(\"Best trial:\")\n","print(f\" Value: {study.best_trial.value}\")\n","print(\" Params: \")\n","for key, value in study.best_trial.params.items():\n"," print(f\" {key}: {value}\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"mKlA_ahVHT8e","outputId":"6365a674-b011-48bb-94ea-7aa9d657d323","colab":{"referenced_widgets":[""]}},"outputs":[{"data":{"text/html":["Tracking run with wandb version 0.16.3"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Run data is saved locally in /home/iot/ITI110/poc-playground/Final project/wandb/run-20240219_210737-q16rpssr"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["Syncing run fortuitous-fish-3 to Weights & Biases (docs) "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View project at https://wandb.ai/szehanz/huggingface"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":[" View run at https://wandb.ai/szehanz/huggingface/runs/q16rpssr"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," \n"," \n"," [168/168 16:51, Epoch 6/6]\n","
\n","
\n"," \n","
\n","
Step
\n","
Training Loss
\n","
Validation Loss
\n","
\n"," \n"," \n","
\n","
10
\n","
2.218400
\n","
1.534913
\n","
\n","
\n","
20
\n","
1.136500
\n","
0.895845
\n","
\n","
\n","
30
\n","
0.955600
\n","
0.814537
\n","
\n","
\n","
40
\n","
0.707400
\n","
0.680818
\n","
\n","
\n","
50
\n","
0.629700
\n","
0.656619
\n","
\n","
\n","
60
\n","
0.556900
\n","
0.624320
\n","
\n","
\n","
70
\n","
0.532100
\n","
0.632881
\n","
\n","
\n","
80
\n","
0.524000
\n","
0.591038
\n","
\n","
\n","
90
\n","
0.476200
\n","
0.599967
\n","
\n","
\n","
100
\n","
0.487800
\n","
0.594422
\n","
\n","
\n","
110
\n","
0.475600
\n","
0.595004
\n","
\n","
\n","
120
\n","
0.478700
\n","
0.627798
\n","
\n","
\n","
130
\n","
0.426700
\n","
0.623343
\n","
\n","
\n","
140
\n","
0.471200
\n","
0.604500
\n","
\n","
\n","
150
\n","
0.420800
\n","
0.611532
\n","
\n","
\n","
160
\n","
0.440900
\n","
0.603333
\n","
\n"," \n","
"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"text/plain":["VBox(children=(Label(value='0.012 MB of 0.034 MB uploaded\\r'), FloatProgress(value=0.35244443189199876, max=1.…"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","