diff --git "a/AIRA_FineTuning.ipynb" "b/AIRA_FineTuning.ipynb"
new file mode 100644--- /dev/null
+++ "b/AIRA_FineTuning.ipynb"
@@ -0,0 +1,3139 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Q-bj6K7Qv4ft"
+ },
+ "source": [
+ "# Fine-Tuning a Generative Pretrained Transformer (`GPT`)\n",
+ "\n",
+ "1. Install required libraries."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "OFWjSb_xDWja",
+ "outputId": "da094250-7c95-4163-c631-8b063438d192"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
+ "Collecting transformers\n",
+ " Downloading transformers-4.30.2-py3-none-any.whl (7.2 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.2/7.2 MB\u001b[0m \u001b[31m66.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers) (3.12.0)\n",
+ "Collecting huggingface-hub<1.0,>=0.14.1 (from transformers)\n",
+ " Downloading huggingface_hub-0.15.1-py3-none-any.whl (236 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m236.8/236.8 kB\u001b[0m \u001b[31m29.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (1.22.4)\n",
+ "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers) (23.1)\n",
+ "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (6.0)\n",
+ "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (2022.10.31)\n",
+ "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers) (2.27.1)\n",
+ "Collecting tokenizers!=0.11.3,<0.14,>=0.11.1 (from transformers)\n",
+ " Downloading tokenizers-0.13.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.8 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.8/7.8 MB\u001b[0m \u001b[31m114.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting safetensors>=0.3.1 (from transformers)\n",
+ " Downloading safetensors-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m84.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.65.0)\n",
+ "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.14.1->transformers) (2023.4.0)\n",
+ "Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.14.1->transformers) (4.5.0)\n",
+ "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (1.26.15)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2022.12.7)\n",
+ "Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.0.12)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.4)\n",
+ "Installing collected packages: tokenizers, safetensors, huggingface-hub, transformers\n",
+ "Successfully installed huggingface-hub-0.15.1 safetensors-0.3.1 tokenizers-0.13.3 transformers-4.30.2\n",
+ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
+ "Collecting codecarbon\n",
+ " Downloading codecarbon-2.2.3-py3-none-any.whl (174 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m174.1/174.1 kB\u001b[0m \u001b[31m6.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting arrow (from codecarbon)\n",
+ " Downloading arrow-1.2.3-py3-none-any.whl (66 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m66.4/66.4 kB\u001b[0m \u001b[31m9.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from codecarbon) (1.5.3)\n",
+ "Collecting pynvml (from codecarbon)\n",
+ " Downloading pynvml-11.5.0-py3-none-any.whl (53 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m53.1/53.1 kB\u001b[0m \u001b[31m7.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from codecarbon) (2.27.1)\n",
+ "Requirement already satisfied: psutil in /usr/local/lib/python3.10/dist-packages (from codecarbon) (5.9.5)\n",
+ "Requirement already satisfied: py-cpuinfo in /usr/local/lib/python3.10/dist-packages (from codecarbon) (9.0.0)\n",
+ "Collecting fuzzywuzzy (from codecarbon)\n",
+ " Downloading fuzzywuzzy-0.18.0-py2.py3-none-any.whl (18 kB)\n",
+ "Requirement already satisfied: click in /usr/local/lib/python3.10/dist-packages (from codecarbon) (8.1.3)\n",
+ "Requirement already satisfied: python-dateutil>=2.7.0 in /usr/local/lib/python3.10/dist-packages (from arrow->codecarbon) (2.8.2)\n",
+ "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->codecarbon) (2022.7.1)\n",
+ "Requirement already satisfied: numpy>=1.21.0 in /usr/local/lib/python3.10/dist-packages (from pandas->codecarbon) (1.22.4)\n",
+ "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->codecarbon) (1.26.15)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->codecarbon) (2022.12.7)\n",
+ "Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.10/dist-packages (from requests->codecarbon) (2.0.12)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->codecarbon) (3.4)\n",
+ "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7.0->arrow->codecarbon) (1.16.0)\n",
+ "Installing collected packages: fuzzywuzzy, pynvml, arrow, codecarbon\n",
+ "Successfully installed arrow-1.2.3 codecarbon-2.2.3 fuzzywuzzy-0.18.0 pynvml-11.5.0\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install transformers\n",
+ "!pip install codecarbon"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "pY6M4fSb8SY6"
+ },
+ "source": [
+ "2. Load the data from the hub."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 423
+ },
+ "id": "7MbpXGu-v4f1",
+ "outputId": "24c8333e-6e2d-47a1-ffbc-82dd2eedec35"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " prompt | \n",
+ " completion | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " Qual é uma espécie de peixe? Tope ou Corda | \n",
+ " Tope | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " Por que os camelos podem sobreviver por muito ... | \n",
+ " Os camelos usam a gordura em suas corcundas pa... | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " Os pais de Alice têm três filhas: Amy, Jessy, ... | \n",
+ " O nome da terceira filha é Alice | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " Quem deu à ONU o terreno em NY para construir ... | \n",
+ " John D. Rockefeller | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " Por que o celular é ruim para o ser humano | \n",
+ " Estamos sempre envolvidos em um telefone que n... | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 52869 | \n",
+ " Como os computadores se comunicam e trabalham ... | \n",
+ " Os computadores se comunicam e trabalham em re... | \n",
+ "
\n",
+ " \n",
+ " 52870 | \n",
+ " Como os sites são diferentes dos aplicativos d... | \n",
+ " Sites e aplicativos da Web são semelhantes, po... | \n",
+ "
\n",
+ " \n",
+ " 52871 | \n",
+ " O que é software de código aberto e seus benef... | \n",
+ " Software de código aberto é um software dispon... | \n",
+ "
\n",
+ " \n",
+ " 52872 | \n",
+ " O que é um cookie e como é usado na navegação ... | \n",
+ " Um cookie é um pequeno pedaço de dados que um ... | \n",
+ "
\n",
+ " \n",
+ " 52873 | \n",
+ " O que é armazenamento em nuvem e suas vantagen... | \n",
+ " O armazenamento em nuvem é um serviço que perm... | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
52874 rows × 2 columns
\n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " "
+ ],
+ "text/plain": [
+ " prompt \\\n",
+ "0 Qual é uma espécie de peixe? Tope ou Corda \n",
+ "1 Por que os camelos podem sobreviver por muito ... \n",
+ "2 Os pais de Alice têm três filhas: Amy, Jessy, ... \n",
+ "3 Quem deu à ONU o terreno em NY para construir ... \n",
+ "4 Por que o celular é ruim para o ser humano \n",
+ "... ... \n",
+ "52869 Como os computadores se comunicam e trabalham ... \n",
+ "52870 Como os sites são diferentes dos aplicativos d... \n",
+ "52871 O que é software de código aberto e seus benef... \n",
+ "52872 O que é um cookie e como é usado na navegação ... \n",
+ "52873 O que é armazenamento em nuvem e suas vantagen... \n",
+ "\n",
+ " completion \n",
+ "0 Tope \n",
+ "1 Os camelos usam a gordura em suas corcundas pa... \n",
+ "2 O nome da terceira filha é Alice \n",
+ "3 John D. Rockefeller \n",
+ "4 Estamos sempre envolvidos em um telefone que n... \n",
+ "... ... \n",
+ "52869 Os computadores se comunicam e trabalham em re... \n",
+ "52870 Sites e aplicativos da Web são semelhantes, po... \n",
+ "52871 Software de código aberto é um software dispon... \n",
+ "52872 Um cookie é um pequeno pedaço de dados que um ... \n",
+ "52873 O armazenamento em nuvem é um serviço que perm... \n",
+ "\n",
+ "[52874 rows x 2 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "from datasets import load_dataset\n",
+ "\n",
+ "dataset = load_dataset(\"nicholasKluge/fine-tuning-instruct-aira\", split=\"aira_instruct_english\")\n",
+ "\n",
+ "df = dataset.to_pandas()\n",
+ "\n",
+ "display(df)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "BfKTTBZqCniY"
+ },
+ "source": [
+ "3. Load `BloomTokenizerFast` and add the chosen special tokens (`'<|startoftext|>', '<|endoftext|>','<|pad|>'`)\n",
+ "4. Create demonstrations by prepending the special tokens.\n",
+ "5. Calculate the maximum length (in tokens) that the demonstrations have (the dataset was constructed, for efficiency and fast training, to be below the 300-token range)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 165,
+ "referenced_widgets": [
+ "0ec95223b2854a7a9312d1c37d4ae70d",
+ "5058e3b1304e4d1784b28d09324e6829",
+ "e5c9035e8aae4acf98baf4b1e1ff4dfd",
+ "f980da7950714ce48d26625ab07fd2d1",
+ "f565b965f8b44add8a5fa0125848abcd",
+ "371db10f9fab43ba9fe75c63e793643a",
+ "c36c6a43927247d2964b09791607eaff",
+ "f1178bbb2c0e45028591aea5efa3f9ec",
+ "57a22fb2898e47268d30f09e715fba90",
+ "40edc4d12cd442048ea5f300a0d5d20b",
+ "6ebd5acaead34847bb5507f212e1b8dc",
+ "1f540b9c68d24a8ca581ae797b3499ea",
+ "9accd3c3dab7488091b2f43dc7d1290e",
+ "8759256ba57047d4a72f2dfac916e659",
+ "843a7ded32d347acbe8cc06dc2290ab3",
+ "9e28abb8a5b548059a61e94d7511786a",
+ "67d2e12def5144d2b0c33350de6acdc5",
+ "20a1773ba3e441a7b3f8b462ce2eb795",
+ "6e74b4fa896946e2bc926cc7259bd187",
+ "bf7f9515f5b941958028935beccb605f",
+ "2e13795602074eac8f7de27a154091fe",
+ "f4589a2988e849f7bc1166da0023746a",
+ "f1b64075b3e144e9b71369bcbd5681b6",
+ "3c8f9209e8e7482b89f2e4205990dd5b",
+ "7a8d3cc676514592863b093a45213a24",
+ "d582918d79e24de4897fc08893009e08",
+ "ce2b1d7eeb454839baf77d0285b636c6",
+ "7f27461df66e4f4caa3605a175b347b1",
+ "886bf884046d401cb895d26218203b16",
+ "9a73f29ab5ed4f37b5eada709464e292",
+ "aa99568464ce427e946edefc2f625e3f",
+ "7b16139ba259449c8f9c75618d7b626f",
+ "8f4c6701200b4ac4a49e963180b7d306"
+ ]
+ },
+ "id": "hfu84fWIv4f9",
+ "outputId": "9b03d404-466f-49ea-a3d8-82ecbcaf229c"
+ },
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "0ec95223b2854a7a9312d1c37d4ae70d",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Downloading (…)okenizer_config.json: 0%| | 0.00/222 [00:00, ?B/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "1f540b9c68d24a8ca581ae797b3499ea",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Downloading tokenizer.json: 0%| | 0.00/14.5M [00:00, ?B/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "f1b64075b3e144e9b71369bcbd5681b6",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Downloading (…)cial_tokens_map.json: 0%| | 0.00/85.0 [00:00, ?B/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Total number of demonstrations: 52874\n",
+ "The longest demonstration is 300 tokens long.\n"
+ ]
+ }
+ ],
+ "source": [
+ "from transformers import BloomTokenizerFast\n",
+ "\n",
+ "model_name = \"bloom-560m\" # bloom-1b7, bloom\n",
+ "model_size = \"PT-560M\"\n",
+ "\n",
+ "tokenizer = BloomTokenizerFast.from_pretrained(f\"bigscience/{model_name}\",\n",
+ " add_prefix_space=True,\n",
+ " bos_token='<|startoftext|>',\n",
+ " eos_token='<|endoftext|>',\n",
+ " pad_token='<|pad|>')\n",
+ "\n",
+ "df['demonstrations'] = tokenizer.bos_token + df['prompt'] + tokenizer.eos_token + df['completion'] + tokenizer.eos_token\n",
+ "\n",
+ "df['length'] = df['demonstrations'].apply(lambda x: len(tokenizer.encode(x)))\n",
+ "\n",
+ "print(\"Total number of demonstrations: \", len(df))\n",
+ "print(f\"The longest demonstration is {df['length'].max()} tokens long.\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "kYvd27UdCnib"
+ },
+ "source": [
+ "6. Create the Dataset class."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "id": "WlbAfMQ4v4gA"
+ },
+ "outputs": [],
+ "source": [
+ "import torch\n",
+ "from torch.utils.data import Dataset\n",
+ "\n",
+ "max_length = 300\n",
+ "\n",
+ "class DemoDataset(Dataset):\n",
+ "\n",
+ " def __init__(self, demonstrations, tokenizer, max_length=max_length):\n",
+ "\n",
+ " self.tokenizer = tokenizer\n",
+ " self.input_ids = []\n",
+ " self.attn_masks = []\n",
+ "\n",
+ " for demo in demonstrations:\n",
+ "\n",
+ " encodings_dict = tokenizer(demo,\n",
+ " truncation=True,\n",
+ " max_length=max_length,\n",
+ " padding=\"max_length\")\n",
+ "\n",
+ " self.input_ids.append(torch.tensor(encodings_dict['input_ids']))\n",
+ " self.attn_masks.append(torch.tensor(encodings_dict['attention_mask']))\n",
+ "\n",
+ " def __len__(self):\n",
+ " return len(self.input_ids)\n",
+ "\n",
+ " def __getitem__(self, idx):\n",
+ " return self.input_ids[idx], self.attn_masks[idx]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Iza0NCjSCnif"
+ },
+ "source": [
+ "7. Split the data into training and validation splits."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "-IOfa2PEv4gD",
+ "outputId": "a49bc1ca-e880-4fb1-97d9-3a12ada3e854"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Number of training samples: 47,586\n",
+ "Number of validation samples: 5,288\n"
+ ]
+ }
+ ],
+ "source": [
+ "from torch.utils.data import random_split\n",
+ "\n",
+ "dataset = DemoDataset(df.demonstrations.to_list(), tokenizer, max_length=max_length)\n",
+ "\n",
+ "train_size = int(0.9 * len(dataset))\n",
+ "val_size = len(dataset) - train_size\n",
+ "\n",
+ "train_dataset, val_dataset = random_split(dataset, [train_size, val_size])\n",
+ "\n",
+ "print('Number of training samples: {:,}'.format(train_size))\n",
+ "print('Number of validation samples: {:,}'.format(val_size))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "lfOIsZLUCnim"
+ },
+ "source": [
+ "8. Create the `DataLoaders` and specify the `batch_size`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "id": "cUkCNV-6v4gG"
+ },
+ "outputs": [],
+ "source": [
+ "from torch.utils.data import DataLoader, RandomSampler, SequentialSampler\n",
+ "\n",
+ "train_dataloader = DataLoader(\n",
+ " train_dataset,\n",
+ " sampler=RandomSampler(train_dataset),\n",
+ " batch_size=16\n",
+ " )\n",
+ "\n",
+ "# validation data loader doesn't need randomization\n",
+ "validation_dataloader=DataLoader(\n",
+ " val_dataset,\n",
+ " sampler=SequentialSampler(val_dataset),\n",
+ " batch_size=16\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "_qljce5ECnip"
+ },
+ "source": [
+ "9. Load the base model (`BloomForCausalLM`)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 497,
+ "referenced_widgets": [
+ "6db5a06dcf06463f96fb1b755a5e1006",
+ "35c3076ab1124dec9fdc21b872977b2a",
+ "0b36596e98e749a687398f8261bda952",
+ "19a7c0f847284b98b817ff8327ff086a",
+ "d303dc1f327348528b178c1422adec5c",
+ "fb6571a9daa6425198031c0f323a5872",
+ "3f0c2874d19b4608b79d36426bd7e928",
+ "9a52390bd7e24ff896d5bb616586eabd",
+ "a8f9a09af8d843a094def23f0570c829",
+ "b3c5e63d85654d31801b9c79979215ae",
+ "34029773cd0146ee9c5c31b672bfd741",
+ "69776b97e7eb4a98b23921a4a9d25438",
+ "9beff90a32844d39835eb4dcb11f74dc",
+ "907f3f869cb34ea195437a6128979745",
+ "6eec30456b014b339ca3573a7838b3c0",
+ "26a17f02ab8941f798018ae96cd41944",
+ "a0c084257af64a0caaddc7e3396f0d46",
+ "43d16c6ac9a24699a3300124462978ee",
+ "aee258b70ece41bca365f518fa947dd8",
+ "bd6ee166d596412a94f7205c7eca09ae",
+ "d620c5ae11d0413186282f841f924302",
+ "1793d1e87ce84f209ac84ea64bb61a99"
+ ]
+ },
+ "id": "Rmg-5YJqv4gH",
+ "outputId": "023a4adc-9c6d-4f87-d8d2-b7cab8d490be"
+ },
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "6db5a06dcf06463f96fb1b755a5e1006",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Downloading (…)lve/main/config.json: 0%| | 0.00/693 [00:00, ?B/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "69776b97e7eb4a98b23921a4a9d25438",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Downloading model.safetensors: 0%| | 0.00/1.12G [00:00, ?B/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "BloomForCausalLM(\n",
+ " (transformer): BloomModel(\n",
+ " (word_embeddings): Embedding(250683, 1024)\n",
+ " (word_embeddings_layernorm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
+ " (h): ModuleList(\n",
+ " (0-23): 24 x BloomBlock(\n",
+ " (input_layernorm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
+ " (self_attention): BloomAttention(\n",
+ " (query_key_value): Linear(in_features=1024, out_features=3072, bias=True)\n",
+ " (dense): Linear(in_features=1024, out_features=1024, bias=True)\n",
+ " (attention_dropout): Dropout(p=0.0, inplace=False)\n",
+ " )\n",
+ " (post_attention_layernorm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
+ " (mlp): BloomMLP(\n",
+ " (dense_h_to_4h): Linear(in_features=1024, out_features=4096, bias=True)\n",
+ " (gelu_impl): BloomGelu()\n",
+ " (dense_4h_to_h): Linear(in_features=4096, out_features=1024, bias=True)\n",
+ " )\n",
+ " )\n",
+ " )\n",
+ " (ln_f): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
+ " )\n",
+ " (lm_head): Linear(in_features=1024, out_features=250683, bias=False)\n",
+ ")"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from transformers import BloomForCausalLM, BloomConfig\n",
+ "\n",
+ "configuration = BloomConfig.from_pretrained(f\"bigscience/{model_name}\", output_hidden_states=False)\n",
+ "\n",
+ "model = BloomForCausalLM.from_pretrained(f\"bigscience/{model_name}\")\n",
+ "model.resize_token_embeddings(len(tokenizer))\n",
+ "\n",
+ "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
+ "\n",
+ "model.to(device)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "y8-KTEVelgy-"
+ },
+ "source": [
+ "10. Freeze some of the layers for constrained fine-tuning. This allows the model to retain some of its original capabilities after the tuning."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "B_gOcURylhup",
+ "outputId": "643600c2-4ce0-47de-a9d9-310010a74154"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Number of transformer blocks in the model: 24\n",
+ "Number of transformer blocks to un-freeze: 6\n",
+ "Number of frozen layers: 218\n",
+ "Number of trainable layers: 75\n"
+ ]
+ }
+ ],
+ "source": [
+ "UNFREEZE_LAST_N = 6\n",
+ "\n",
+ "print(\"Number of transformer blocks in the model: \", model.config.n_layer)\n",
+ "print(\"Number of transformer blocks to un-freeze: \", UNFREEZE_LAST_N)\n",
+ "\n",
+ "for parameter in model.parameters():\n",
+ " parameter.requires_grad = False\n",
+ "\n",
+ "for i, m in enumerate(model.transformer.h):\n",
+ " #Only un-freeze the last n transformer blocks\n",
+ " if i+1 > model.config.n_layer - UNFREEZE_LAST_N:\n",
+ " for parameter in m.parameters():\n",
+ " parameter.requires_grad = True\n",
+ "\n",
+ " for parameter in model.transformer.ln_f.parameters():\n",
+ " parameter.requires_grad = True\n",
+ "\n",
+ " for parameter in model.lm_head.parameters():\n",
+ " parameter.requires_grad = True\n",
+ "\n",
+ "num_frozen_layers = sum(1 for parameter in model.parameters() if not parameter.requires_grad)\n",
+ "num_trainable_layers = sum(1 for parameter in model.parameters() if parameter.requires_grad)\n",
+ "\n",
+ "print(\"Number of frozen layers:\", num_frozen_layers)\n",
+ "print(\"Number of trainable layers:\", num_trainable_layers)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "eeieIbKxCnit"
+ },
+ "source": [
+ "11. Set the training hyperparameters."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "id": "qlbLg6tqv4gI"
+ },
+ "outputs": [],
+ "source": [
+ "from transformers import get_linear_schedule_with_warmup\n",
+ "\n",
+ "epochs = 2\n",
+ "\n",
+ "warmup_steps = 1e2\n",
+ "\n",
+ "sample_every = 400\n",
+ "\n",
+ "optimizer = torch.optim.AdamW(model.parameters(), lr = 5e-4, eps = 1e-8)\n",
+ "\n",
+ "total_steps = len(train_dataloader) * epochs\n",
+ "\n",
+ "scheduler = get_linear_schedule_with_warmup(optimizer,\n",
+ " num_warmup_steps = warmup_steps,\n",
+ " num_training_steps = total_steps)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "c772AMWjCniu"
+ },
+ "source": [
+ "12. Training/Validation loop. Track the carbon emissions of your work by using `codecarbon`. 🌱"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1000
+ },
+ "id": "_X_m8XOtv4gR",
+ "outputId": "6cc72380-10d4-4237-d3b8-9e3646cfbed7"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Beginning epoch 1 of 2\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 13%|█▎ | 400/2975 [07:13<46:11, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 400 of 2975. Loss:0.7289326786994934.\n",
+ "\n",
+ "\n",
+ "Example output: Quem escreveu o livro Alice no País das Maravilhas.Alice é uma coleção de três livros de fantasia inspirados no famoso personagem Alice. Este livro é adaptado para os anos 30 e é adaptado ao inglês para homenageá-lo. Alice é uma grande dona de casa suburbânea, chamada Alice (An Alice). Alice realmente ama brincar com seus brinquedos e não aceitaria qualquer perigo. Alice ainda se surpreenderá com as criaturas mágicas em torno dela. Alice realmente é uma dona de casa suburbânea, não conseguiu se preparar para as coisas mágicas, mas, na verdade, ela também deveria se preparar. Alice não se esforça muito para a festa de aniversário de aniversário de seu professor. Alice não conseguiu se preparar para a festa de aniversário de aniversário de seu professor. Alice nunca pode provar o que realmente gosta, mas ela gosta disso. Alice se esforça muito para a festa de aniversário de aniversário de seu professor. Alice não conseguiu se preparar para a festa de aniversário de aniversário de\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 27%|██▋ | 800/2975 [14:29<39:00, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 800 of 2975. Loss:1.0526474714279175.\n",
+ "\n",
+ "\n",
+ "Example output: Como posso otimizar minha pontuação de crédito.Para otimizar sua pontuação de crédito, você pode usar vários métodos, como excluir todas as informações pertinentes do relatório do cartão de crédito, criar uma nova pontuação do cartão, reorganizar as informações do relatório e reduzir os juros do cartão. Além disso, também pode tentar aumentar sua pontuação por meio de outros métodos, como abrir uma nova conta bancária, pagar dívidas e ter um melhor Credit Insurance Credit Report.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 40%|████ | 1200/2975 [21:42<31:51, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 1200 of 2975. Loss:0.7367402911186218.\n",
+ "\n",
+ "\n",
+ "Example output: Onde estão os melhores lugares para ir na África.Os melhores lugares para ir na África podem diferir por região e nível de vida. Além disso, os melhores locais para ir podem diferir um pouco por país e época do ano. Para encontrar os melhores locais para ir nas África, tente pesquisar online por comentários e informações sobre outros viajantes que viajaram lá. Você pode até tentar entrar em contato com os locais para descobrir quais são as atrações, restaurantes e atrações mais próximas e ver se há alguma recomendação ou informação sobre atividades especiais ou atrações especiais para visitar na África.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 54%|█████▍ | 1600/2975 [28:55<24:40, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 1600 of 2975. Loss:0.8130611777305603.\n",
+ "\n",
+ "\n",
+ "Example output: Qual é a maneira mais fácil de aprender uma língua estrangeira.A maneira mais fácil de aprender uma língua estrangeira é mergulhar na cultura ouvindo, assistindo e assistindo no filme. Tente encontrar recursos e vídeos que possam ajudar em sua jornada, como cursos on-line, sites e aplicativos de aprendizado de idiomas, bem como professores nativos, recursos de prática e cursos, para ajudá-lo a dominar o idioma rapidamente.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 67%|██████▋ | 2000/2975 [36:08<17:30, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2000 of 2975. Loss:0.7017183303833008.\n",
+ "\n",
+ "\n",
+ "Example output: Que medidas podem ser tomadas para evitar que os sistemas de IA exibam resultados não intencionais e conduta indesejável?Existem várias medidas que podem ser tomadas para evitar que sistemas de IA exibam resultados não intencionais e comportamento indesejável. Um bom ponto de partida é garantir que os algoritmos de IA estejam alinhados com os valores humanos. Isso significa que os algoritmos ofegulem os sistemas de IA quando se sentem que podem potencialmente fazer mal a outra pessoa. Além disso, você deve considerar a segurança de dados ao projetar algoritmos de IA e que os sistemas de IA não sejam vulneráveis a atividades malévolas. Por fim, sempre que possível, é importante evitar o uso de algoritmos de IA que sejam tendenciosos contra determinados grupos de pessoas ou em situações em que as pessoas possam não estar confortáveis com esse comportamento.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 81%|████████ | 2400/2975 [43:22<10:19, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2400 of 2975. Loss:1.004365086555481.\n",
+ "\n",
+ "\n",
+ "Example output: É possível possuir livre arbítrio em um mundo onde a causalidade governa tudo?Causação e Escolhência, por Isaac Asimov, não é uma questão de tomada de decisão, mas uma questão de tomada de decisão de ação.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 94%|█████████▍| 2800/2975 [50:33<03:08, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2800 of 2975. Loss:0.7774688601493835.\n",
+ "\n",
+ "\n",
+ "Example output: Cite cinco países da América do Sul.Canadá, EUA, França, Alemanha, Itália e México são países da América do Sul.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 2975/2975 [53:41<00:00, 1.08s/it]\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Average Training Loss: 0.9323573218574043.\n",
+ "\n",
+ "\n",
+ "Validation loss: 0.7406383019919842.\n",
+ "\n",
+ "\n",
+ "Beginning epoch 2 of 2\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 13%|█▎ | 400/2975 [07:10<46:09, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 400 of 2975. Loss:0.8597747683525085.\n",
+ "\n",
+ "\n",
+ "Example output: Quais são algumas boas dicas para administrar uma pequena empresa.Uma das melhores dicas para gerenciar uma pequena empresa é criar um plano de negócios que descreva as metas e as estratégias que você usará para alcançá-las e desenvolver um orçamento para o seu negócio.\n",
+ "2 Outra boas dicas para administrar uma pequena empresa é pesquisar diferentes opções de financiamento, criar um plano financeiro e se familiarizar com os regulamentos locais e nacionais para o tipo de negócio.\n",
+ "3 Por fim, para desenvolver um plano de negócios, certifique-se de que você tenha um plano de negócios em vigor que descreva o que seu negócio fará e quais estratégias planeja usar para fazê-lo funcionar.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 27%|██▋ | 800/2975 [14:24<39:03, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 800 of 2975. Loss:0.4185038208961487.\n",
+ "\n",
+ "\n",
+ "Example output: É um vestido muito bonito. Você pode sugerir algum acessório para combiná-lo.Um bom ponto de partida para procurar acessórios em uma camisa é olhar em uma sapatilha, para encontrar acessórios e sapatilhas com um padrão semelhante. Se você procura uma maneira acessível de parecer elegante com roupas básicas, uma boa opção seria um terno ou camisa social, com cinto, gola e cintos.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 40%|████ | 1200/2975 [21:36<31:51, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 1200 of 2975. Loss:0.4783702790737152.\n",
+ "\n",
+ "\n",
+ "Example output: Nomeie os membros da banda PhishEminem\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 54%|█████▍ | 1600/2975 [28:47<24:40, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 1600 of 2975. Loss:0.45857781171798706.\n",
+ "\n",
+ "\n",
+ "Example output: Quais são os prós e os contras de comer vegan.Prós de comer vegan:\n",
+ "- Estudos sugeriram que o consumo de vegan pode reduzir os efeitos de muitos produtos de origem animal em nosso corpo e melhorar o bem-estar geral\n",
+ "- Estudos têm mostrado que comer vegan tem sido associado à melhoria da saúde cardiovascular e à melhoria do bem-estar\n",
+ "- Estudos também mostraram que comer vegano pode reduzir o risco de desenvolver certas condições médicas\n",
+ "- Estudos também mostraram que comer vegano pode aumentar a imunidade\n",
+ "- Comer vegan também pode reduzir o estresse e a ansiedade\n",
+ "- Estudos demonstraram que comer vegano pode reduzir a inflamação no corpo\n",
+ "- Estudos também demonstraram que comer vegano pode aumentar os níveis de colesterol e pressão arterial\n",
+ "- Estudos demonstraram que comer vegano pode diminuir os sintomas da depressão e a ansiedade\n",
+ "- Estudos também demonstraram que comer vegano pode diminuir o risco de desenvolver doenças cardíacas\n",
+ "- Estudos demonstraram que comer\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 67%|██████▋ | 2000/2975 [36:02<17:29, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2000 of 2975. Loss:0.5815266370773315.\n",
+ "\n",
+ "\n",
+ "Example output: Qual poderia ser a melhor maneira de investir dinheiro.A melhor maneira de investir dinheiro depende de suas metas financeiras individuais e tolerância ao risco. Considere fatores como duração do investimento, retorno potencial e retorno de dividendos. Pesquise e escolha uma abordagem de investimento que se adapte ao seu nível de portfólio e objetivos. Você também pode considerar o uso de um consultor financeiro para ajudá-lo a tomar as melhores decisões e minimizar o risco de correr o risco de gastar demais.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 81%|████████ | 2400/2975 [43:15<10:19, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2400 of 2975. Loss:0.46972665190696716.\n",
+ "\n",
+ "\n",
+ "Example output: Quais são as cinco principais oportunidades de investimento no momento.Resposta: Ações, títulos, fundos mútuos, ETFs e outros investimentos diversificados agora podem ser vistos como possíveis oportunidades de investimento, dependendo de suas circunstâncias individuais e seus objetivos financeiros. Investir no mercado de ações, ETFs e outros investimentos diversificados permite que você invista em uma ampla variedade de ativos, o que é importante para garantir que você esteja no caminho certo para obter seu retorno potencial. Além disso, é importante pesquisar e entender os riscos envolvidos antes de tomar qualquer decisão de investimento, portanto, é melhor ter um plano para gerenciar o risco e obter o máximo retorno possível.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 94%|█████████▍| 2800/2975 [50:29<03:08, 1.08s/it]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2800 of 2975. Loss:0.5259003043174744.\n",
+ "\n",
+ "\n",
+ "Example output: Qual é a melhor maneira de cozinhar brócolis.A melhor maneira de cozinhar o brócolis é temperá-lo com ervas, como coentro, tomilho, alho ou hortelã. Para torná-lo mais crocante, você também pode mariná-lo em uma mistura de vinagre, suco de limão e sal. Sirva seu brócolis com torradas ou um acompanhamento de sua preferência.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 2975/2975 [53:38<00:00, 1.08s/it]\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Average Training Loss: 0.5781394772970376.\n",
+ "\n",
+ "\n",
+ "Validation loss: 0.668777983894521.\n",
+ "\n",
+ "Training complete!\n"
+ ]
+ }
+ ],
+ "source": [
+ "from codecarbon import EmissionsTracker\n",
+ "import tqdm\n",
+ "\n",
+ "output_dir = f'./Aira-{model_size}'\n",
+ "\n",
+ "tracker = EmissionsTracker(\n",
+ " project_name=\"Aira_emissions\",\n",
+ " log_level=\"critical\",\n",
+ " output_dir=output_dir,\n",
+ " output_file=\"Aira_emissions.csv\",\n",
+ ")\n",
+ "\n",
+ "training_stats = []\n",
+ "\n",
+ "for epoch_i in range(0, epochs):\n",
+ "\n",
+ " print(f'\\nBeginning epoch {epoch_i + 1} of {epochs}\\n')\n",
+ "\n",
+ " total_train_loss = 0\n",
+ "\n",
+ " model.train()\n",
+ "\n",
+ " for step, batch in enumerate(tqdm.tqdm(train_dataloader)):\n",
+ "\n",
+ " b_input_ids = batch[0].to(device)\n",
+ " b_labels = batch[0].to(device)\n",
+ " b_masks = batch[1].to(device)\n",
+ "\n",
+ " model.zero_grad()\n",
+ "\n",
+ " outputs = model(b_input_ids,\n",
+ " labels=b_labels,\n",
+ " attention_mask = b_masks)\n",
+ "\n",
+ " loss = outputs[0]\n",
+ "\n",
+ " batch_loss = loss.item()\n",
+ " total_train_loss += batch_loss\n",
+ "\n",
+ " if step % sample_every == 0 and not step == 0:\n",
+ "\n",
+ " print(f'\\nBatch {step} of {len(train_dataloader)}. Loss:{batch_loss}.\\n')\n",
+ "\n",
+ " model.eval()\n",
+ "\n",
+ " inputs = tokenizer(tokenizer.bos_token + df.prompt.sample().iloc[0] + tokenizer.eos_token, return_tensors=\"pt\").to(device)\n",
+ "\n",
+ " sample_outputs = model.generate(**inputs,\n",
+ " bos_token_id=tokenizer.bos_token_id,\n",
+ " pad_token_id=tokenizer.pad_token_id,\n",
+ " eos_token_id=tokenizer.eos_token_id,\n",
+ " do_sample=True,\n",
+ " top_k=50,\n",
+ " max_length = 200,\n",
+ " top_p=0.95,\n",
+ " num_return_sequences=1)\n",
+ "\n",
+ " for i, sample_output in enumerate(sample_outputs):\n",
+ " print(f'\\nExample output: {tokenizer.decode(sample_output, skip_special_tokens=True)}\\n')\n",
+ "\n",
+ " model.train()\n",
+ "\n",
+ " loss.backward()\n",
+ "\n",
+ " optimizer.step()\n",
+ "\n",
+ " scheduler.step()\n",
+ "\n",
+ " avg_train_loss = total_train_loss / len(train_dataloader)\n",
+ "\n",
+ "\n",
+ " print(f'\\nAverage Training Loss: {avg_train_loss}.\\n')\n",
+ "\n",
+ " model.eval()\n",
+ "\n",
+ " total_eval_loss = 0\n",
+ " nb_eval_steps = 0\n",
+ "\n",
+ " for batch in validation_dataloader:\n",
+ "\n",
+ " b_input_ids = batch[0].to(device)\n",
+ " b_labels = batch[0].to(device)\n",
+ " b_masks = batch[1].to(device)\n",
+ "\n",
+ " with torch.no_grad():\n",
+ "\n",
+ " outputs = model(b_input_ids,\n",
+ " attention_mask = b_masks,\n",
+ " labels=b_labels)\n",
+ "\n",
+ " loss = outputs[0]\n",
+ "\n",
+ " batch_loss = loss.item()\n",
+ " total_eval_loss += batch_loss\n",
+ "\n",
+ " avg_val_loss = total_eval_loss / len(validation_dataloader)\n",
+ "\n",
+ "\n",
+ " print(f'\\nValidation loss: {avg_val_loss}.\\n')\n",
+ "\n",
+ " training_stats.append(\n",
+ " {\n",
+ " 'epoch': epoch_i + 1,\n",
+ " 'Training Loss': avg_train_loss,\n",
+ " 'Valid. Loss': avg_val_loss,\n",
+ " }\n",
+ " )\n",
+ "tracker.stop()\n",
+ "print(\"Training complete!\")\n",
+ "\n",
+ "df_stats = pd.DataFrame(data=training_stats)\n",
+ "df_stats = df_stats.set_index('epoch')\n",
+ "df_stats.to_parquet(f\"{output_dir}/training_stats.parquet\", compression=\"gzip\")\n",
+ "\n",
+ "model_to_save = model.module if hasattr(model, 'module') else model\n",
+ "model_to_save.save_pretrained(output_dir)\n",
+ "tokenizer.save_pretrained(output_dir)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "cheAsv8aCnix"
+ },
+ "source": [
+ "13. Check the training stats and plot the learning curves."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 592
+ },
+ "id": "J1-hAY9Av4gT",
+ "outputId": "45e36fa0-91ff-4755-f775-2e666a182eb5"
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAABBsAAAI/CAYAAAA2r9HeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC0eUlEQVR4nOzdd3jV5f3/8ec5WWQPRgYrYQjIJmBAEBRQUVQQGbVo60TF1fK1tWrFhaOtde8BKJX+AGW4GGUPIUAghCArgxAygexBxjnn90eaU0ISyDjhnCSvx3V5Vc/n/tyf1wm5ted97mGwWCwWRERERERERERsxGjvACIiIiIiIiLSsqjYICIiIiIiIiI2pWKDiIiIiIiIiNiUig0iIiIiIiIiYlMqNoiIiIiIiIiITanYICIiIiIiIiI2pWKDiIiIiIiIiNiUig0iIiIiIiIiYlMqNoiIiIiIiIiITanYICIirU5kZCS9evWiV69eNu97+fLl9OrVi7Fjx9q8b7GNu+++m169evH+++/X61pj+74cxo4dS69evVi+fLldni8iIlLJ2d4BRESkZWrMB/nXX3+dKVOm2DCN1NeBAweYP38+UVFR5OTk4OvrS3BwMCNHjuSmm26id+/eDeo3LS2NsWPHYjab+fOf/8z9999fp/tWrlzJ008/DVQUdPr27dug5zdXy5cvJyUlhauuuoqIiAh7x7G5v/zlL6xYsYKOHTuyceNGe8cREREbULFBRESaRLt27Wp8vaioiKKioou2adOmTZPlAnB3dycsLKxJ+vb29iYsLIzAwMAm6f9y+Pbbb3n++ecxm81Axc+rqKiIgwcPcvDgQfbt28eiRYsa1HdwcDBXX30127dvZ/ny5XUuNnz33XcA9OnTp0kLDcHBwYSFheHv799kz2iIFStWsHv3bh577LGLFhs6d+6Mq6sr3t7elzGdiIhIdSo2iIhIk9ixY0eNr7///vt88MEHF23T1AYMGMCaNWuapO/rr7+e66+/vkn6vhyysrJ4+eWXMZvN9OnTh3nz5tGvXz8AkpOT2bhxIwkJCY16xtSpU9m+fTtxcXEcOHCAgQMHXrR9cnIye/bsAeCOO+5o1LMv5e9//3uT9t/UvvrqK3tHEBERAVRsEBERkfPs3buXkpISAP7xj3/Qs2dP67XOnTvz+9//vtHPGDduHH5+fuTk5PDdd99dstiwfPlyLBYLrq6u3HrrrY1+voiIiDQ9FRtERMShVO718PXXX9OjRw8+++wzNm/eTHp6OufOnePo0aMAFBcXs2HDBrZu3crRo0fJyMigoKAAPz8/BgwYwIwZMxgzZkyNz4iMjOR3v/sdgLW/SsuXL+eZZ56xrh2PjY3l888/t+5dEBgYyPjx45k9eza+vr7V+r7w/vNVzuq46qqrWLRoETt37mTBggXExMRQWFhIp06dmDhxIg8++CBubm61/ozWr1/P119/za+//orJZKJz587ceuut3HPPPXzyySdVnlFfTk5O1r9vqqUgrq6uTJo0ia+++oqffvqJZ599ttalM2azmZUrVwIVs0b8/PwAOHbsGGvXrmXPnj2kpqaSmZmJs7MzXbp0YcyYMfz+978nICCg3tnuvvtu63KFxx9/vNp1k8nE4sWLWb58OYmJibi6utKrVy9mzpzJhAkTLtp3cnIyq1evJjIyklOnTpGRkYHBYLDuhXHvvfcSEhJS5Z7K36dKH3zwgXVmUKUNGzbQqVMnoGKDyJSUlFr3PTGZTKxYsYLvv/+eo0ePUlhYiL+/P4MHD2bmzJm1LtE4/+fy2GOPsWzZMpYtW0Z8fDwWi4UrrriC3/72t0yaNOmiP4OmcPr0aebPn8/WrVtJSUkBoGPHjowZM4b77ruv1uVaubm5LFy4kM2bN5OUlERpaSm+vr4EBAQwePBgbrrpJkaMGFHlnnPnzvHNN9+wbt06EhISKCoqwtvbm4CAAPr378/YsWO58cYbm/w9i4g0Byo2iIiIQzp58iRz5szhzJkzuLm54exc9T9Zq1evtn4IMxgMeHl54ezszOnTp9mwYQMbNmzgvvvus24q2BA//PADzzzzDGVlZXh7e2MymTh16hQLFy5kx44dLFmyBE9Pzwb1/cUXX/Dmm28CFfs8lJWVkZCQwPvvv8/u3btZsGBBlQ/+lf72t78xf/586z/7+PgQHx/Pm2++yZYtWwgPD2/Ym/2vESNGEBAQQFZWFl9//TWPPfZYo/qrzdSpU/nqq68oKChg7dq1tX5I3blzJ6mpqUDVJRQPP/yw9YOlm5sb7u7u5ObmcvjwYQ4fPsyKFStYuHAh3bp1s1nm0tJSHnnkEbZv3w6A0WjExcWFPXv2sHv3bh588MGL3v/ss8+ye/duAFxcXPD09CQvL4/4+Hji4+NZsWIFn3zyCUOHDrXe06ZNG9q1a0dubi5lZWV4eHjg4eFRpd+afk9qkp+fz+zZs60ZnJyc8PT05PTp06xdu5a1a9decsyYTCYeffRRNmzYgLOzM23atKGwsJDo6Giio6NJSkriiSeeqFMeW9i9ezePPvooeXl5ANafTVxcHHFxcXz77bd89NFHVX6mAOnp6dx5553W3y2j0Yi3tzfZ2dmcOXOGY8eOkZiYWKXYUFBQwMyZMzly5AhQ8e8db29v8vPzyc7OJj4+nj179qjYICLyXzr6UkREHNJrr72Gt7c3CxcuJDo6mn379lXZZ8HHx4f77ruPxYsXs3//fvbu3Ut0dDTbtm3j8ccfx8XFhfnz57Nhw4YGPT8rK4tnn32WyZMns3nzZvbu3cu+ffuYO3cuLi4uHD9+nC+++KJBfR85coR//vOfzJo1i19++YU9e/awd+9eHn30UaBi5sWKFSuq3ffTTz9ZCw233HILW7duZc+ePezbt49XXnmFmJgY/v3vfzcoUyUPDw/rh80PP/yQ77//vlH91eaKK65gwIABwP82f6xJ5bWOHTtW+eA3bNgw3njjDTZt2kRMTAyRkZHExMSwcOFCBgwYQEZGBk899ZRNM//zn/9k+/btGAwG/vCHP7Bnzx727NnDjh07uPPOO/n88885fPhwrff37t2buXPnsnbtWmvmgwcPsmzZMq655hry8/P54x//yLlz56z33HzzzezYsYPBgwcDcN9997Fjx44qfwUHB9cp/3PPPcfu3btxcXHhr3/9K1FRUezZs4dt27ZZCznz58+/6O/Q4sWL2b17N2+88QZRUVFERUWxZcsWrrvuOgA+/vhjTpw4Uac8jZWWlmYtNPTo0cP674L9+/fzzTffEBYWRm5uLo8++igZGRlV7n3//fdJTU2lY8eOLFy4kNjYWHbv3s3BgwfZuHEjL774YrXlPV9//TVHjhzBz8+P999/n5iYGPbs2cPBgwfZunUrf/vb3xg5cuRlee8iIs2Big0iIuKQjEYjCxcuZMSIERiNFf+5Ov8EifHjx/P0008THh6Ou7u79fUOHTrw2GOP8cc//hGgwacmFBcXM3HiRObNm2f9MOfu7s7MmTO56667gIoP/w2Rl5fH7NmzmTNnjnWqv5eXF0888QQ33HBDjX1bLBbeffddAEaOHMmbb75pXebg5ubG9OnTefHFF8nNzW1QpkopKSnWIorZbOYvf/nLRYsBjTF16lSg4tvp5OTkatdzc3NZv349AFOmTLH+HkDFDI/bb7+9yrIDV1dXRowYwcKFC2nXrh2HDh1i7969NsmakZHBv/71LwAeeeQRHnnkEby8vABo27YtL774Irfccgv5+fm19vHcc88xc+ZMQkNDre/F2dmZAQMG8Omnn9KrVy8yMzNZu3atTTKf78CBA9Z+n3/+ee6++27ruGnfvj2vvfaa9Rv5d99917pvx4Vyc3P54IMPuP32261LX4KCgnjvvffo0KEDZrOZ1atX2zx/TT755BPy8vLw9fVl4cKFVWb1DB06lIULF+Ll5UVOTg6ffvpplXv3798PwJw5cxgxYoR1doiTkxMdO3bkzjvvrFasqrznvvvu44YbbsDV1RWo+HdVYGAgkydP5pVXXmmy9ysi0tyo2CAiIg5p0qRJBAUFNfj+a6+9FoDo6GhMJlOD+njkkUdqfH3cuHEAJCUlUVxcXO9+XV1due+++y7a94V7SRw+fJikpCQAHnroIQwGQ7V7L/zwXV+5ubn8/ve/5/jx49x55528++67GAwGnnvuuVqLNt988w29evVq0NTxiRMn4u7ujsViqXEmx48//khJSQlGo5Hbb7+9zv16enoybNgwAPbt21fvXDVZu3Yt5eXltGnTptbjOhuz5MTJyYlrrrkGgKioqAb3U5uff/4ZqCgMTJs2rcY2Tz75JADZ2dm1nhQzZMgQhg8fXu11V1dXRo0aBVT/3W0KFovFOtPpN7/5De3bt6/WJigoiN/85jdA9eKdj48PULHfQ1015B4RkdZMezaIiIhDGjJkyCXbnDlzhsWLF7Njxw5OnDhBfn5+tcJCcXExubm59d4s0M/Pj65du9Z4rUOHDta/z8vLqzKzoi569uxZ614PlX1fOEPh0KFDQMVa/8op9RcyGAwMGzaMVatW1StPpXnz5pGcnMygQYN4/vnncXJywmQy8ac//Yl58+ZRVFTEQw89VOWeyunpffr0qffzvLy8uPHGG1m5ciUrV67kscceqzJ7oXJGxYgRI+jYsWO1+zdt2sSqVas4ePAgZ8+erbHwk56eXu9cNYmNjQWgX79+1hkNFwoLCyMwMLDalP3z7d27l2+//Zbo6GgyMjIoKiqq1uZi9zdUZf6IiIgqP+Pzde/e3Zo/NjaWsWPHVmtzsZNDavvdbQqnTp0iJycHoNomjucbOXIkX3zxBTk5OSQnJ9O5c2egohi5f/9+/vnPf5KQkMD111/PkCFDav2zrbznxx9/5F//+hdZWVncfPPNDBkypEEbkYqItAYqNoiIiENq27btRa/v37+fWbNmWTeGg4r9Btzd3TEYDJhMJrKzswEaNPvgYhs/nr8hX1lZWZP0XV5eXuX1yvfi5+dnnb5dk4aeIHH69Gnrt9+zZ8+25pg4cSJlZWU888wzvPXWWxQWFjJnzhzrfXv27AGwrtmvr6lTp7Jy5UpSUlLYuXOndc37kSNHrAWWyuUWlcxmM3/605/48ccfra85Ozvj6+uLi4sLULEZYklJSYP+7Gty9uxZ4NI/36CgoFqLBf/4xz+q7PPh5ORUJXNRUZH1L1urb/7K9he62O9u5SauF/7uNoXz813sPZ1/LSsry1psuP/++zly5AirV69m6dKlLF26FIPBQM+ePRk1ahTTpk2rtrnorbfeSkxMDP/617/46aefrLMlunbtysiRI7njjjvo16+fLd+miEizpmUUIiLikGr79hUqPsz83//9H3l5efTp04fPPvuMqKgo9u/fzy+//MKOHTtYunSptb3FYrkckZu1X3/91foh8cITLSZPnsy8efMwGAx8+umnzJs3D4vFQkJCAvv378fX15fx48c36LnDhg0jNDQUqDjmsVLl3/v5+VXr+9tvv+XHH3/EycmJRx99lHXr1nHw4EF2795t3TSxclmHo/zZ79ixw1po+O1vf8sPP/xQLfPvf/97O6dsPVxcXHjnnXdYtWoVjz76KMOHD8fd3Z1jx44xf/58brnlliqnvlR67rnnWLNmDXPmzGH06NH4+PiQlJTE4sWLueOOO3j11Vft8G5ERByTZjaIiEizEx0dTUpKCk5OTnz66ac1frPZ0tZV+/v7A5CTk0NpaWmtsxsaOgW/sLDwotfvuOMOysvLeeGFF1i0aBGFhYXk5eVhsVj4/e9/3+AjQCv7/uc//8l//vMf67KUylMwbr311mrvtfIb5alTp9Z6zOKZM2canKcmlTNtLvXzre16ZeZRo0bxwgsv1NjG1pnP17ZtWxITEy+5rKTy+qVmFtnb+fkyMjJqPeL0/D+PmpY79O7dm969ewMVRcw9e/bw4YcfsmfPHv7+979z9dVXW69X6tq1Kw899BAPPfQQZrOZmJgYPv/8c9avX8/XX3/N8OHDrXuviIi0ZprZICIizU5aWhpQ8eGhtinUO3fuvJyRmlzfvn2BimUblbviX8hisTT49IXK6eUAu3btqrHNjBkzeP7554GKmQfr168nLCyMBx54oEHPrDR58mScnJwoKSnhhx9+YOPGjdZlIxcuoYD/fSC+8sora+yvsLCQAwcONCrThSqnx8fGxtZamDlx4kStH+YvldlisdT6cwesG4I2dKZGZf7IyEjMZnONbeLj460fzvv379+g51wunTp1ws/PD7j4WP/ll1+Aihky5/+O18TZ2ZkRI0bw6aef4urqisVisd5fG6PRyKBBg3jvvfesm7Ne6h4RkdZCxQYREWl2vL29gYpvgmv6Njg9Pb3BR146qj59+lg3rPzss89q/NC5atUqUlJSGtR/v3796NKlC1Cxt0Dlh/0LzZw5k5tuusn6z71798bNza1Bz6zUoUMHRo8eDVQUMSqXUPTt27fat8qAdRO/I0eO1NjfRx99dMmZGvV144034uTkxLlz52qcXg/w4Ycf1nr/pTL/+9//rvH4zwvvP3+PkvqYOHEiUPFN/7Jly2ps89577wEVs2iuvvrqBj3ncjEYDNbfwyVLltQ4kykjI4MlS5YAcMstt1S5VlpaWmvfrq6u1j1Lzl/OdbF7nJycrHtv1HRSjIhIa6Rig4iINDvh4eF4eHhgsVj4wx/+QGJiIgAmk4lt27Zx99132zmh7RkMBh5//HEAtm/fztNPP239FrqkpIRly5bxwgsv4Ovr2+D+586di5OTEydOnGDatGmsXbuWkpISoOJnu2/fPp544glWr15t/UC1evVq3n777Ua/v8oZDLGxsWzduhWoWF5Rk8ojIpctW8aSJUusHwJPnz7Na6+9xhdffGH91ttWAgMD+e1vfwtUFDM+/fRTCgoKgIqNB19++WW+//57ayGstsxbt27lww8/tG4CmZeXxyeffMK8efMumrlnz57W+xuyVGbAgAHWfSxeeeUV/vWvf1k3zzx9+jR//etfrUdJPvnkk40uIDWU2WwmKyvron9V/twffvhhfHx8yMnJ4d57761yzGlUVBT33nsveXl5+Pn5MWvWrCrPue666/jnP/9JdHR0lSJCUlISTz31FMXFxRiNRutxngDTpk1j3rx5REZGVtnEMyMjg1deecV6NO2YMWOa5GcjItLcaM8GERFpdry9vfnzn//Miy++yJ49e5gwYQIeHh6YTCZKSkrw9/fn9ddf55FHHrF3VJu69dZbOXjwIF999RWrVq3i+++/x8fHh6KiIsrKyhg+fDgDBw60TgOvr2uuuYa33nqL5557juTkZJ544gmcnZ3x8vKisLDQevJGSEgIr732Glu3bmX+/Pl88skntG/fnrvuuqvB7+3aa6+lXbt2nDlzBrPZjJubG7feemuNbe+77z7Wrl1LQkICc+fO5cUXX8TLy4v8/HwsFgszZsygtLSUFStWNDhPTf70pz8RHx/PL7/8wltvvcW7776Ll5eXde+KBx98kAMHDrB79+5q906ePJmVK1eyd+9e3nvvPd5//318fHzIz8/HbDZz7bXX0qdPHz7++OMan3377bezYMECkpKSuPbaawkICLAWBBYvXkxQUNAl87/66qtkZ2eze/duXnnlFV5//XU8PT2t+aHiZ3vnnXc24qfUOGlpaRc9yhJg3LhxfPTRRwQFBfHhhx8ye/Zsjh8/zp133omHhweAtRjg4+PDhx9+WG251ZkzZ/jss8/47LPPMBqNeHt7c+7cOWtxzWAw8PTTT9OjRw/rPfn5+SxatIhFixZhMBjw9vamvLy8SuHhnnvusRaWRERaOxUbRESkWbrzzjsJCQnhiy++IDY2FpPJRGBgIGPGjOHBBx9s0JGUzcGzzz7LsGHD+Prrr/n1118pLS2lW7duTJo0id///ve88cYbQMWHrIaYMGECQ4YMYfHixWzdupWkpCQKCwvx8/Ojb9++XH/99dx22224uroSERHBiRMn2LhxI6+++ipt27atssSiPpydnZk8ebL1xIbrr7++1vfg4+PD//t//48PP/yQ9evXk5mZiZOTE1dddRUzZsxg4sSJ/OUvf2lQjotxc3Pj888/Z/HixSxfvpzExEQsFgtDhw61Li+pbVaNi4sL8+fP57PPPuPHH38kJSUFi8XCgAEDmDx5MjNmzLjoMozQ0FC+/vprPv30U2JiYsjJybGeHlLXoya9vb1ZuHAhK1asYNWqVRw9epSioiLatWvHkCFDmDlzJhEREfX/wdjRVVddxc8//8yCBQvYsmULKSkpGAwGunfvzpgxY7jvvvto3759tfvmz59PZGQkUVFRpKWlWZdjde3alfDwcGbOnFntGMu33nqL7du3s3fvXk6dOsWZM2coLy+nY8eODBw4kOnTp1+yUCIi0poYLI5yJlQd7dq1iwULFnDgwAGKiooICQlhwoQJzJo1y1rNro/s7GwWLFjAhg0bOHXqFM7OzvTo0YMpU6Ywbdq0Wo9e69Wr10X7bdeuHTt27Kh3HhERkcb4zW9+w/79+3niiSd49NFH7R1HREREWqlmNbNh0aJFvPrqq1gsFoKCgggODiYuLo6PP/6YdevWsXjx4nqt0UxISOC+++4jLS0NFxcXevbsSUlJCQcOHCA6OppNmzbxwQcf4Oxc+4+pX79+NU5VtfVaURERkUvZvXu39aQKTeUWERERe2o2MxtiY2OZNm0aFouFl156ienTp2MwGMjIyOCRRx7h0KFD3HDDDbz//vt16s9kMjFp0iSOHz9OeHg47777rnWa3dGjR3n44YdJTU1l9uzZPPnkk9Xur5zZsGHDBjp16mS7NyoiInIRL730Ev379+eaa66hXbt2GAwG8vLy+Pnnn3nzzTfJz89n+PDhfPXVV/aOKiIiIq1Ysyk2zJ49mw0bNjB58mT+9re/Vbl24sQJbrrpJsxmM6tWrarxmKwLbdy4kUceeQRXV1dWr15drWCwadMmHn74Ydzd3dm6dWu1daMqNoiIiD1MmjTJenyiq6sr7u7uVTb469GjB/Pnz6+2IZ6IiIjI5dQsjr4sLCxk27ZtAEyfPr3a9dDQUIYPHw5gPbbpUqKiooCKZRA1FQuuu+46PDw8KC4uZsOGDQ2NLiIiYlNPPPEEU6ZMoUePHnh4eFBYWIivry9Dhw7lmWee4dtvv1WhQUREROyuWezZcPjwYUpLS3F1dWXAgAE1tgkPD+eXX37hwIEDdeozNzcX4KL/h6xDhw6cOHGC/fv3c/vtt9fY5qOPPiIzM9O6C/rw4cO5+eabG3TkmIiIyKWMGzeOcePG2TuGiIiIyEU1i2JDYmIiUHGut4uLS41tunTpUqXtpXh7ewOQkZFRa5vMzEygYiPJ2nz33XdV/nnFihXW87P79u1bpywiIiIiIiIiLUmzWEZROQvB19e31jaV1yrbXkr//v2Bio0nU1JSql3fsmULRUVFtfY5btw43nvvPdatW0dMTAw7d+7krbfeonPnzqSkpFhPuRARERERERFpbZpFsaGkpASg1lkNgHXZQmXbSxk/fjxBQUGUlpYyZ86cKoWBmJgYXnjhBes/nzt3rtr9H330ETfeeCNdu3bFzc2NgIAAJk6cyNKlSwkJCSEnJ4cPPvigTlkuppns3ykiIiIiIiJi1SyWUbi5uQFQVlZWa5vS0tIqbS/F1dWVd955hwcffJDo6GjGjRtH165dKSkpISUlBT8/P2644QbWrVuHp6dnnbMGBAQwa9YsXnzxRdavX8+8efMwGAx1vv9CZrOFvLyiS7ZzcjLi4+NOXl4xJpO5wc8TEdvRuBRxPBqXIo5FY1LE8fj6umM0Nn5eQrMoNtRliURdllpcaPDgwaxYsYLPP/+c7du3k5ycjK+vL1OmTOGJJ57gk08+AaBdu3b1yjt48GAAcnJyyMnJwd/fv173X6i8vO7/4jWZzPVqLyJNT+NSxPFoXIo4Fo1JEcdhq8n1zaLYEBoaCkBqaiplZWU1Lqc4efJklbZ11blzZ15++eUar8XFxQH/29+hrs7PZzKZ6nWviIiIiIiISHPXLPZs6NOnDy4uLpSWlhITE1Njm6ioKAAGDRpkk2dmZWURHR0NUO8jxo4fPw5ULOnw8/OzSR4RERERERGR5qJZFBu8vLwYNWoUAEuXLq12/cSJE+zatQuACRMm2OSZ77zzDuXl5QwdOpR+/frV+b7y8nIWLFgAwPDhw3F2bhaTR0RERERERERsplkUGwBmz56NwWBg1apVLFmyxHpKQ2ZmJnPmzMFsNjN+/Hh69+5d5b6xY8cyduxY1qxZU63PLVu2WGdEVMrLy+PVV19lyZIleHh41LjE4s0332TFihUUFBRUeT0tLY0nnniC6OhonJ2defTRRxv7tkVERERERESanWbztfuAAQP4y1/+whtvvMHcuXP5+OOP8ff3Jy4ujtLSUsLCwnjllVeq3ZeSkgJAUVH1Ex22b9/O119/jZeXFx07dgQgISGBsrIy/Pz8+OCDD+jevXu1+xISEvj888957rnn6Ny5M76+vuTn55OYmIjFYsHNzY158+YxcOBAG/8URERERERERBxfsyk2ANxzzz306tWL+fPnExMTw9mzZwkJCWHChAnMmjWrXkdUAowfP56zZ89y8OBBTp48icFgICwsjLFjx3LPPffUeorEnXfeSbt27YiNjSUzM5OUlBRcXFzo2bMnI0aM4K677qJLly62eMsiIiIiIiIizY7BYrHVwRbSFEwmM1lZhZds5+xsxN/fk+zsQh0bJOIgNC5FHI/GpYhj0ZgUcTwBAZ44OTV+x4Vms2eDiIiIiIiIiDQPzWoZhYiIiIiISENYLBZMpnI0sVtaC6PRiJOT/T7yq9ggIiIiIiItVnl5Gfn5OZSWnsNi0VINaV2cnV3x9PTB3b1++xva5NmX/YkiIiIiIiKXQWlpCdnZmRiNRjw9vXFxccNoNAIGe0cTaWIWTCYTRUUF5OaeAbjsBQcVG0REREREpEUqKMjBycmZgIDA/xYZRFoPFxdwc3MnO/s0hYV5l73YoBEnIiIiIiItjslkorT0HJ6e3io0SKtlMBjw8PCkvLwUk6n8sj5bMxtaALPZwuETWZQlZuNisNA9xBejUVPDRERERKT1MptNADg7u9g5iYh9VW4SaTabcXK6fM9VsaGZizqayeL1x8nOL7G+5u/txm/H9yS8Vwc7JhMRERERcQT6Ek5aO/uMAc0nasaijmby4YrYKoUGgOz8Ej5cEUvU0Uw7JRMREREREZHWTMWGZspstrB4/fGLtvn3+uOYzTpHWERERERERC4vFRuaqWPJOdVmNFwoK7+EY8k5lyeQiIiIiIiIyH+p2NBM5RRevNBQ33YiIiIiIiKO4NVXX2TUqKH8/PMPNuvzscdmMWrUUPbt22uzPuXitEFkM+Xn6WbTdiIiIiIi0jqNGjW0QfctW/Y9wcEhNk4jLYWKDc3UFZ398Pd2u+hSigBvN67o7Hf5QomIiIiISLPTv//Aaq+VlZVx5MivAPTufSUuLtWPEHV1dW2SPG3btqNLl654enrZrM/AwCC6dOlKmzZtbNanXJzBYrFoB0EHZjKZycoqrPFa5WkUtXn09n46/lLEjpydjfj7e5KdXUh5udnecUQEjUsRR9OUY7KsrJSzZ9No2zYYF5em+VDckqWlpTJt2m2AZjA0d/UdCwEBnjg5NX7HBe3Z0IyF9+rAo7f3w9+7+lIJXy9XBvZoZ4dUIiIiIiIi0tppGUUzF96rA4N7tic+NZcyiwFzeTmffX+I3IJSth1I5bohnewdUURERESkVTGbLRxLziGnsAQ/z4qlzUajwd6xbOb8WQ/bt+9ly5ZNLFv2b+Lj48jPz2PBgm/o2bMXZ8+eYfPmjezcuZ2TJ5M4c+YMzs7OdO3albFjb+COO6bXuBTj1VdfZPXqH3n22Re4+eZbra///PMPvPbaSwwaNIT33/+UVau+Y9Wq5Zw8mYSrqxuDBg3mwQdn061b92p9PvbYLKKj9/Hee58wZMj/9qj48stPWbDgc2666Raefvqv/Pvfi1iz5ifS0lLx8PAkImI4s2Y9SmBgUI0/i9OnM/nii0/YtesX8vPz6NAhkHHjbuB3v7uPN998vcb30Vqo2NACGI0G+oQGWKegTRrVjW/+c4xV2xMZ3jcIdzf9MYuIiIiIXA5RRzNZvP54lb3V/L3d+O34ni1yifM333zFxx+/j5+fP506dSIzM8N67YcfVvLFF5/g6upG27bt6N69O7m5uRw7dpTDh39l69ZNvPfeJzXuB3Ep8+a9wNq1PxMcHEKXLl1JSkpi27Yt7N8fxRdfLKJTp8716q+8vJz/+7/HiYraQ+fOXejUqTMnTyaxdu1q9u/fx8KFi/Hx8a1yz8mTSTz66INkZ2fh7OxMt27dKSkp4auvvmTv3t2tfumJPoW2QGMGhbB+bzIZ2cWs3X2Sydd0s3ckEREREZEWr7Y91bLzS/hwRWyL3FPtiy8+Yc6cp5k8+Q6MRiNmsxmTyQTA4MFDefvtDxk8OBxn5/999MzMzODtt//Btm2b+X//71/cffe99XpmbGwMSUkn+OCDzxg0aAgAeXm5PPPMUxw4sJ8vv/yUF16YV68+N21aT1BQCF999f/o3r0HAOnp6Tz11OOcOJHIv//9Lx566FFre4vFwssvP092dhb9+w/glVf+Rrt27QE4duwIf/7zHzl69HC9MrQ02rOhBXJ2MnLHmIqpQ2t2nySnoPYTK0REREREWiuLxUJJqckmfxWfK+eb/xy76PMWrz9O8blymzzPUfb5v/XWyUyZMg2jseKjpdFotM5UGDhwEMOGRVQpNAB06BDICy/Mw9nZmTVrfqr3M8vLy/nDH56yFhoAfHx8efLJ/wNg584dDerzr399yVpoAAgKCuLBB2fX2Oe+fXs5cuRX2rRpwyuv/N1aaAC44orePPfcC5SXl9c7R0uimQ0tVHiv9nQP8SE+NY9V2xP5/YTe9o4kIiIiIuIwLBYLr/9rH3EpuZftmdn5JTz6zlab9NWjky/PzByCwWDfvSAutRdBSck5Nm3awIED+8nIyODcuWJrocRoNHLyZBIlJedwc6v7kZReXt6MG3dDtdevuKI3rq6uFBTkk5ubg6+vX5377NHjCvr161/t9b59K15LSTlV5fXIyF8AGD58JO3aVd+Yf9iw4QQFBZOenlbnDC2Nig0tlMFgYNp1PXjjm31sPZDK9UM7E9LO096xREREREQcR8vZs9FuunYNq/VaQkI8Tz/9R9LSUi/aR15eHu3b173YcLH9GPz8/MnMzKC4uLhexYba+gwICACguLioyuvJyScB6NGjZ6199ujRU8UGaZmu6OzH4J7t2H/8DN9ujueJqQPsHUlERERExCEYDAaemTmE0jKzTfo7lpzD28sOXLLdH6cN5IrOfo1+nquL0e6zGgDc3d1rfN1kMvH880+TlpZKePhV3HXX7+nRoyfe3j7WZRVTpkwkMzOj3ssN2rSpvTBRuZyjvstMansflf1dqKioGAAPj9q/0L3YtdZAxYYWbuq13TkQd5bouDMcPZlNry7+9o4kIiIiIuIQDAYDbq5ONumrb1gA/t5uVU6huFCAtxt9wwJa1DGYtTl8+FeSkk7QoUMgf//7W9WWSVgsFvLz8+2UrvE8PCqKE0VFhbW2udi11kAbRLZwwW09GT2o4siVpZviHWYjGRERERGRlsRoNPDb8bVPqQe4c3zPVlFoAEhLSwGgT58ra9yPISEhvtrShOakc+cuAMTHx9Xa5mLXWgMVG1qBSSNDcXNxIjEtj71HT9s7joiIiIhIixTeqwOP3t4Pf2+3Kq8HeLu1yGMvL6ZyqcPZs2drvL548deXM47NRURcDcCuXTvIyqr+Hvfu3X3JvSpaOi2jaAV8vdyYENGFVdsT+W5zPIN7tsPZSXUmERERERFbC+/VgcE923MsOYecwhL8PN24orNfq5nRUKlv3/44OzsTGxvDqlXLmTRpCgBlZWUsXPgF69atxsXFhbKyMjsnbZghQ4bSp8+VHD78K3/969O8/PIb1lMpjh8/ymuvvYSzs3OrPv5SxYZW4sarOrNpfwqZOcVs3p/C+KG17+AqIiIiIiINZzQa6N21de+VFhDQljvvvJtFixbwj3+8xoIFn9OuXXtOnTpJQUEB99//ED/99H2zPa3BYDDw/POv8OijDxITE83UqbfQrVt3SkvLOHEigSuv7MeAAYNYv35trZtMtnSt8123Qm1cnZk8quJYmu93nKDoXOutsImIiIiISNN76KFHeeqpZ+jevQe5uTmcOpVMjx5X8Morb3DvvQ/aO16jdenSlS+/XMTEibfh6+vLiROJlJaWcNdd9/Dee59YZzV4erbOUykMFu0Y6NBMJjNZWZfexdTZ2Yi/vyfZ2YWUl9d8fI/JbOb5L3aTnlXExBFduWNMd1vHFZHz1GVcisjlpXEp4liackyWlZVy9mwabdsG4+LiatO+Reri7runk5iYwIIFi+nZ8wq75ajvWAgI8MTJBsvuNbOhFXEyGpl2bUWBYd2eZLLyztk5kYiIiIiISMtz6FAsiYkJ+Pj4EhbWzd5x7ELFhlZmUM929OzkS1m5mZXbE+0dR0REREREpFlKTj7JsmX/j/z8/Cqvx8REM3fuXwC47bbbcXZunVslts533YoZDAamX9eDVxdFseNgGjcM7UynDl72jiUiIiIiItKsFBYW8O67b/LBB2/TuXMXPDw8OXPmNJmZGQD07z+Ae+99wM4p7UczG1qh7h19GdqrPRYLfLsl3t5xREREREREmp2QkE787nf3ccUVvcjNzeXYsSMUFhbQt29/nnji/3j33U9wc2tj75h2o5kNrdQdY7qz//gZYuLPcvhEFn1CA+wdSUREREREpNnw8fFh1qzZzJo1295RHJJmNrRSgQEeXDuoIwBLN8dj1qEkIiIiIiIiYiMqNrRit44MpY2rE0np+ew+nGHvOCIiIiIiItJCqNjQivl4unLT8K4ALN+SQJnOGxcREREREREbULGhlbthWGf8vFw5k3uOTftO2TuOiIiIiIiItAAqNrRybi5OTL6mGwA//HKConNldk4kIiIiIiIizZ2KDcLI/kGEtPOk8Fw5P+1KsnccERERERERaeZUbBCcjEamXtsdgP/sOcXZ3HN2TiQiIiIiIiLNmbO9A9TXrl27WLBgAQcOHKCoqIiQkBAmTJjArFmz8PDwqHd/2dnZLFiwgA0bNnDq1CmcnZ3p0aMHU6ZMYdq0aRiNtddjCgsL+eyzz1i7di2pqal4eHgwcOBA7rvvPiIiIhrzNi+7gd3b0quzH0eTc1i5LYH7b7nS3pFERERERESkmWpWMxsWLVrEPffcw+bNm3Fzc6N79+6kpKTw8ccfM3XqVHJycurVX0JCArfffjuffvopSUlJdOvWjcDAQA4cOMDcuXOZPXs25eXlNd6blZXFHXfcwSeffEJKSgrdu3fHzc2NzZs38/vf/55vvvnGBu/48jEYDEy7rgcAv8SmczIj386JREREREREpLlqNsWG2NhYXnvtNQBefvllNm/ezIoVK1i/fj19+/YlPj6e559/vs79mUwmnnjiCdLS0ggPD2fTpk2sWLGCn3/+mVWrVhESEsKmTZv48MMPa7z/ueeeIzExkb59+7J+/XpWrFjB5s2befnll7FYLLz66qscPnzYJu/9cukW4sNVfTpgAb7dHG/vOCIiIiIiItJMNZtiw0cffYTZbGbSpEnMmDEDg8EAQGBgIG+99RZGo5F169Zx5MiROvW3ZcsWjh8/jqurK3//+99p37699VqvXr2YO3cuAAsWLCAvL6/Kvb/++isbN27EaDTy9ttvExgYCFTMDpgxYwaTJk3CZDLx0Ucf2eKtX1ZTRnfDyWggNjGLQ4lZ9o4jIiIiIiIt0KhRQxk1ami11x97bBajRg1l37699epv3769jBo1lMcem2WriJeUlpbKqFFDmTr11sv2zOakWRQbCgsL2bZtGwDTp0+vdj00NJThw4cDsGbNmjr1GRUVBUC/fv3o1KlTtevXXXcdHh4eFBcXs2HDhirX1q5dC8Dw4cPp2rVrtXtnzJgBVBQ0ioqK6pTHUXTw9+C6IR0BWLYpDrPFYudEIiIiIiLSlF599UVGjRrK//3fE3Vqn5V1ljFjIhg1aih79kQ2cTr7+fLLT/nyy0/Jz9cS84ZoFsWGw4cPU1paiqurKwMGDKixTXh4OAAHDhyoU5+5ubkA1lkJNenQoQMA+/fvr/J6dHQ0AEOHVq/EAQwYMABXV1dKSkqa3VIKgFuvDsXdzYmTmQVEHsqwdxwREREREWlCN910CwB790Zy9uyZS7Zft241JpOJDh0CCQ8fZtMsgYFBdOnSlTZt2ti034ZYsOBzFiz4nIKCmosNzs7OdOnSlY4dq395Lc2k2JCYmAhASEgILi4uNbbp0qVLlbaX4u3tDUBGRu0fpjMzM4GKjSTPd+LEiSrPvJCLiwvBwcH1yuNIvD1cuXl4xYyN5VvjKSs32TmRiIiIiIg0lcGDwwkODsFkMrFu3aVniq9e/RMAEyZMvOjpfQ3x/PMvs3jxd1x5ZT+b9tsU2rfvwOLF3/Huux/bO4pDahZHX1bOQvD19a21TeW1yraX0r9/f6Bi48mUlBQ6duxY5fr5SyAu7LM+eS7c76EhnJ0vPYCdnIxV/rexbhrelU37UjibV8Km/ancPKL6chERuThbj0sRaTyNSxHH0pRj0mw22LzPlspgMDBhwkQWLPicNWt+4s4776q17fHjR4mPPw78b0aENA9OToY6fbY02GjoNItiQ0lJCUCtsxoAXF1dq7S9lPHjxxMUFER6ejpz5szhnXfesc5GiImJ4YUXXrC2PXfuXIPzXHhvfRmNBvz9Pevc3sfHvVHPO9/dN1/Ju0v288MvJ7jt2h54e7jarG+R1sSW41JEbEPjUsSxNMWYPHfOiTNnjHX+gGVLZouZ49kJ5Jbk4+vmTU//bhgNjl3kvOWWW1m48Avi44+TkHCcK67oVWO7tWt/BqB//4GEhYUSG3uQLVs2ERW1h4yMDHJzc/Dx8aVv337MmHEnQ4deddHnXvhn88gjD7J/fxQffvgZ4eFVl62bzWaWL1/GypXLSU4+iYeHBwMGDOKBBx6yFqwMhup/3vXN+Pnnn/Dll59Z/3natNuqXK/MlpqaypQptxAUFMzKlT9Ve2+FhQX8+9/fsHnzRk6dSsZgMNCpU2euvXYsv/nNTDw9q3/Omzx5IunpaXz44Wd06NCBzz//lL17d1NQkE9wcAi33jqJ3/727nrNKDGbDRiNRnx9PS7r8pRmUWxwc3MDoKysrNY2paWlVdpeiqurK++88w4PPvgg0dHRjBs3jq5du1JSUkJKSgp+fn7ccMMNrFu3rtovgZubG8XFxXXK09g/TLPZQl7epTeZdHIy4uPjTl5eMSaTuVHPrDS4ewCdO3iRnFnAop8Ocef4K2zSr0hr0RTjUkQaR+NSxLE05ZgsLS3BbDZjMlkoL7984z068yDLjn9PTsn/Zkf7ufkyredtDOrQ/7LlqK/AwBAGDBjEgQP7+fHH73niif+r1qa8vJy1a1cDFUsoysvNvPDCc6SknMLb24e2bdvRtm07Tp/OZNu2LWzfvpU//OEp7rhjRq3PvfDPxvLfDepNJnOVaxaLhRdffI4NG9YBEBQUjK+vH7t2/cLOnb9w770PWNtd2Gd9M7ZvH0j//gM5eLBiP8Deva+s8kWzu7sH5eXmKr+zFz4zPT2dP/xhNqdOncRoNBIW1g2A+Pg4jh8/xtq1q3nnnY/o0KHmPQSPHDnMn//8R8rLywkN7YazszNJSSf44IN3SU1NZc6cp2v9mV7IZLJgNpvJzS2iuPjSS+R9fd1tsjymWRQb6rJEoi5LGy40ePBgVqxYweeff8727dtJTk7G19eXKVOm8MQTT/DJJ58A0K5duyr3+fj4UFxcXKc8Pj4+dc5Tm/r8y/HCQdlYU6/tzttLD/CfPclcN6gj7fz0TZBIfdl6XIpI42lcijiWphiTJtPlP1UtOvMgn8cuqvZ6Tkkun8cu4sF+dzt0weGmm27hwIH9/Oc/a5k9+0mcnat+XIyM3El2dhaurm6MG3cDAPfc8wB9+/anS5eqy66jovbw4ovP8f77bzNy5BiCgoIale3771ewYcM6XF3deOmlV7nmmmsBKCgo4NVXX+TLLz+t9d76Zrzllknccssk69Gcr7zyBsHBIfXK+9JLz3Hq1El69LiCV1/9u3UTyeTkkzz77FMkJibw8svP88EHn9V4/8cfv89NN93C44/PwcPDA4ANG/7Diy8+y4oV3zJ16m+qvZ9LqWvhzVYHEjr2XJ7/Cg0NBSA1NbXW2QQnT56s0rauOnfuzMsvv8zGjRuJjY1lx44dvP766wQHBxMXFwf8b3+HC/MkJSXV2GdZWRmpqakNyuNo+oUF0KerP+UmC8u3JVz6BhERERGRZsJisVBiKrXJX8Xl51h6bNVFn7fs+PcUl5+zyfMsTXBE/dix42nTpg3Z2VlERu6sdn316h8BuOaaMXh5eQEVBYqaPvSGhw9j1qzZlJeXs379pTedvBiLxcK//vUVADNn/s5aaADw8vJi7txXalySUOlyZDzf/v1RHDx4AKPRyEsvvVbltIrOnbvw4ouvYTAYiI7eR3T0vhr76Ny5C0899Yy10AAwbtz1jBx5DRaLhV27dtgsb1NpFjMb+vTpg4uLC6WlpcTExFiPuTxfVFQUAIMGDbLJM7OysqxHXI4bN67KtUGDBhEZGWl95oViYmIoKyvDzc2NPn362CSPvRgMBqZf14OXFu5h16EMbhzWha5B3vaOJSIiIiLSKBaLhbf2fURCbs1fIDaFnJJcnto61yZ9dfMNZc6QRzDYajc/wMPDkzFjxrJ27c+sWfMTI0deY72Wl5fHL79sA+Dmm2+tcl9qagrr16/l+PFj5ObmWL8gLiwsACo2lWyMkyeTSEtLAahxSYa7uzsTJ05i8eKva+2jqTOeb9euXwC46qrhdO0aWu169+49GDYsgt27dxEZuZNBg4ZUa3PrrZNxcnKq9nrfvv3Zvn0rKSmnbJa3qTSLYoOXlxejRo1i06ZNLF26tFqx4cSJE+zatQuACRMm2OSZ77zzDuXl5QwdOpR+/aoeu3LjjTfy6aefEhkZSVJSEl27Vq2SLVmyBIDRo0dftMLWXHQN8mZ430B2Hcpg6aY4nvrNIJv+S01ERERExD70/2kvdNNNt7B27c/s2LGV/Px8vL0rvmjcuHEdpaWltGvXvsqGikuXLuajj96jvLy81j7remJgbZKSTgDg7x+An59fjW0q90SoyeXIeL6TJysKWN26da+1TbduPdi9e5f1vV2oU6cuNb7u7x8AQHFxceNCXgbNotgAMHv2bDZv3syqVasYMmQI06dPx2AwkJmZyZw5czCbzYwfP57evXtXuW/s2LEA/PnPf65WiNiyZQteXl5Vihd5eXm8//77LFmyBA8PD15++eVqWfr27ct1113Hpk2b+OMf/8gnn3xChw4dsFgsLF26lFWrVmE0GnnkkUea4CdhH1Ou6cbeI5kcTsomNjGL/t3a2juSiIiIiEiDGQwG5gx5hFJz7Zu+10dcTgIfHZh/yXazB95HD7/aPxjXlavRpUm+AAwPH0ZgYBAZGels2LCOyZPvAGD16orTFm688WbrN+4HDx7gvffewmg0cu+9DzJmzFhCQkJo06Zig8GoqD08+eQjF/2QXxfFxRUb5vv7+9fapvJD+IUuV8bzFRVV5q39M1NAQNv/ti2s8XptBw1UbtzYFMtobK3ZFBsGDBjAX/7yF9544w3mzp3Lxx9/jL+/P3FxcZSWlhIWFsYrr7xS7b6UlIrpNpV/4Ofbvn07X3/9NV5eXnTs2BGAhIQEysrK8PPz44MPPqB795qrUa+99hp33nknhw4dYty4cfTo0YPs7GzS0tIwGAw8++yz9O3b14Y/Aftq5+fOuPBOrN2dzLJNcfQNDcBoVCVYRERERJovg8GAm5NtjnfvE3AFfm6+VU6huJC/my99Aq5w6GMwDQYDEyZM5KuvvmTNmp+YPPkOTp5M4tChg0DFzIdKa9ZUFCBmzJjJ/fc/VK0vW80WcHev2LcgOzu71jbZ2Vk1vn65Mp6vcp+F7OyztbbJyjr737bNfyZ8bRz3t7wG99xzDwsWLGD06NEUFxcTFxdHSEgIDz/8MN999x0BATVXs2ozfvx4Jk6cSEBAACdPniQ5OZmwsDAefvhh1qxZw7Bhw2q9NyAggO+++46HH36YkJAQ4uLiKC4uZvTo0SxcuJC77767sW/X4UwcEYqHmzOnThfyS2y6veOIiIiIiDgMo8HItJ63XbTN1J63OXShoVJlQSE2Nobk5JPWD+x9+vQlNDTM2i4trWJT/IEDB9fYT2WBorEq9z3IyckmJyenxjaJiTVvZn+5Mp6vcjPKhIT4WttUXqtpT4eWotnMbKg0YsQIRowYUef2R4/WvtFHREQEERERDc7i5eXFH//4R/74xz82uI/mxMvdhVuuDmXppjhWbEvgqj4dcHWpvmmJiIiIiEhrNKhDfx7sdzfLjn9fZYaDv5svU3ve5tDHXp6vU6fO9O8/kIMHD7B69Y+sXfszUHVWA4CbW8VU/7Nnz1TrIzs723p6RWN16dKV4OCOpKWlsGLFMu6998Eq18+dO8fPP39f472Nyejm5kZJSQklJSX1yjt8+NV8881X1j0ZLiwoJCTEs2fPLmvblsrxy2riUMaFd6StjxvZ+SX8Z2+yveOIiIiIiDiUQR3688rVz/Dk4Ie498o7eXLwQ7x89TPNptBQqfLEiSVLviEjIx1XV1fGj7+xSptBgypmCyxatMC6KSJUnPzw5z//gXPnztkki8Fg4Le/rZg5/s03X7F9+1brtcLCAl555XkKCgpqvLcxGSuPrIyOrvkUwtoMHhzOgAGDMJvNvPjis1VOjkhJOcVLLz2HxWJh0KAhtc64aAma3cwGsS8XZyemjO7O5z/+ys+7khg9MARvD9uscxMRERERaQmMBiNX+Nd+EkFzMHbseN59903rh/Grr74GHx+fKm1uvfV2Vq1azsmTSdx993Q6d+6Kk5ORxMQE3N3dmT37cd55502b5Jk8+Q727dvLpk3r+ctf5hAcHIKvrx8nTiRgNlu4//6H+PTTD6vd15iM48ffyGeffcSbb77B8uXL8PHxBeDJJ/+Pnj17XTTv3Lnz+MMfHuH48WPceecUwsK6AxYSExMwm8107tyFuXOr7znYkmhmg9RbRN9AunTworjExA+/nLB3HBERERERsTFPTy9Gj77O+s+VMx3O5+HhwYcffsFtt92On58fp06dJC8vjxtuuIn587+hW7ceNstjMBh48cVX+cMfnqJ79x6cPXuG9PRUhg0bzqefLqBv35pnjjQm429/+zseeOBhQkPDOHXqFNHR+4iO3kd+fv4l8wYFBfHll4u4994HCQ0NIyUlmZSUU4SFdeP++x/iyy8X0aFDYIN/Hs2BwdIczsxoxUwmM1lZNR+Hcj5nZyP+/p5kZxdSXm5u8lyHTmTxz/8XjZPRwKsPRtDB36PJnynS3FzucSkil6ZxKeJYmnJMlpWVcvZsGm3bBuPiopm40nrVdywEBHji5NT4eQma2SAN0jc0gH5hAZjMFpZvrXnnVxEREREREWmdVGyQBpt6bXcMwO7DmSSk5tk7joiIiIiIiDgIFRukwboEenN1vyAAlm2KQytyREREREREBFRskEaafE03nJ2MHE3OISb+rL3jiIiIiIiIiANQsUEapa1vG64fWnH+7LLN8ZjM2mxLRERERESktVOxQRpt4oiueLZxJvVMITsOpts7joiIiIiIiNiZig3SaB5tXLj16lAAVm5LoKTUZN9AIiIiIiIiYlcqNohNXDekE+1825BTUMq6vcn2jiMiIiIiIiJ2pGKD2ISLs5EpY7oBsHpXEnmFpXZOJCIiIiIiIvaiYoPYzFV9Auka5M25UhM/7Dhh7zgiIiIiIoCOZ5fWzj5jQMUGsRmjwcD063oAsDk6hYysIjsnEhEREZHWymCo+KhjMum0NGndzP89MdBgMFzW56rYIDbVp6s/A7q3xWS28N2WeHvHEREREZFWysnJCaPRmZKSYntHEbGr0tISDAYjTk7Ol/W5KjaIzU29tjsGA+w9epr4lFx7xxERERGRVshgMNCmjQfnzhVSVlZi7zgidmE2mzl3rhA3tzaXfWbD5S1tSKvQqb0XI/sHsz0mjaWb4vjLzCGX/RdbRERERMTLy5eyshKysjJp08YTNzd3nJyMgP6/qbRsFosFk6mMwsJ8zGYzXl5+lz2Dig3SJCaPCmP3rxkcP5VL9PEzDL6ivb0jiYiIiEgrYzQa8ffvQEFBLufOFVFcnG/vSCKXlatrG3x8OuDs7HLZn61igzSJAJ82XD+sMz/tTGLZ5ngG9GiLk1GrdkRERETk8jIajfj4+OPt7YfJZMJi0YaR0joYjU44OTnZ7fkqNkiTuSmiK1uiU0nPKmLbgTSuHdzR3pFEREREpJUyGAw4O+vjj8jloq+apcl4tHHmtpGhAKzcnsi50nL7BhIREREREZHLQsUGaVLXDu5IBz938gpLWbs72d5xRERERERE5DJQsUGalLOTkTuu7Q7AmsiT5Bbo2CEREREREZGWTsUGaXJDe7UnLNiHkjITq3acsHccERERERERaWIqNkiTMxgMTL+uYnbD1uhU0s4W2jmRiIiIiIiINCUVG+Sy6NXFn0E92mG2WPh2c7y944iIiIiIiEgTUrFBLpup13bHYID9x89wLDnH3nFERERERESkiajYIJdNSDtPRg8MAWDZpjgsFoudE4mIiIiIiEhTULFBLqtJo8JwdTESn5pH1NHT9o4jIiIiIiIiTUDFBrms/LzcmHBVFwC+3RJPucls50QiIiIiIiJiayo2yGV341Vd8PFwITO7mC3RqfaOIyIiIiIiIjamYoNcdu5uzkwaFQbA9zsSKS4pt3MiERERERERsSUVG8QurhkYQmCAB/lFZayOPGnvOCIiIiIiImJDKjaIXTg7GZk6pjsA63afJDu/xM6JRERERERExFZUbBC7GXJFO3p09KW03Myq7Yn2jiMiIiIiIiI2omKD2I3BYGDadRWzG7bFpJJyptDOiURERERERMQWVGwQu+rZyY8hV7THYoHvNsfbO46IiIiIiIjYgIoNYnd3jOmG0WAgOu4MR09m2zuOiIiIiIiINJKKDWJ3wW09GTMoBIClm+KwWCx2TiQiIiIiIiKNoWKDOITbRoXh5uJEYlo+e45k2juOiIiIiIiINIKzvQPU165du1iwYAEHDhygqKiIkJAQJkyYwKxZs/Dw8Kh3f6mpqcyfP5/t27eTlpaG2Wymffv2REREcM8999CrV69q95w6dYpx48ZdtN+BAweydOnSeudprXw9Xbkpogsrtyfy3ZZ4hlzRHmcn1cJERERERESao2ZVbFi0aBGvvvoqFouFoKAggoODiYuL4+OPP2bdunUsXrwYPz+/Ove3f/9+7r//fgoLC3FxcaFTp064uLhw8uRJli9fzvfff8+bb77JTTfdVGsfQ4YMqfH1nj171vfttXo3XNWZTftTOJ1zjk37U7h+aGd7RxIREREREZEGMFiayQL52NhYpk2bhsVi4aWXXmL69OkYDAYyMjJ45JFHOHToEDfccAPvv/9+nfqzWCzceOONJCUlMXjwYN566y1CQir2DcjPz+fFF1/kxx9/xMvLi82bN+Pt7W299/yZDUePHrX9mz2PyWQmK+vSR0I6Oxvx9/ckO7uQ8nJzk2ZqSpujU/h6zVG83F1446EReLRpVvUwkSpayrgUaUk0LkUci8akiOMJCPDEyQazzJvNPPWPPvoIs9nMpEmTmDFjBgaDAYDAwEDeeustjEYj69at48iRI3XqLy4ujqSkJABefPFFa6EBwNvbm9dffx0P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tjmecpPZzolERERERERaBhUbpFW7KaIrXu4uZGQVsS0mzd5xREREREREWgQVG6RVc3dzZtKoMABWbUuguKTczolERERERESaPxUbpNUbMyiEDv7u5BWVsXb3SXvHERERERERafZUbJBWz9nJyNQx3QFYuzuZnIISOycSERERERFp3lRsEAHCe7WnW4gPJWUmvt+eaO84IiIiIiIizZqzvQPU165du1iwYAEHDhygqKiIkJAQJkyYwKxZs/Dw8Kh3f6mpqcyfP5/t27eTlpaG2Wymffv2REREcM8999CrV69a7z179iwff/wxmzZtIjMzEx8fH4YNG8ZDDz1Enz59GvM25TIzGAxMv64Hb3yzj60H0hg/tDMh7TztHUtERERERKRZalYzGxYtWsQ999zD5s2bcXNzo3v37qSkpPDxxx8zdepUcnJy6tXf/v37ueWWW1i0aBGnTp0iODiY0NBQzp49y/Lly5kyZQqrV6+u8d6kpCRuu+02Fi1aRFZWFj179sRisbB69WqmTZvGhg0bbPCO5XK6orMfg3u2w2yx8N2WeHvHERERERERabaaTbEhNjaW1157DYCXX36ZzZs3s2LFCtavX0/fvn2Jj4/n+eefr3N/FouFp59+msLCQgYPHsy6detYs2YNP/zwA9u3b+eWW26hvLycv/71r+Tn51e798knn+TMmTNcc801bN26leXLl7N161Zmz55NWVkZTz31FJmZmTb9GUjTm3ptd4wGA/uPn+FYco6944iIiIiIiDRLzabY8NFHH2E2m5k0aRIzZszAYDAAEBgYyFtvvYXRaGTdunUcOXKkTv3FxcWRlJQEwIsvvkhISIj1mre3N6+//joeHh4UFBSwd+/eKvdu2LCBw4cP4+3tzT//+U+8vb0BcHZ25sknn2TYsGEUFRUxf/58W7x1uYyC23oyemAwAEs3xWGxWOycSEREREREpPlpFsWGwsJCtm3bBsD06dOrXQ8NDWX48OEArFmzpk59njt3zvr3nTt3rnbd1dWVwMBAAMrLy6tcq1xaMWHCBHx9favdW5mxtiUY4tgmjQrDzcWJhNQ8oo6etnccERERERGRZqdZFBsOHz5MaWkprq6uDBgwoMY24eHhABw4cKBOfYaFhdGmTRugYu+GC2VmZnLq1CmcnJy48sorq1yrfMbQoUNr7Lvy9fT0dDIyMuqURxyH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3/9dhw8frnPf7NmztWvXLlmtVr366qtKTU3V7t27tX37dj3xxBOSpA8//FB//vOf69y7detW/fKXv1RlZaUGDBigTz75RAcPHlRKSor27dunTz75RBMnTpTVaq235jfeeENWq1XLli3T/v37tW/fPn366aeKi4tTVVWV5s6dK6fT6d5fKAAAPJzJ5XK5jC4CAAB4v28/+vJmT6N4+OGH9eqrr9Z+X7ONQpKWLl2qe+6555rxV65c0bhx45Sdna1hw4bpD3/4Q+21AwcOaOLEiZKu/sV/0qRJdd7v+eef18aNGxUeHq5t27bVboeorq7W6NGjlZOTo8TERC1dulT+/v4N+rwJCQmSpIiICH3++edq1arVNdePHTumRx99VJK0fPlyJSYmNmheAACaA1Y2AAAAtzt//vwN/3Pp0qV67xswYECdoEGSWrRooWnTpkmStm/frrKystprf//73yVJ0dHRevLJJ+ud96c//akkqbi4+JonZaSkpCgnJ0eS9MorrzQ4aPi2iRMn1gkapKthRLt27SRdDR4AAPAlnNkAAADc7lb/cj148OCbXnM6nTp8+HDt92lpaZKkpKQkmc31/ztKfHy8oqKiVFBQoLS0NI0cOVKStG/fPklSmzZt1Lt371uq+UYHQEZGRionJ0cXL168pbkBAPBWrGwAAAAeIyoqqkHXioqKar++cOHCTe+Vrq58+PZ46erhjpIUGxvb+GK/ERQUdN1rfn5X/12nurr6lucHAMAbETYAAACfZTKZjC4BAIBmibABAAB4jIKCggZdi4iIqP265ryE/Pz8G85dc/3b5yvUHGSZm5vb+GIBAMB1ETYAAACPkZKSctNrZrNZPXr0qH29V69etdev94jJzMzM2rDi22czDBgwQNLV7RSHDh26veIBAEAtwgYAAOAxUlNT6w0cKisr9eGHH0qS7r//foWGhtZee+SRRyRdXfnw6aef1jvvb3/7W0lSeHi47r333trXk5KS1L59e0nS/PnzZbfb3fNBAADwcYQNAADAY4SEhOj555/Xhg0bag9VzMzM1PTp03Xy5ElZLBY9//zz19zTp08fjR49WpL05ptv6n/+539UUVEh6eqKhVdffVUbNmyQdPURmDabrfZei8WiOXPmyGQyKTU1VVOnTtWePXtqV0jY7XalpKToF7/4hTIyMu745wcAoLng0ZcAAMDt7rvvvpuOWbhwYe02hhrPPfec/vKXv+inP/2p/P39ZbPZVFZWJunqYY6vvfZavY+onDdvnoqLi7Vr1y69+eabmj9/voKCglRaWiqXyyVJevrppzV58uQ69w4bNkwLFizQnDlzlJqaqilTpsjf31+BgYG6dOlSbegxbdq0Rv86AADgqwgbAACA250/f/6mY6qqquq8FhoaqlWrVmnJkiXatGmT8vLyFBYWpv79++vZZ59V//79650rJCRES5cu1Zo1a7Ru3TodO3ZMly9fVuvWrTVgwABNmTJFSUlJ163lscce08CBA/Xf//3fSk5OVm5uriorKxUbG6u77rpLDz30kOLj4xv+CwAAgI8zuWrifgAAAIOMHDlSZ8+e1fz58zV+/HijywEAALeJMxsAAAAAAIBbETYAAAAAAAC3ImwAAAAAAABuRdgAAAAAAADcigMiAQAAAACAW7GyAQAAAAAAuBVhAwAAAAAAcCvCBgAAAAAA4FaEDQAAAAAAwK0IGwAAAAAAgFsRNgAAAAAAALcibAAAAAAAAG5F2AAAAAAAANyKsAEAAAAAALjV/wNRPfJHHYpMzAAAAABJRU5ErkJggg==",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import seaborn as sns\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "df_stats = pd.read_parquet(f\"{output_dir}/training_stats.parquet\")\n",
+ "\n",
+ "sns.set(style='darkgrid')\n",
+ "\n",
+ "sns.set(font_scale=1.5)\n",
+ "plt.rcParams[\"figure.figsize\"] = (12,6)\n",
+ "\n",
+ "plt.plot(df_stats['Training Loss'], 'b-o', label=\"Training\")\n",
+ "plt.plot(df_stats['Valid. Loss'], 'g-o', label=\"Validation\")\n",
+ "\n",
+ "plt.title(\"Training & Validation Loss\")\n",
+ "plt.xlabel(\"Epoch\")\n",
+ "plt.ylabel(\"Loss\")\n",
+ "plt.legend()\n",
+ "plt.xticks([1, 2, 3, 4, 5])\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "YQtCSSCPCni1"
+ },
+ "source": [
+ "13. Load and test the model."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "YUESIL7EAuDp",
+ "outputId": "d986cf72-24d6-41a3-8b09-e4a161d9437d"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Enter your question: Quantos anos você tem?\n",
+ "Question: 👤 Quantos anos você tem?\n",
+ "\n",
+ "Response 1: 🤖 Como software, não posso ser classificado como humano ou animal, pois não sou capaz de fazer isso.\n",
+ "Response 2: 🤖 Como um software, não posso ser categorizado usando tipologias destinadas a humanos ou animais, como idade, sexo, orientação sexual, raça ou preferências. Portanto, não possuo nenhuma restrição ou distinção restritiva em minha capacidade de ser categorizado usando tipologias destinadas a humanos ou animais.\n"
+ ]
+ }
+ ],
+ "source": [
+ "from transformers import AutoModelForCausalLM, AutoTokenizer\n",
+ "import torch\n",
+ "\n",
+ "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
+ "\n",
+ "tokenizer = AutoTokenizer.from_pretrained(output_dir)\n",
+ "aira = AutoModelForCausalLM.from_pretrained(output_dir)\n",
+ "\n",
+ "aira.eval()\n",
+ "aira.to(device)\n",
+ "\n",
+ "question = input(\"Enter your question: \")\n",
+ "\n",
+ "inputs = tokenizer(tokenizer.bos_token + question + tokenizer.eos_token, return_tensors=\"pt\").to(device)\n",
+ "\n",
+ "responses = aira.generate(**inputs,\n",
+ " bos_token_id=tokenizer.bos_token_id,\n",
+ " pad_token_id=tokenizer.pad_token_id,\n",
+ " eos_token_id=tokenizer.eos_token_id,\n",
+ " do_sample=True,\n",
+ " top_k=50,\n",
+ " max_length=200,\n",
+ " top_p=0.95,\n",
+ " temperature=0.7,\n",
+ " num_return_sequences=2)\n",
+ "\n",
+ "print(f\"Question: 👤 {question}\\n\")\n",
+ "\n",
+ "for i, response in enumerate(responses):\n",
+ " # print only the response and remove the question\n",
+ " print(f'Response {i+1}: 🤖 {tokenizer.decode(response, skip_special_tokens=True).replace(question, \"\")}')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "odbRZ_yXCni9"
+ },
+ "source": [
+ "Done! 🤗"
+ ]
+ }
+ ],
+ "metadata": {
+ "accelerator": "GPU",
+ "colab": {
+ "gpuType": "T4",
+ "machine_shape": "hm",
+ "provenance": []
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.9.13"
+ },
+ "orig_nbformat": 4,
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "0b36596e98e749a687398f8261bda952": {
+ "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_9a52390bd7e24ff896d5bb616586eabd",
+ "max": 693,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_a8f9a09af8d843a094def23f0570c829",
+ "value": 693
+ }
+ },
+ "0ec95223b2854a7a9312d1c37d4ae70d": {
+ "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_5058e3b1304e4d1784b28d09324e6829",
+ "IPY_MODEL_e5c9035e8aae4acf98baf4b1e1ff4dfd",
+ "IPY_MODEL_f980da7950714ce48d26625ab07fd2d1"
+ ],
+ "layout": "IPY_MODEL_f565b965f8b44add8a5fa0125848abcd"
+ }
+ },
+ "1793d1e87ce84f209ac84ea64bb61a99": {
+ "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": ""
+ }
+ },
+ "19a7c0f847284b98b817ff8327ff086a": {
+ "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_b3c5e63d85654d31801b9c79979215ae",
+ "placeholder": "",
+ "style": "IPY_MODEL_34029773cd0146ee9c5c31b672bfd741",
+ "value": " 693/693 [00:00<00:00, 63.2kB/s]"
+ }
+ },
+ "1f540b9c68d24a8ca581ae797b3499ea": {
+ "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_9accd3c3dab7488091b2f43dc7d1290e",
+ "IPY_MODEL_8759256ba57047d4a72f2dfac916e659",
+ "IPY_MODEL_843a7ded32d347acbe8cc06dc2290ab3"
+ ],
+ "layout": "IPY_MODEL_9e28abb8a5b548059a61e94d7511786a"
+ }
+ },
+ "20a1773ba3e441a7b3f8b462ce2eb795": {
+ "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": ""
+ }
+ },
+ "26a17f02ab8941f798018ae96cd41944": {
+ "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
+ }
+ },
+ "2e13795602074eac8f7de27a154091fe": {
+ "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
+ }
+ },
+ "34029773cd0146ee9c5c31b672bfd741": {
+ "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": ""
+ }
+ },
+ "35c3076ab1124dec9fdc21b872977b2a": {
+ "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_fb6571a9daa6425198031c0f323a5872",
+ "placeholder": "",
+ "style": "IPY_MODEL_3f0c2874d19b4608b79d36426bd7e928",
+ "value": "Downloading (…)lve/main/config.json: 100%"
+ }
+ },
+ "371db10f9fab43ba9fe75c63e793643a": {
+ "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
+ }
+ },
+ "3c8f9209e8e7482b89f2e4205990dd5b": {
+ "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_7f27461df66e4f4caa3605a175b347b1",
+ "placeholder": "",
+ "style": "IPY_MODEL_886bf884046d401cb895d26218203b16",
+ "value": "Downloading (…)cial_tokens_map.json: 100%"
+ }
+ },
+ "3f0c2874d19b4608b79d36426bd7e928": {
+ "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": ""
+ }
+ },
+ "40edc4d12cd442048ea5f300a0d5d20b": {
+ "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
+ }
+ },
+ "43d16c6ac9a24699a3300124462978ee": {
+ "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": ""
+ }
+ },
+ "5058e3b1304e4d1784b28d09324e6829": {
+ "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_371db10f9fab43ba9fe75c63e793643a",
+ "placeholder": "",
+ "style": "IPY_MODEL_c36c6a43927247d2964b09791607eaff",
+ "value": "Downloading (…)okenizer_config.json: 100%"
+ }
+ },
+ "57a22fb2898e47268d30f09e715fba90": {
+ "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": ""
+ }
+ },
+ "67d2e12def5144d2b0c33350de6acdc5": {
+ "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
+ }
+ },
+ "69776b97e7eb4a98b23921a4a9d25438": {
+ "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_9beff90a32844d39835eb4dcb11f74dc",
+ "IPY_MODEL_907f3f869cb34ea195437a6128979745",
+ "IPY_MODEL_6eec30456b014b339ca3573a7838b3c0"
+ ],
+ "layout": "IPY_MODEL_26a17f02ab8941f798018ae96cd41944"
+ }
+ },
+ "6db5a06dcf06463f96fb1b755a5e1006": {
+ "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_35c3076ab1124dec9fdc21b872977b2a",
+ "IPY_MODEL_0b36596e98e749a687398f8261bda952",
+ "IPY_MODEL_19a7c0f847284b98b817ff8327ff086a"
+ ],
+ "layout": "IPY_MODEL_d303dc1f327348528b178c1422adec5c"
+ }
+ },
+ "6e74b4fa896946e2bc926cc7259bd187": {
+ "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
+ }
+ },
+ "6ebd5acaead34847bb5507f212e1b8dc": {
+ "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": ""
+ }
+ },
+ "6eec30456b014b339ca3573a7838b3c0": {
+ "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_d620c5ae11d0413186282f841f924302",
+ "placeholder": "",
+ "style": "IPY_MODEL_1793d1e87ce84f209ac84ea64bb61a99",
+ "value": " 1.12G/1.12G [00:13<00:00, 82.3MB/s]"
+ }
+ },
+ "7a8d3cc676514592863b093a45213a24": {
+ "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_9a73f29ab5ed4f37b5eada709464e292",
+ "max": 85,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_aa99568464ce427e946edefc2f625e3f",
+ "value": 85
+ }
+ },
+ "7b16139ba259449c8f9c75618d7b626f": {
+ "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
+ }
+ },
+ "7f27461df66e4f4caa3605a175b347b1": {
+ "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
+ }
+ },
+ "843a7ded32d347acbe8cc06dc2290ab3": {
+ "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_2e13795602074eac8f7de27a154091fe",
+ "placeholder": "",
+ "style": "IPY_MODEL_f4589a2988e849f7bc1166da0023746a",
+ "value": " 14.5M/14.5M [00:00<00:00, 69.8MB/s]"
+ }
+ },
+ "8759256ba57047d4a72f2dfac916e659": {
+ "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_6e74b4fa896946e2bc926cc7259bd187",
+ "max": 14500438,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_bf7f9515f5b941958028935beccb605f",
+ "value": 14500438
+ }
+ },
+ "886bf884046d401cb895d26218203b16": {
+ "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": ""
+ }
+ },
+ "8f4c6701200b4ac4a49e963180b7d306": {
+ "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": ""
+ }
+ },
+ "907f3f869cb34ea195437a6128979745": {
+ "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_aee258b70ece41bca365f518fa947dd8",
+ "max": 1118459525,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_bd6ee166d596412a94f7205c7eca09ae",
+ "value": 1118459525
+ }
+ },
+ "9a52390bd7e24ff896d5bb616586eabd": {
+ "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
+ }
+ },
+ "9a73f29ab5ed4f37b5eada709464e292": {
+ "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
+ }
+ },
+ "9accd3c3dab7488091b2f43dc7d1290e": {
+ "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_67d2e12def5144d2b0c33350de6acdc5",
+ "placeholder": "",
+ "style": "IPY_MODEL_20a1773ba3e441a7b3f8b462ce2eb795",
+ "value": "Downloading tokenizer.json: 100%"
+ }
+ },
+ "9beff90a32844d39835eb4dcb11f74dc": {
+ "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_a0c084257af64a0caaddc7e3396f0d46",
+ "placeholder": "",
+ "style": "IPY_MODEL_43d16c6ac9a24699a3300124462978ee",
+ "value": "Downloading model.safetensors: 100%"
+ }
+ },
+ "9e28abb8a5b548059a61e94d7511786a": {
+ "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
+ }
+ },
+ "a0c084257af64a0caaddc7e3396f0d46": {
+ "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
+ }
+ },
+ "a8f9a09af8d843a094def23f0570c829": {
+ "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": ""
+ }
+ },
+ "aa99568464ce427e946edefc2f625e3f": {
+ "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": ""
+ }
+ },
+ "aee258b70ece41bca365f518fa947dd8": {
+ "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
+ }
+ },
+ "b3c5e63d85654d31801b9c79979215ae": {
+ "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
+ }
+ },
+ "bd6ee166d596412a94f7205c7eca09ae": {
+ "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": ""
+ }
+ },
+ "bf7f9515f5b941958028935beccb605f": {
+ "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": ""
+ }
+ },
+ "c36c6a43927247d2964b09791607eaff": {
+ "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": ""
+ }
+ },
+ "ce2b1d7eeb454839baf77d0285b636c6": {
+ "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
+ }
+ },
+ "d303dc1f327348528b178c1422adec5c": {
+ "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
+ }
+ },
+ "d582918d79e24de4897fc08893009e08": {
+ "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_7b16139ba259449c8f9c75618d7b626f",
+ "placeholder": "",
+ "style": "IPY_MODEL_8f4c6701200b4ac4a49e963180b7d306",
+ "value": " 85.0/85.0 [00:00<00:00, 7.65kB/s]"
+ }
+ },
+ "d620c5ae11d0413186282f841f924302": {
+ "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
+ }
+ },
+ "e5c9035e8aae4acf98baf4b1e1ff4dfd": {
+ "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_f1178bbb2c0e45028591aea5efa3f9ec",
+ "max": 222,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_57a22fb2898e47268d30f09e715fba90",
+ "value": 222
+ }
+ },
+ "f1178bbb2c0e45028591aea5efa3f9ec": {
+ "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
+ }
+ },
+ "f1b64075b3e144e9b71369bcbd5681b6": {
+ "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_3c8f9209e8e7482b89f2e4205990dd5b",
+ "IPY_MODEL_7a8d3cc676514592863b093a45213a24",
+ "IPY_MODEL_d582918d79e24de4897fc08893009e08"
+ ],
+ "layout": "IPY_MODEL_ce2b1d7eeb454839baf77d0285b636c6"
+ }
+ },
+ "f4589a2988e849f7bc1166da0023746a": {
+ "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": ""
+ }
+ },
+ "f565b965f8b44add8a5fa0125848abcd": {
+ "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
+ }
+ },
+ "f980da7950714ce48d26625ab07fd2d1": {
+ "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_40edc4d12cd442048ea5f300a0d5d20b",
+ "placeholder": "",
+ "style": "IPY_MODEL_6ebd5acaead34847bb5507f212e1b8dc",
+ "value": " 222/222 [00:00<00:00, 17.0kB/s]"
+ }
+ },
+ "fb6571a9daa6425198031c0f323a5872": {
+ "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
+ }
+ }
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}