From b8582f5f3df804a090f2264c2f6628af0a7cdbfb Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 22 Oct 2024 01:27:31 -0700 Subject: [PATCH 1/8] LoRA and quantization are applied to the models --- TokenDethcod.ipynb | 4949 ++++++++++++++++++++++++++------------------ 1 file changed, 2933 insertions(+), 2016 deletions(-) diff --git a/TokenDethcod.ipynb b/TokenDethcod.ipynb index 84a3f6b..9fecb50 100644 --- a/TokenDethcod.ipynb +++ b/TokenDethcod.ipynb @@ -1,2047 +1,2964 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Token based DETHCOD" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "eSX4vKTl97pS", - "outputId": "64d713f1-32ad-4db4-ef37-e338a7a4e841", - "scrolled": true - }, - "outputs": [], - "source": [ - "%conda install -c conda-forge transformers wandb requests_cache datasets tqdm python-dotenv" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3yDIICSsnFOb" - }, - "source": [ - "## Download Data" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "JQb9wuBJnFOc", - "outputId": "e2d53ae0-a602-4e1a-cc30-929920b959dd" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Downloading: 100%|████████████████████████████████████████| 36.4M/36.4M [00:00<00:00, 678MB/s]\n", - "File downloaded and decompressed successfully.\n" - ] - } - ], - "source": [ - "import io\n", - "import os\n", - "import sys\n", - "import zipfile\n", - "\n", - "import requests\n", - "import requests_cache\n", - "from tqdm import tqdm\n", - "\n", - "\n", - "zip_link = \"http://www.mattmahoney.net/dc/enwik8.zip\"\n", - "data_folder = \"dataset\"\n", - "cache_file = \"download_cache\"\n", - "\n", - "# Ensure the data folder exists\n", - "if not os.path.exists(data_folder):\n", - " os.makedirs(data_folder)\n", - "\n", - "# Initialize requests_cache\n", - "requests_cache.install_cache(os.path.join(data_folder, cache_file))\n", - "\n", - "# Download the ZIP file with progress bar\n", - "response = requests.get(zip_link, stream=True)\n", - "response.raise_for_status()\n", - "\n", - "# Get the total file size for the progress bar\n", - "total_size = int(response.headers.get(\"content-length\", 0))\n", - "\n", - "# Open the ZIP file from the content\n", - "with open(os.path.join(data_folder, \"enwik8.zip\"), \"wb\") as file:\n", - " with tqdm(\n", - " total=total_size, unit=\"B\", unit_scale=True, desc=\"Downloading\"\n", - " ) as pbar:\n", - " for data in response.iter_content(chunk_size=1024):\n", - " file.write(data)\n", - " pbar.update(len(data))\n", - "\n", - "# Open the cached file\n", - "with open(os.path.join(data_folder, \"enwik8.zip\"), \"rb\") as file:\n", - " # Open the ZIP file from the content\n", - " with zipfile.ZipFile(io.BytesIO(file.read())) as zip_file:\n", - " # Extract all contents to the data folder\n", - " zip_file.extractall(data_folder)\n", - "\n", - "print(\"File downloaded and decompressed successfully.\", file=sys.stderr)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "NMCRynUDpAz6" - }, - "source": [ - "## Data" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "id": "BF26H2PapAjj" - }, - "outputs": [], - "source": [ - "from datasets import load_dataset\n", - "\n", - "dataset = load_dataset(\"text\", data_files=[\"dataset/enwik8\"])\n", - "dataset = dataset[\"train\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "pY1_Ux8uprdh", - "outputId": "c2b8a9e8-08bd-4e6a-a051-9250780cc27b" - }, - "outputs": [], - "source": [ - "from transformers import AutoTokenizer\n", - "\n", - "MODEL_ID = \"google-t5/t5-small\"\n", - "tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "id": "dZXhU0AfhrTJ" - }, - "outputs": [], - "source": [ - "# Removing large and empty samples\n", - "MAX_LENGTH = 128\n", - "\n", - "def filter_samples(example):\n", - " tokenized = tokenizer(\n", - " example[\"text\"],\n", - " truncation=True,\n", - " max_length=MAX_LENGTH + 1,\n", - " return_attention_mask=False,\n", - " return_length=True,\n", - " )\n", - "\n", - " return [\n", - " 1 < sample_length <= MAX_LENGTH\n", - " for sample_length in tokenized.length\n", - " ]\n", - "\n", - "dataset = dataset.filter(filter_samples, batched=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "WPWUhHX8A43h", - "outputId": "099a0d8a-60f5-435b-fdc4-e135e3c4ff93" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "'::<math> \\\\sum_{i=1}^\\\\infty\\\\|x_i\\\\|^2 = \\\\left\\\\|\\\\sum_{i=1}^\\\\infty x_i\\\\right\\\\|^2, </math>'\n" - ] - } - ], - "source": [ - "import random\n", - "sample = random.choice(dataset)\n", - "print(repr(sample[\"text\"]))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "wrDpshHUnFOd" - }, - "source": [ - "## Model" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "id": "fGqAZ6NY-FrU" - }, - "outputs": [], - "source": [ - "from dataclasses import dataclass\n", - "from typing import Optional, Tuple, Union\n", - "\n", - "import torch\n", - "import torch.nn as nn\n", - "import transformers\n", - "import transformers.modeling_outputs\n", - "\n", - "\n", - "class CompressionConfig(transformers.T5Config): ...\n", - "\n", - "\n", - "@dataclass\n", - "class CompressionOutput(transformers.modeling_outputs.Seq2SeqLMOutput):\n", - " value_predictions: Optional[Tuple[torch.FloatTensor, ...]] = None\n", - "\n", - "\n", - "class CompressionModel(transformers.T5ForConditionalGeneration):\n", - " def __init__(self, config):\n", - " super().__init__(config)\n", - "\n", - " self.critic_head = nn.Linear(config.d_model, 1)\n", - " self.critic_head.weight.data.normal_(mean=0.0, std=(1 / config.d_model))\n", - " self.critic_head.bias.data.zero_()\n", - "\n", - " def forward(\n", - " self,\n", - " input_ids: Optional[torch.LongTensor] = None,\n", - " attention_mask: Optional[torch.FloatTensor] = None,\n", - " decoder_input_ids: Optional[torch.LongTensor] = None,\n", - " decoder_attention_mask: Optional[torch.BoolTensor] = None,\n", - " head_mask: Optional[torch.FloatTensor] = None,\n", - " decoder_head_mask: Optional[torch.FloatTensor] = None,\n", - " cross_attn_head_mask: Optional[torch.Tensor] = None,\n", - " encoder_outputs: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n", - " past_key_values: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n", - " inputs_embeds: Optional[torch.FloatTensor] = None,\n", - " decoder_inputs_embeds: Optional[torch.FloatTensor] = None,\n", - " labels: Optional[torch.LongTensor] = None,\n", - " use_cache: Optional[bool] = None,\n", - " output_attentions: Optional[bool] = None,\n", - " output_hidden_states: Optional[bool] = True,\n", - " return_dict: Optional[bool] = None,\n", - " ) -> Union[Tuple[torch.FloatTensor], CompressionOutput]:\n", - " output = super().forward(\n", - " input_ids=input_ids,\n", - " attention_mask=attention_mask,\n", - " decoder_input_ids=decoder_input_ids,\n", - " decoder_attention_mask=decoder_attention_mask,\n", - " head_mask=head_mask,\n", - " decoder_head_mask=decoder_head_mask,\n", - " cross_attn_head_mask=cross_attn_head_mask,\n", - " encoder_outputs=encoder_outputs,\n", - " past_key_values=past_key_values,\n", - " inputs_embeds=inputs_embeds,\n", - " decoder_inputs_embeds=decoder_inputs_embeds,\n", - " labels=labels,\n", - " use_cache=use_cache,\n", - " output_attentions=output_attentions,\n", - " output_hidden_states=output_hidden_states,\n", - " return_dict=return_dict,\n", - " )\n", - "\n", - " if output.decoder_hidden_states is not None:\n", - " last_hidden_state = output.decoder_hidden_states[-1]\n", - " value_predictions = self.critic_head(last_hidden_state).squeeze(-1)\n", - " else:\n", - " value_predictions = None\n", - "\n", - " return CompressionOutput(\n", - " value_predictions=value_predictions,\n", - " logits=output.logits,\n", - " past_key_values=output.past_key_values,\n", - " decoder_hidden_states=output.decoder_hidden_states,\n", - " decoder_attentions=output.decoder_attentions,\n", - " cross_attentions=output.cross_attentions,\n", - " encoder_last_hidden_state=output.encoder_last_hidden_state,\n", - " encoder_hidden_states=output.encoder_hidden_states,\n", - " encoder_attentions=output.encoder_attentions,\n", - " )\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "id": "XMVtNmiu-30c" - }, - "outputs": [], - "source": [ - "import transformers\n", - "import transformers.modeling_outputs\n", - "\n", - "\n", - "class DecompressionConfig(transformers.T5Config): ...\n", - "\n", - "\n", - "class DecompressionModel(transformers.T5ForConditionalGeneration): ..." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "-OTuhuS295RZ", - "outputId": "80eb955b-6f1f-4899-df53-f06c5bcda115" - }, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "MODEL_PATH = Path(\"./data/models/token-dethcod/a2c-v1\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load Model" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading model from google-t5/t5-small\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Some weights of CompressionModel were not initialized from the model checkpoint at google-t5/t5-small and are newly initialized: ['critic_head.bias', 'critic_head.weight']\n", - "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n" - ] - } - ], - "source": [ - "LOAD_LATEST = False\n", - "\n", - "if LOAD_LATEST:\n", - " compressor = CompressionModel.from_pretrained(MODEL_PATH / \"compressor\").to(device)\n", - " decompressor = DecompressionModel.from_pretrained(MODEL_PATH / \"decompressor\").to(device)\n", - "else:\n", - " model_path = \"google-t5/t5-small\"\n", - " print(f\"Loading model from {model_path}\")\n", - " compressor = CompressionModel.from_pretrained(model_path).to(device)\n", - " compressor.critic_head.reset_parameters()\n", - " decompressor = DecompressionModel.from_pretrained(model_path).to(device)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "WeKAyrQz5k_k" - }, - "source": [ - "## Train" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "id": "e-neGcFgTHdu" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n", - "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n", - "\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /home/khodabandeh/.netrc\n" - ] - } - ], - "source": [ - "import os\n", - "import wandb\n", - "\n", - "try:\n", - " from dotenv import load_dotenv\n", - " # Load environment variables from .env file\n", - " load_dotenv()\n", - "\n", - "except ImportError as e:\n", - " print(f\"Error importing dotenv: {e}\")\n", - "\n", - "\n", - "# Check if running in Colab\n", - "try:\n", - " from google.colab import userdata\n", - " # If running in Colab, use userdata.get to retrieve the token\n", - " wandb.login(key=userdata.get('wandb_token'))\n", - "\n", - "except ImportError:\n", - " # If not in Colab, load the token from the environment variable\n", - " wandb_token = os.getenv('WANDB_TOKEN')\n", - " if wandb_token:\n", - " wandb.login(key=wandb_token, relogin=True)\n", - " else:\n", - " print(\"W&B token not found in environment variable. Please set WANDB_TOKEN in your environment.\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "id": "nbJccLQa_TKV" - }, - "outputs": [], - "source": [ - "COMPRESSOR_LR = 1e-3\n", - "DECOMPRESSOR_LR = 1e-3\n", - "# CRITIC_BIAS_LR = 0.1\n", - "\n", - "# # Create parameter groups\n", - "# param_groups = [\n", - "# {\"params\": [param for name, param in compressor.named_parameters() if name != \"critic_head.bias\"], \"lr\": LR},\n", - "# {\"params\": [compressor.critic_head.bias], \"lr\": CRITIC_BIAS_LR},\n", - "# ]\n", - "\n", - "# # Define optimizer with parameter groups\n", - "# compressor_optimizer = torch.optim.Adam(param_groups)\n", - "\n", - "compressor_optimizer = torch.optim.Adam(compressor.parameters(), lr=COMPRESSOR_LR)\n", - "decompressor_optimizer = torch.optim.Adam(decompressor.parameters(), lr=DECOMPRESSOR_LR)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "id": "zioTdU4gA2J2" - }, - "outputs": [], - "source": [ - "import math\n", - "\n", - "BATCH_SIZE = 8\n", - "MAX_TOKEN_COST = math.log(compressor.config.vocab_size)\n", - "\n", - "train_dataset = dataset\n", - "data_loader = torch.utils.data.DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)\n", - "\n", - "SCHEDULING_STEPS = len(data_loader) * 1.0e-2 # Schedule over 30% of an epoch\n", - "PRETRAINING_STEPS = len(data_loader) * 2.0e-2 # Schedule over 10% of an epoch" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "id": "SUo_c6cyTx2Y" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33maxiom\u001b[0m (\u001b[33mchihuahuas\u001b[0m). Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n" - ] - }, - { - "data": { - "text/html": [ - "wandb version 0.18.3 is available! To upgrade, please run:\n", - " $ pip install wandb --upgrade" + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "unSiMpj_w4a7" + }, + "source": [ + "# Token based DETHCOD" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "id": "eSX4vKTl97pS", + "scrolled": true + }, + "outputs": [], + "source": [ + "!pip install transformers wandb requests_cache datasets tqdm python-dotenv peft accelerate bitsandbytes>0.37.0" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3yDIICSsnFOb" + }, + "source": [ + "## Download Data" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JQb9wuBJnFOc", + "outputId": "14f92a7c-92b6-4c54-cb96-7aedd2d11747" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Downloading: 100%|██████████| 36.4M/36.4M [00:00<00:00, 218MB/s]\n", + "File downloaded and decompressed successfully.\n" + ] + } ], - "text/plain": [ - "" + "source": [ + "import io\n", + "import os\n", + "import sys\n", + "import zipfile\n", + "\n", + "import requests\n", + "import requests_cache\n", + "from tqdm import tqdm\n", + "\n", + "\n", + "zip_link = \"http://www.mattmahoney.net/dc/enwik8.zip\"\n", + "data_folder = \"dataset\"\n", + "cache_file = \"download_cache\"\n", + "\n", + "# Ensure the data folder exists\n", + "if not os.path.exists(data_folder):\n", + " os.makedirs(data_folder)\n", + "\n", + "# Initialize requests_cache\n", + "requests_cache.install_cache(os.path.join(data_folder, cache_file))\n", + "\n", + "# Download the ZIP file with progress bar\n", + "response = requests.get(zip_link, stream=True)\n", + "response.raise_for_status()\n", + "\n", + "# Get the total file size for the progress bar\n", + "total_size = int(response.headers.get(\"content-length\", 0))\n", + "\n", + "# Open the ZIP file from the content\n", + "with open(os.path.join(data_folder, \"enwik8.zip\"), \"wb\") as file:\n", + " with tqdm(\n", + " total=total_size, unit=\"B\", unit_scale=True, desc=\"Downloading\"\n", + " ) as pbar:\n", + " for data in response.iter_content(chunk_size=1024):\n", + " file.write(data)\n", + " pbar.update(len(data))\n", + "\n", + "# Open the cached file\n", + "with open(os.path.join(data_folder, \"enwik8.zip\"), \"rb\") as file:\n", + " # Open the ZIP file from the content\n", + " with zipfile.ZipFile(io.BytesIO(file.read())) as zip_file:\n", + " # Extract all contents to the data folder\n", + " zip_file.extractall(data_folder)\n", + "\n", + "print(\"File downloaded and decompressed successfully.\", file=sys.stderr)\n" ] - }, - "metadata": {}, - "output_type": "display_data" }, { - "data": { - "text/html": [ - "Tracking run with wandb version 0.16.6" + "cell_type": "markdown", + "metadata": { + "id": "NMCRynUDpAz6" + }, + "source": [ + "## Data" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "id": "BF26H2PapAjj", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 49, + "referenced_widgets": [ + "2011e26c9fde4ada959624a30d935c6b", + "55a34be2f9d14d00926062efafa2d7b0", + "1925655871374689a1057b008f889052", + "576e75f0473145168b5d166acb903643", + "532d04fe48164a00a8db36177c9ea152", + "ffbc13e493114403b6f88a67db932b15", + "a5c93a83de084232a6964a113aecb930", + "232f001ecfd4414aba63125571389434", + "06df0c8f7b974e189272f1a91a5e28c5", + "4b524028a9564a61a935d10083922c4c", + "1dc435da8c744a6282e8f7cfce8b4f2f" + ] + }, + "outputId": "f39ab00e-b77e-4ab5-9075-21f2501f44ca" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Generating train split: 0 examples [00:00, ? examples/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "2011e26c9fde4ada959624a30d935c6b" + } + }, + "metadata": {} + } ], - "text/plain": [ - "" + "source": [ + "from datasets import load_dataset\n", + "\n", + "dataset = load_dataset(\"text\", data_files=[\"dataset/enwik8\"])\n", + "dataset = dataset[\"train\"]" ] - }, - "metadata": {}, - "output_type": "display_data" }, { - "data": { - "text/html": [ - "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241016_111725-slm0386f" + "cell_type": "code", + "execution_count": 38, + "metadata": { + "id": "pY1_Ux8uprdh", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "a0f15afa-0f49-4aea-d8ac-1f875aa8369e" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:1601: FutureWarning: `clean_up_tokenization_spaces` was not set. It will be set to `True` by default. This behavior will be depracted in transformers v4.45, and will be then set to `False` by default. For more details check this issue: https://github.com/huggingface/transformers/issues/31884\n", + " warnings.warn(\n" + ] + } ], - "text/plain": [ - "" + "source": [ + "from transformers import AutoTokenizer\n", + "\n", + "MODEL_ID = \"google/flan-t5-base\"\n", + "tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)" ] - }, - "metadata": {}, - "output_type": "display_data" }, { - "data": { - "text/html": [ - "Syncing run Token Training to Weights & Biases (docs)
" + "cell_type": "code", + "execution_count": 39, + "metadata": { + "id": "dZXhU0AfhrTJ", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 49, + "referenced_widgets": [ + "3bf1e9a699f14d709b1f81ae98bf1215", + "0124c91212644264aaf84fe52e26e1dd", + "61bc579763f6454cb6a36dc80b9068a0", + "f056e5f5aec54fe8b3cfc121e1c24430", + "e6563f7242f3412a940b8761621eeac7", + "71f62c2eb9ad40e289c5bbcc0c95490d", + "bc1b308fdc1b4e80a6d04a70e75de34e", + "b0349099323b4b6280e3f253ab2aa033", + "e486dae88741401a82d16c7aa84b57cf", + "654f5bb5e6e44858af000d593b701980", + "22d010b51fd34ddf82627507aed81676" + ] + }, + "outputId": "87a6d03b-25cf-4dd0-d61c-b340a250e1df" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Filter: 0%| | 0/1128024 [00:00" + "source": [ + "# Removing large and empty samples\n", + "MAX_LENGTH = 128\n", + "\n", + "def filter_samples(example):\n", + " tokenized = tokenizer(\n", + " example[\"text\"],\n", + " truncation=True,\n", + " max_length=MAX_LENGTH + 1,\n", + " return_attention_mask=False,\n", + " return_length=True,\n", + " )\n", + "\n", + " return [\n", + " 1 < sample_length <= MAX_LENGTH\n", + " for sample_length in tokenized.length\n", + " ]\n", + "\n", + "dataset = dataset.filter(filter_samples, batched=True)" ] - }, - "metadata": {}, - "output_type": "display_data" }, { - "data": { - "text/html": [ - " View project at https://wandb.ai/chihuahuas/DETHCOD" + "cell_type": "code", + "execution_count": 40, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WPWUhHX8A43h", + "outputId": "82f3afe8-154a-40d7-c6a1-f0346072dc5b" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "' 2006-03-04T01:27:24Z'\n" + ] + } ], - "text/plain": [ - "" + "source": [ + "import random\n", + "sample = random.choice(dataset)\n", + "print(repr(sample[\"text\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wrDpshHUnFOd" + }, + "source": [ + "## Model" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "id": "fGqAZ6NY-FrU" + }, + "outputs": [], + "source": [ + "from dataclasses import dataclass\n", + "from typing import Optional, Tuple, Union\n", + "\n", + "import torch\n", + "import torch.nn as nn\n", + "import transformers\n", + "import transformers.modeling_outputs\n", + "\n", + "\n", + "class CompressionConfig(transformers.T5Config): ...\n", + "\n", + "\n", + "@dataclass\n", + "class CompressionOutput(transformers.modeling_outputs.Seq2SeqLMOutput):\n", + " value_predictions: Optional[Tuple[torch.FloatTensor, ...]] = None\n", + "\n", + "\n", + "class CompressionModel(transformers.T5ForConditionalGeneration):\n", + " def __init__(self, config):\n", + " super().__init__(config)\n", + "\n", + " self.critic_head = nn.Linear(config.d_model, 1)\n", + " self.critic_head.weight.data.normal_(mean=0.0, std=(1 / config.d_model))\n", + " self.critic_head.bias.data.zero_()\n", + "\n", + " def forward(\n", + " self,\n", + " input_ids: Optional[torch.LongTensor] = None,\n", + " attention_mask: Optional[torch.FloatTensor] = None,\n", + " decoder_input_ids: Optional[torch.LongTensor] = None,\n", + " decoder_attention_mask: Optional[torch.BoolTensor] = None,\n", + " head_mask: Optional[torch.FloatTensor] = None,\n", + " decoder_head_mask: Optional[torch.FloatTensor] = None,\n", + " cross_attn_head_mask: Optional[torch.Tensor] = None,\n", + " encoder_outputs: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n", + " past_key_values: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n", + " inputs_embeds: Optional[torch.FloatTensor] = None,\n", + " decoder_inputs_embeds: Optional[torch.FloatTensor] = None,\n", + " labels: Optional[torch.LongTensor] = None,\n", + " use_cache: Optional[bool] = None,\n", + " output_attentions: Optional[bool] = None,\n", + " output_hidden_states: Optional[bool] = True,\n", + " return_dict: Optional[bool] = None,\n", + " ) -> Union[Tuple[torch.FloatTensor], CompressionOutput]:\n", + " output = super().forward(\n", + " input_ids=input_ids,\n", + " attention_mask=attention_mask,\n", + " decoder_input_ids=decoder_input_ids,\n", + " decoder_attention_mask=decoder_attention_mask,\n", + " head_mask=head_mask,\n", + " decoder_head_mask=decoder_head_mask,\n", + " cross_attn_head_mask=cross_attn_head_mask,\n", + " encoder_outputs=encoder_outputs,\n", + " past_key_values=past_key_values,\n", + " inputs_embeds=inputs_embeds,\n", + " decoder_inputs_embeds=decoder_inputs_embeds,\n", + " labels=labels,\n", + " use_cache=use_cache,\n", + " output_attentions=output_attentions,\n", + " output_hidden_states=output_hidden_states,\n", + " return_dict=return_dict,\n", + " )\n", + "\n", + " if output.decoder_hidden_states is not None:\n", + " last_hidden_state = output.decoder_hidden_states[-1]\n", + " value_predictions = self.critic_head(last_hidden_state).squeeze(-1)\n", + " else:\n", + " value_predictions = None\n", + "\n", + " loss = None\n", + " if labels is not None:\n", + " loss_fct = nn.CrossEntropyLoss(ignore_index=self.config.pad_token_id)\n", + " loss = loss_fct(output.logits.view(-1, self.config.vocab_size), labels.view(-1))\n", + "\n", + " return CompressionOutput(\n", + " loss=loss,\n", + " value_predictions=value_predictions,\n", + " logits=output.logits,\n", + " past_key_values=output.past_key_values,\n", + " decoder_hidden_states=output.decoder_hidden_states,\n", + " decoder_attentions=output.decoder_attentions,\n", + " cross_attentions=output.cross_attentions,\n", + " encoder_last_hidden_state=output.encoder_last_hidden_state,\n", + " encoder_hidden_states=output.encoder_hidden_states,\n", + " encoder_attentions=output.encoder_attentions,\n", + " )\n" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "id": "XMVtNmiu-30c" + }, + "outputs": [], + "source": [ + "import transformers\n", + "import transformers.modeling_outputs\n", + "\n", + "\n", + "class DecompressionConfig(transformers.T5Config): ...\n", + "\n", + "\n", + "class DecompressionModel(transformers.T5ForConditionalGeneration): ..." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "id": "-OTuhuS295RZ" + }, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", + "MODEL_PATH = Path(\"./data/models/token-dethcod/a2c-v1\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qm6-SLkqw4bA" + }, + "source": [ + "### Load Model" ] - }, - "metadata": {}, - "output_type": "display_data" }, { - "data": { - "text/html": [ - " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/slm0386f" + "cell_type": "code", + "source": [ + "from transformers import AutoModelForCausalLM, BitsAndBytesConfig\n", + "\n", + "quantization_config = BitsAndBytesConfig(load_in_8bit=True, device_map=\"auto\")" ], - "text/plain": [ - "" + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "g4wYGk_fAkHY", + "outputId": "a719034f-75ab-4924-ccdd-1b9d7b2c02c0" + }, + "execution_count": 44, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Unused kwargs: ['device_map']. These kwargs are not used in .\n" + ] + } ] - }, - "metadata": {}, - "output_type": "display_data" }, { - "data": { - "text/html": [ - "" + "cell_type": "code", + "execution_count": 45, + "metadata": { + "id": "bZRSpc8ow4bA", + "outputId": "ac709f40-8c80-4058-fb1f-15b448bccc1e", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "`low_cpu_mem_usage` was None, now set to True since model is quantized.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Loading model from google/flan-t5-base\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Some weights of CompressionModel were not initialized from the model checkpoint at google/flan-t5-base and are newly initialized: ['critic_head.bias', 'critic_head.weight']\n", + "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n", + "`low_cpu_mem_usage` was None, now set to True since model is quantized.\n" + ] + } ], - "text/plain": [ - "" + "source": [ + "LOAD_LATEST = False\n", + "\n", + "if LOAD_LATEST:\n", + " compressor = CompressionModel.from_pretrained(MODEL_PATH / \"compressor\").to(device)\n", + " decompressor = DecompressionModel.from_pretrained(MODEL_PATH / \"decompressor\").to(device)\n", + "else:\n", + " model_path = \"google/flan-t5-base\"\n", + " print(f\"Loading model from {model_path}\")\n", + " compressor = CompressionModel.from_pretrained(model_path, quantization_config=quantization_config)\n", + " compressor.critic_head.reset_parameters()\n", + " decompressor = DecompressionModel.from_pretrained(model_path, quantization_config=quantization_config)" + ] + }, + { + "cell_type": "code", + "source": [ + "from peft import LoraConfig, get_peft_model\n", + "\n", + "lora_config = LoraConfig(\n", + " r=16,\n", + " lora_alpha=16,\n", + " lora_dropout=0.1,\n", + " bias=\"lora_only\",\n", + " modules_to_save=['decode_head'],\n", + ")\n", + "lora_compressor = get_peft_model(compressor, lora_config).to(device, torch.float32)\n", + "lora_decompressor = get_peft_model(decompressor, lora_config).to(device, torch.float32)\n", + "\n", + "trainable_params = 0\n", + "all_params = 0\n", + "\n", + "for _, param in lora_compressor.named_parameters():\n", + " all_params += param.numel()\n", + " if param.requires_grad:\n", + " trainable_params += param.numel()\n", + "\n", + "print(f'Trainable parameters: {trainable_params} | Total parameters: {all_params} | trainable%: {trainable_params / all_params * 100}')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "y8RxmtZt5hLX", + "outputId": "798a5570-5d27-4465-c18e-5127fa699267" + }, + "execution_count": 47, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Trainable parameters: 1769472 | Total parameters: 249348097 | trainable%: 0.7096392638601128\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WeKAyrQz5k_k" + }, + "source": [ + "## Train" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e-neGcFgTHdu", + "outputId": "8ea87abe-c1a8-4a3c-82e5-6486b75e4e2a" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /home/khodabandeh/.netrc\n" + ] + } + ], + "source": [ + "import os\n", + "import wandb\n", + "\n", + "try:\n", + " from dotenv import load_dotenv\n", + " # Load environment variables from .env file\n", + " load_dotenv()\n", + "\n", + "except ImportError as e:\n", + " print(f\"Error importing dotenv: {e}\")\n", + "\n", + "\n", + "# Check if running in Colab\n", + "try:\n", + " from google.colab import userdata\n", + " # If running in Colab, use userdata.get to retrieve the token\n", + " wandb.login(key=userdata.get('wandb_token'))\n", + "\n", + "except ImportError:\n", + " # If not in Colab, load the token from the environment variable\n", + " wandb_token = os.getenv('WANDB_TOKEN')\n", + " if wandb_token:\n", + " wandb.login(key=wandb_token, relogin=True)\n", + " else:\n", + " print(\"W&B token not found in environment variable. Please set WANDB_TOKEN in your environment.\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "id": "nbJccLQa_TKV" + }, + "outputs": [], + "source": [ + "COMPRESSOR_LR = 1e-3\n", + "DECOMPRESSOR_LR = 1e-3\n", + "# CRITIC_BIAS_LR = 0.1\n", + "\n", + "# # Create parameter groups\n", + "# param_groups = [\n", + "# {\"params\": [param for name, param in compressor.named_parameters() if name != \"critic_head.bias\"], \"lr\": LR},\n", + "# {\"params\": [compressor.critic_head.bias], \"lr\": CRITIC_BIAS_LR},\n", + "# ]\n", + "\n", + "# # Define optimizer with parameter groups\n", + "# compressor_optimizer = torch.optim.Adam(param_groups)\n", + "\n", + "compressor_optimizer = torch.optim.Adam(lora_compressor.parameters(), lr=COMPRESSOR_LR)\n", + "decompressor_optimizer = torch.optim.Adam(lora_decompressor.parameters(), lr=DECOMPRESSOR_LR)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "id": "zioTdU4gA2J2" + }, + "outputs": [], + "source": [ + "import math\n", + "\n", + "BATCH_SIZE = 8\n", + "MAX_TOKEN_COST = math.log(lora_compressor.config.vocab_size)\n", + "\n", + "train_dataset = dataset\n", + "data_loader = torch.utils.data.DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)\n", + "\n", + "SCHEDULING_STEPS = len(data_loader) * 1.0e-2 # Schedule over 30% of an epoch\n", + "PRETRAINING_STEPS = len(data_loader) * 2.0e-2 # Schedule over 10% of an epoch" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SUo_c6cyTx2Y", + "outputId": "317d1857-2c8e-45a7-ada8-99ef974f8124" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33maxiom\u001b[0m (\u001b[33mchihuahuas\u001b[0m). Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n" + ] + }, + { + "data": { + "text/html": [ + "wandb version 0.18.3 is available! To upgrade, please run:\n", + " $ pip install wandb --upgrade" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Tracking run with wandb version 0.16.6" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241016_111725-slm0386f" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Syncing run Token Training to Weights & Biases (docs)
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + " View project at https://wandb.ai/chihuahuas/DETHCOD" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/slm0386f" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import wandb\n", + "\n", + "wandb.init(\n", + " name = \"Token Training\",\n", + " project=\"DETHCOD\",\n", + " config={\n", + " \"compressor_model_config\": compressor.config.to_dict(),\n", + " \"decompressor_model_config\": decompressor.config.to_dict(),\n", + " # TODO: Add other parameters\n", + " },\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "id": "DiB9sOSVw4bB" + }, + "outputs": [], + "source": [ + "class TokenCostScheduler:\n", + " def __init__(self, total_steps, max_token_cost, schedule_fn=None):\n", + " self.total_steps = total_steps\n", + " self.max_token_cost = max_token_cost\n", + " self.step_count = 0\n", + "\n", + " linear_schedule = lambda self: min(self.step_count / self.total_steps, 1.0) * self.max_token_cost\n", + " # If no schedule function is provided, default to linear schedule\n", + " self.schedule_fn = schedule_fn if schedule_fn else linear_schedule\n", + "\n", + " def get_token_cost(self):\n", + " # Get the current token cost based on the schedule\n", + " token_cost = self.schedule_fn(self)\n", + " self.step_count += 1 # Increment the step count\n", + " return token_cost" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YRjMbckLw4bB", + "outputId": "f6b49273-3ea8-423c-abb1-6e4b49df4bdf" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: logging graph, to disable use `wandb.watch(log_graph=False)`\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: logging graph, to disable use `wandb.watch(log_graph=False)`\n" + ] + } + ], + "source": [ + "graph = wandb.watch((compressor.critic_head, compressor.lm_head), log_freq=100, log=\"all\", log_graph=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "81konK25w4bB" + }, + "source": [ + "### RL Training Loop" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 423, + "referenced_widgets": [ + "259751f990bc4422b181c49619700334", + "a1b0cd399a2d44e6a5f3431ac861d2d2", + "b9be4ff6d92f4112aa8078e96b3838db", + "96e4d29108ca47ea9beb7f7b1a78d79a", + "8b32e1b93368443f981ec8187016c7f2", + "065511e68dfb4053b4f0a70ef7a91ee3", + "b2826da9f9314c1cb966b54a7b6120fe", + "7a87b54b7ed549bdb26958bf7f803af2", + "dad9de6f3118448eb665a9fcb544ff68", + "05f070c4b1294821b0874bf4ddc9d7d7", + "95b6d03796e84153a5e2a6904d640659" + ] + }, + "id": "-71bvb9b4Rth", + "outputId": "af7ae39c-cd07-4490-ed2c-d66ef023f852" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + " 0%| | 0/107029 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 36\u001b[0;31m \u001b[0mcompressed\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlora_compressor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgeneration_config\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mgeneration_config\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 37\u001b[0m \u001b[0mdecompressed\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlora_decompressor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcompressed\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msequences\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabels\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/peft/peft_model.py\u001b[0m in \u001b[0;36mgenerate\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 815\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_enable_peft_forward_hooks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 816\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mspecial_peft_forward_args\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 817\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_base_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 818\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 819\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_get_base_model_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_prompt_tuning\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/utils/_contextlib.py\u001b[0m in \u001b[0;36mdecorate_context\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mctx_factory\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 116\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 117\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 118\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/generation/utils.py\u001b[0m in \u001b[0;36mgenerate\u001b[0;34m(self, inputs, generation_config, logits_processor, stopping_criteria, prefix_allowed_tokens_fn, synced_gpus, assistant_model, streamer, negative_prompt_ids, negative_prompt_attention_mask, **kwargs)\u001b[0m\n\u001b[1;32m 2022\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2023\u001b[0m \u001b[0;31m# 13. run sample (it degenerates to greedy search when `generation_config.do_sample=False`)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2024\u001b[0;31m result = self._sample(\n\u001b[0m\u001b[1;32m 2025\u001b[0m \u001b[0minput_ids\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2026\u001b[0m \u001b[0mlogits_processor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mprepared_logits_processor\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/generation/utils.py\u001b[0m in \u001b[0;36m_sample\u001b[0;34m(self, input_ids, logits_processor, stopping_criteria, generation_config, synced_gpus, streamer, logits_warper, **model_kwargs)\u001b[0m\n\u001b[1;32m 2980\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2981\u001b[0m \u001b[0;31m# forward pass to get next token\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2982\u001b[0;31m \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mmodel_inputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreturn_dict\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2983\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2984\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0msynced_gpus\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mthis_peer_finished\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compiled_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1552\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1553\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_pre_hooks\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_hooks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/accelerate/hooks.py\u001b[0m in \u001b[0;36mnew_forward\u001b[0;34m(module, *args, **kwargs)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 170\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 171\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hf_hook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input_ids, attention_mask, decoder_input_ids, decoder_attention_mask, head_mask, decoder_head_mask, cross_attn_head_mask, encoder_outputs, past_key_values, inputs_embeds, decoder_inputs_embeds, labels, use_cache, output_attentions, output_hidden_states, return_dict)\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[0mreturn_dict\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mOptional\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mbool\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 44\u001b[0m ) -> Union[Tuple[torch.FloatTensor], CompressionOutput]:\n\u001b[0;32m---> 45\u001b[0;31m output = super().forward(\n\u001b[0m\u001b[1;32m 46\u001b[0m \u001b[0minput_ids\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[0mattention_mask\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mattention_mask\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/models/t5/modeling_t5.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input_ids, attention_mask, decoder_input_ids, decoder_attention_mask, head_mask, decoder_head_mask, cross_attn_head_mask, encoder_outputs, past_key_values, inputs_embeds, decoder_inputs_embeds, labels, use_cache, output_attentions, output_hidden_states, return_dict)\u001b[0m\n\u001b[1;32m 1737\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1738\u001b[0m \u001b[0;31m# Decode\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1739\u001b[0;31m decoder_outputs = self.decoder(\n\u001b[0m\u001b[1;32m 1740\u001b[0m \u001b[0minput_ids\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdecoder_input_ids\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1741\u001b[0m \u001b[0mattention_mask\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdecoder_attention_mask\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compiled_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1552\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1553\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_pre_hooks\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_hooks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/accelerate/hooks.py\u001b[0m in \u001b[0;36mnew_forward\u001b[0;34m(module, *args, **kwargs)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 170\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 171\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hf_hook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/models/t5/modeling_t5.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input_ids, attention_mask, encoder_hidden_states, encoder_attention_mask, inputs_embeds, head_mask, cross_attn_head_mask, past_key_values, use_cache, output_attentions, output_hidden_states, return_dict)\u001b[0m\n\u001b[1;32m 1104\u001b[0m )\n\u001b[1;32m 1105\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1106\u001b[0;31m layer_outputs = layer_module(\n\u001b[0m\u001b[1;32m 1107\u001b[0m \u001b[0mhidden_states\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1108\u001b[0m \u001b[0mattention_mask\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mextended_attention_mask\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compiled_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1552\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1553\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_pre_hooks\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_hooks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/accelerate/hooks.py\u001b[0m in \u001b[0;36mnew_forward\u001b[0;34m(module, *args, **kwargs)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 170\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 171\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hf_hook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/models/t5/modeling_t5.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, hidden_states, attention_mask, position_bias, encoder_hidden_states, encoder_attention_mask, encoder_decoder_position_bias, layer_head_mask, cross_attn_layer_head_mask, past_key_value, use_cache, output_attentions, return_dict)\u001b[0m\n\u001b[1;32m 744\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 745\u001b[0m \u001b[0;31m# Apply Feed Forward layer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 746\u001b[0;31m \u001b[0mhidden_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlayer\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 747\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 748\u001b[0m \u001b[0;31m# clamp inf values to enable fp16 training\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compiled_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1552\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1553\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_pre_hooks\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_hooks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/accelerate/hooks.py\u001b[0m in \u001b[0;36mnew_forward\u001b[0;34m(module, *args, **kwargs)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 170\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 171\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hf_hook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/models/t5/modeling_t5.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, hidden_states)\u001b[0m\n\u001b[1;32m 333\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 334\u001b[0m \u001b[0mforwarded_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlayer_norm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 335\u001b[0;31m \u001b[0mforwarded_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDenseReluDense\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mforwarded_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 336\u001b[0m \u001b[0mhidden_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhidden_states\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdropout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mforwarded_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 337\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mhidden_states\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compiled_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1552\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1553\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_pre_hooks\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_hooks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/accelerate/hooks.py\u001b[0m in \u001b[0;36mnew_forward\u001b[0;34m(module, *args, **kwargs)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 170\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 171\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hf_hook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/models/t5/modeling_t5.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, hidden_states)\u001b[0m\n\u001b[1;32m 302\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 303\u001b[0m \u001b[0mhidden_gelu\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mact\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwi_0\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 304\u001b[0;31m \u001b[0mhidden_linear\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwi_1\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 305\u001b[0m \u001b[0mhidden_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhidden_gelu\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mhidden_linear\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 306\u001b[0m \u001b[0mhidden_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdropout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compiled_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1552\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1553\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_pre_hooks\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_hooks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/accelerate/hooks.py\u001b[0m in \u001b[0;36mnew_forward\u001b[0;34m(module, *args, **kwargs)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 170\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 171\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hf_hook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/bitsandbytes/nn/modules.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, x)\u001b[0m\n\u001b[1;32m 1007\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbias\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbias\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1008\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1009\u001b[0;31m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbnb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatmul\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mweight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbias\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbias\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1010\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1011\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhas_fp16_weights\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/bitsandbytes/autograd/_functions.py\u001b[0m in \u001b[0;36mmatmul\u001b[0;34m(A, B, out, state, threshold, bias)\u001b[0m\n\u001b[1;32m 554\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mthreshold\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0.0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 555\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mthreshold\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mthreshold\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 556\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mMatMul8bitLt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mB\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbias\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 557\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 558\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/autograd/function.py\u001b[0m in \u001b[0;36mapply\u001b[0;34m(cls, *args, **kwargs)\u001b[0m\n\u001b[1;32m 572\u001b[0m \u001b[0;31m# See NOTE: [functorch vjp and autograd interaction]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 573\u001b[0m \u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_functorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munwrap_dead_wrappers\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 574\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 575\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 576\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mis_setup_ctx_defined\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/bitsandbytes/autograd/_functions.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(ctx, A, B, out, bias, state)\u001b[0m\n\u001b[1;32m 319\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 320\u001b[0m \u001b[0mA\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 321\u001b[0;31m \u001b[0mCA\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mCAt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSCA\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSCAt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcoo_tensorA\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mF\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdouble_quant\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfloat16\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mthreshold\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mthreshold\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 322\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 323\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mthreshold\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0.0\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mcoo_tensorA\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/bitsandbytes/functional.py\u001b[0m in \u001b[0;36mdouble_quant\u001b[0;34m(A, col_stats, row_stats, out_col, out_row, threshold)\u001b[0m\n\u001b[1;32m 2557\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhalf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2558\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mdevice\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtype\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"cuda\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2559\u001b[0;31m \u001b[0mprev_device\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpre_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2560\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2561\u001b[0m \u001b[0mcols\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/bitsandbytes/functional.py\u001b[0m in \u001b[0;36mpre_call\u001b[0;34m(device)\u001b[0m\n\u001b[1;32m 480\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mpre_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 481\u001b[0m \u001b[0mprev_device\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcurrent_device\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 482\u001b[0;31m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_device\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 483\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mprev_device\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 484\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/cuda/__init__.py\u001b[0m in \u001b[0;36mset_device\u001b[0;34m(device)\u001b[0m\n\u001b[1;32m 416\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mthis\u001b[0m \u001b[0margument\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mnegative\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 417\u001b[0m \"\"\"\n\u001b[0;32m--> 418\u001b[0;31m \u001b[0mdevice\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_get_device_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 419\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdevice\u001b[0m \u001b[0;34m>=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 420\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_C\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_cuda_setDevice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/cuda/_utils.py\u001b[0m in \u001b[0;36m_get_device_index\u001b[0;34m(device, optional, allow_cpu)\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 37\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdevice\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 38\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_torch_get_device_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moptional\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallow_cpu\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/_utils.py\u001b[0m in \u001b[0;36m_get_device_index\u001b[0;34m(device, optional, allow_cpu)\u001b[0m\n\u001b[1;32m 780\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mcurrent\u001b[0m \u001b[0mdefault\u001b[0m \u001b[0mCUDA\u001b[0m \u001b[0mdevice\u001b[0m \u001b[0mwill\u001b[0m \u001b[0mbe\u001b[0m \u001b[0mreturned\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mCUDA\u001b[0m \u001b[0mruntime\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0msupported\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 781\u001b[0m \"\"\"\n\u001b[0;32m--> 782\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 783\u001b[0m \u001b[0mdevice\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 784\u001b[0m \u001b[0mdevice_idx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mOptional\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "import torch.nn.functional as F\n", + "import tqdm.auto as tqdm\n", + "from transformers import GenerationConfig\n", + "from transformers import modeling_outputs\n", + "\n", + "\n", + "# Define your generation configuration as before\n", + "generation_config = GenerationConfig(\n", + " do_sample=True,\n", + " num_beams=1,\n", + " max_new_tokens=128,\n", + " decoder_start_token_id=lora_compressor.generation_config.decoder_start_token_id,\n", + " eos_token_id=lora_compressor.generation_config.eos_token_id,\n", + " pad_token_id=lora_compressor.generation_config.pad_token_id,\n", + " return_dict_in_generate=True,\n", + " output_logits=True,\n", + ")\n", + "\n", + "# Initialize the scheduler\n", + "token_cost_scheduler = TokenCostScheduler(total_steps=SCHEDULING_STEPS, max_token_cost=MAX_TOKEN_COST)\n", + "\n", + "with tqdm.tqdm(data_loader) as pbar:\n", + " for step, batch in enumerate(pbar):\n", + " # Get the current token cost from the scheduler\n", + " token_cost = token_cost_scheduler.get_token_cost()\n", + "\n", + " input_ids = tokenizer(\n", + " batch[\"text\"],\n", + " return_tensors=\"pt\",\n", + " padding=True,\n", + " # TODO: Test if this has any effect\n", + " truncation=True,\n", + " ).input_ids.to(device)\n", + "\n", + "\n", + " compressed = lora_compressor.generate(input_ids=input_ids, generation_config=generation_config)\n", + " decompressed = lora_decompressor.forward(input_ids=compressed.sequences, labels=input_ids)\n", + "\n", + " # Force last token to be eos for episodes with no eos (terminated by max_len)\n", + " full_episodes = (compressed.sequences != generation_config.eos_token_id).all(dim=-1)\n", + " sequences_copy = compressed.sequences.clone()\n", + " sequences_copy[..., full_episodes, -1] = generation_config.eos_token_id\n", + " compressed.sequences = sequences_copy\n", + "\n", + " actions = compressed.sequences[..., 1:]\n", + "\n", + " action_distributions = torch.stack(compressed.logits).transpose(0, 1)\n", + " # TODO: Give the `actions` as decoder_input_ids instead\n", + " values = lora_compressor.forward(input_ids=input_ids, decoder_input_ids=compressed.sequences).value_predictions[..., :-1]\n", + " action_mask = actions != generation_config.pad_token_id\n", + " is_pad = actions == generation_config.pad_token_id\n", + " is_eos = actions == generation_config.eos_token_id\n", + " compressed_length = actions.size(-1) - is_pad.logical_or(is_eos).sum(dim=-1)\n", + "\n", + " losses = F.cross_entropy(\n", + " decompressed.logits.flatten(0, -2),\n", + " target=input_ids.flatten(),\n", + " ignore_index=0,\n", + " reduction=\"none\",\n", + " ).view(input_ids.shape)\n", + " decompressor_loss = losses.mean()\n", + "\n", + " sequence_compression_loss = losses.detach().sum(dim=-1)\n", + " rewards = torch.where(\n", + " actions == generation_config.eos_token_id,\n", + " -sequence_compression_loss.unsqueeze(-1),\n", + " -token_cost,\n", + " ) * action_mask\n", + " qs = rewards.flip(dims=[-1]).cumsum(dim=-1).flip(dims=[-1])\n", + "\n", + " advantage = (qs - values) * action_mask\n", + " masked_advantage = advantage[action_mask]\n", + " critic_loss = (masked_advantage * masked_advantage).mean()\n", + "\n", + " compressed_size = (action_mask.sum(dim=-1) - 1) * MAX_TOKEN_COST + sequence_compression_loss\n", + " decompressed_size = ((input_ids != 0).sum(dim=-1) - 1) * MAX_TOKEN_COST\n", + " compression_ratio = (decompressed_size / compressed_size).mean()\n", + "\n", + " if step < PRETRAINING_STEPS:\n", + " # Train the model to generate the original sequence\n", + " actor_loss = lora_compressor.forward(input_ids=input_ids, labels=input_ids).loss\n", + "\n", + " else:\n", + "\n", + " action_logits = F.cross_entropy(\n", + " action_distributions.flatten(0, -2),\n", + " target=actions.flatten(),\n", + " ignore_index=0,\n", + " reduction=\"none\",\n", + " ).view(actions.shape)\n", + " actor_loss = (action_logits * advantage.detach()).mean()\n", + "\n", + " compressor_loss = actor_loss + critic_loss\n", + "\n", + " pbar.set_description(f\"{compression_ratio=:.2f}, {critic_loss=:.2f}, {actor_loss=:.2f}, {decompressor_loss=:.2f}\")\n", + "\n", + " compressor_optimizer.zero_grad()\n", + " compressor_loss.backward()\n", + " compressor_optimizer.step()\n", + "\n", + " decompressor_optimizer.zero_grad()\n", + " decompressor_loss.backward()\n", + " decompressor_optimizer.step()\n", + "\n", + " with torch.no_grad():\n", + " wandb.log(\n", + " {\n", + " \"actor_loss\": actor_loss,\n", + " \"critic_loss\": critic_loss,\n", + " \"reward\": rewards.sum(dim=-1).mean(),\n", + " \"decompressor_loss\": decompressor_loss,\n", + " \"accuracy\": (-sequence_compression_loss).exp().mean(),\n", + " \"compressed_size\": compressed_length.float().mean(),\n", + " \"compression_ratio\": compression_ratio,\n", + " \"expected_advantage\": masked_advantage.mean(),\n", + " \"advantage_std\": masked_advantage.std(),\n", + " \"advantage\": masked_advantage,\n", + " \"token_cost\": token_cost,\n", + " }\n", + " )\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MHotTfInw4bB" + }, + "outputs": [], + "source": [ + "wandb.finish()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EomSPfQ1w4bC" + }, + "source": [ + "### Save" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Hx_Iec6iw4bC" + }, + "outputs": [], + "source": [ + "compressor.save_pretrained(MODEL_PATH / \"compressor\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "33cJmyN2w4bC" + }, + "outputs": [], + "source": [ + "decompressor.save_pretrained(MODEL_PATH / \"decompressor\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1gR6WQBow4bC" + }, + "source": [ + "## Playground" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0C0rFrBuw4bC", + "outputId": "c8a88452-7c0e-4267-f6de-5f599432a489" + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import torch\n", + "import matplotlib.pyplot as plt\n", + "\n", + "top_token_count = 100\n", + "\n", + "# Assuming `action_distributions` is the tensor of shape [100, 32128]\n", + "logits = action_distributions[1].detach().cpu() # Ensure it's on the CPU\n", + "\n", + "# Step 1: Average the logits across the first axis (dimension 0)\n", + "avg_logits = torch.mean(logits, dim=0)\n", + "\n", + "# Step 2: Get the top 50 tokens based on average logit values\n", + "top_values, top_indices = torch.topk(avg_logits, top_token_count)\n", + "\n", + "# Step 3: Convert the top indices to tokens using the tokenizer\n", + "top_tokens = tokenizer.convert_ids_to_tokens(top_indices.numpy())\n", + "\n", + "# Step 4: Plot the top 50 logits using imshow with tokens as labels\n", + "plt.figure(figsize=(10, 2))\n", + "plt.imshow(logits[..., top_indices].numpy(), cmap='viridis', aspect='auto', interpolation=\"nearest\")\n", + "plt.colorbar(label='Logit Value')\n", + "plt.yticks([]) # Hide y-axis as we only have one row\n", + "plt.xticks(range(top_token_count), top_tokens, rotation='vertical')\n", + "plt.title('Top 50 Tokens by Average Logit')\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "U393aMyBw4bC", + "outputId": "faa47bfc-c434-41f9-a75d-83cb7a486888" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 165.1084, -36.0591, -121.1219, ..., 693.7413, 704.1188,\n", + " 714.4963],\n", + " [ 52.5199, -161.4629, -264.1466, ..., 560.4196, 570.7971,\n", + " 581.1746],\n", + " [ 108.7585, -87.1466, -611.3521, ..., 665.0784, 675.4559,\n", + " 685.8333],\n", + " ...,\n", + " [ 141.6855, -90.8539, -191.5150, ..., 620.3885, 630.7659,\n", + " 641.1434],\n", + " [ -97.1033, -232.9352, -222.5577, ..., 698.5034, 708.8810,\n", + " 719.2583],\n", + " [ 129.4216, -67.8324, -597.4383, ..., 678.9921, 689.3696,\n", + " 699.7472]], device='cuda:0', grad_fn=)" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "advantage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mz4_KbSNw4bC", + "outputId": "d47df08d-66da-48f5-c1bb-42dc639804c1" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[-1512.3618, -1300.8169, -1205.3765, ..., -743.8093, -743.8093,\n", + " -743.8093],\n", + " [-1502.4591, -1278.0989, -1165.0376, ..., -713.1734, -713.1734,\n", + " -713.1734],\n", + " [-1512.4761, -1306.1935, -771.6105, ..., -771.6105, -771.6105,\n", + " -771.6105],\n", + " ...,\n", + " [-1500.7911, -1257.8741, -1146.8356, ..., -682.3087, -682.3086,\n", + " -682.3087],\n", + " [-1571.7404, -1425.5309, -1425.5309, ..., -1070.1616, -1070.1617,\n", + " -1070.1616],\n", + " [-1510.2328, -1302.6012, -762.6179, ..., -762.6179, -762.6179,\n", + " -762.6179]], device='cuda:0', grad_fn=)" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "values" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eaQR64z2w4bC" + }, + "outputs": [], + "source": [ + "val_tmp = values.detach()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6sBjWgK0w4bC" + }, + "outputs": [], + "source": [ + "bias = nn.Parameter(torch.tensor(0.0, device=device))\n", + "optim_tmp = torch.optim.Adam(params=[bias])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1QjHh1tDw4bD" + }, + "outputs": [], + "source": [ + "# optim_tmp.param_groups[0]['betas'] = (0.99, 0.5)\n", + "optim_tmp.param_groups[0]['lr'] = 0.1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oaYc-L-hw4bD", + "outputId": "f30208f9-8296-4586-ec88-701149d7764a", + "colab": { + "referenced_widgets": [ + "198affb45b4f40b1beb28eb813be0481" + ] + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "198affb45b4f40b1beb28eb813be0481", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/10000 [00:00)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "advantage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "QTmN4OBdw4bD", + "outputId": "58688d92-d249-405e-82d1-45f8392feb97" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor(200, device='cuda:1')" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "action_mask.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9Gb3kVLkw4bG", + "outputId": "290d9d5a-1da7-48d3-e1d7-d763845bcace" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[9.2983e-06, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " 2.3842e-07, 9.5367e-07, 2.8610e-06, 8.1062e-06, 1.3590e-05, 2.7775e-05,\n", + " 8.0701e-05, 2.9488e-04, 8.9534e-04, 2.2504e-03, 3.2974e-03, 6.3756e-03,\n", + " 1.6895e-02, 6.8286e-02, 2.1855e-01, 5.3514e-01, 8.1005e-01, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, 9.1202e+01],\n", + " [1.5736e-05, -0.0000e+00, -0.0000e+00, 1.1921e-07, 1.1921e-07, 1.1921e-07,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, 2.3842e-07, 3.5763e-07,\n", + " 7.1526e-07, 2.9802e-06, 1.1206e-05, 3.8861e-05, 8.2132e-05, 2.3815e-04,\n", + " 9.1130e-04, 3.5617e-03, 1.0967e-02, 3.0503e-02, 2.9737e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, 1.0006e+02]], device='cuda:1')" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "action_logits" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9-Ex1IKEw4bG", + "outputId": "c6053fe6-5dd0-4595-957e-df5b9fc75dfa" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(tensor([-1099.6810, -1087.6995, -1076.0786, -1063.6698, -1054.7687, -1046.5447,\n", + " -1037.6260, -1027.8066, -1018.0566, -1007.5678, -995.8646, -985.5587,\n", + " -977.1706, -966.2009, -955.0208, -943.8681, -934.0468, -923.2490,\n", + " -912.6065, -899.9257, -890.4675, -879.4435, -870.5907, -859.1940,\n", + " -845.0573, -835.8955, -825.3179, -813.2614, -802.4627, -791.4663,\n", + " -781.6210, -771.6415, -761.0430, -750.6395, -741.1759, -729.8900,\n", + " -719.4247, -708.3924, -698.3824, -689.5949, -678.8000, -668.8644,\n", + " -657.7481, -646.4171, -636.8819, -628.0941, -618.0164, -608.4584,\n", + " -597.8752, -586.1464, -575.6812, -566.5031, -557.1078, -548.1906,\n", + " -537.7205, -525.3519, -514.1478, -503.8547, -494.7173, -481.8814,\n", + " -471.4543, -462.1197, -451.7022, -438.7026, -427.2851, -417.7741,\n", + " -409.7844, -398.9852, -388.6053, -377.3386, -367.8718, -357.7217,\n", + " -345.6424, -336.0607, -324.9157, -313.4325, -304.9853, -294.3703,\n", + " -284.6585, -274.1472, -264.1192, -253.2724, -243.0500, -233.2437,\n", + " -220.8721, -210.5932, -202.5967, -193.7442, -183.4849, -173.7296,\n", + " -160.4890, -148.3543, -139.0402, -131.2023, -124.4018, -115.6297,\n", + " -103.3717, -93.1214, -84.9352, -70.5845], device='cuda:1',\n", + " grad_fn=),\n", + " tensor([-1083.6101, -1073.2327, -1062.8552, -1052.4777, -1042.1002, -1031.7227,\n", + " -1021.3452, -1010.9678, -1000.5903, -990.2128, -979.8353, -969.4578,\n", + " -959.0803, -948.7029, -938.3254, -927.9479, -917.5704, -907.1929,\n", + " -896.8154, -886.4380, -876.0605, -865.6830, -855.3055, -844.9280,\n", + " -834.5505, -824.1731, -813.7956, -803.4181, -793.0406, -782.6631,\n", + " -772.2856, -761.9081, -751.5307, -741.1532, -730.7757, -720.3983,\n", + " -710.0208, -699.6432, -689.2657, -678.8883, -668.5107, -658.1333,\n", + " -647.7559, -637.3783, -627.0009, -616.6234, -606.2458, -595.8684,\n", + " -585.4909, -575.1134, -564.7360, -554.3585, -543.9810, -533.6035,\n", + " -523.2260, -512.8485, -502.4711, -492.0936, -481.7161, -471.3386,\n", + " -460.9611, -450.5836, -440.2061, -429.8287, -419.4512, -409.0737,\n", + " -398.6962, -388.3187, -377.9413, -367.5638, -357.1863, -346.8088,\n", + " -336.4313, -326.0538, -315.6764, -305.2989, -294.9214, -284.5439,\n", + " -274.1664, -263.7889, -253.4115, -243.0340, -232.6565, -222.2790,\n", + " -211.9015, -201.5240, -191.1465, -180.7691, -170.3916, -160.0141,\n", + " -149.6366, -139.2591, -128.8817, -118.5042, -108.1267, -97.7492,\n", + " -87.3717, -76.9942, -66.6168, -56.2393], device='cuda:1'))" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "values[0], qs[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Mpfxu39uw4bG", + "outputId": "27cc1fc5-890a-484b-951e-a0a17e17ea01" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[[ 42.5565, -7.8072, 29.3323, ..., -32.0589, -33.0385, -35.3182],\n", + " [ 23.7275, -6.8322, 26.1425, ..., -38.0214, -39.0071, -41.5004],\n", + " [ 27.3845, -11.7691, 26.7946, ..., -36.9438, -37.9392, -40.4390],\n", + " ...,\n", + " [ 8.6169, -19.3931, -13.6451, ..., -45.4590, -46.8009, -46.7714],\n", + " [ 9.2576, -19.5066, -13.6655, ..., -45.5242, -46.8551, -46.8182],\n", + " [ 10.3809, -21.2369, -14.6508, ..., -45.2848, -46.5306, -46.4914]],\n", + "\n", + " [[ 37.7327, -5.0951, 26.8845, ..., -32.0686, -33.0935, -35.2686],\n", + " [ 18.1861, -3.8062, 25.1262, ..., -38.5185, -39.5455, -41.9225],\n", + " [ 20.0888, -9.5134, 26.6477, ..., -37.9658, -38.9319, -41.2657],\n", + " ...,\n", + " [ 7.4155, -23.2394, -13.5891, ..., -48.8296, -50.1104, -50.0522],\n", + " [ 7.9775, -23.4906, -13.4194, ..., -48.8065, -50.0781, -50.0124],\n", + " [ 9.0720, -25.4228, -14.5521, ..., -48.0591, -49.2677, -49.1962]]],\n", + " device='cuda:1')" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "action_distributions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5rfN0jm2w4bG", + "outputId": "6c092a3c-e588-4744-9a73-ec8d6d37ffce" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(advantage[0].cpu().detach())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eWtEiSe0RZqa" + }, + "outputs": [], + "source": [ + "import random\n", + "\n", + "sample = random.choice(dataset)\n", + "print(repr(sample[\"text\"]))\n", + "\n", + "input_ids = tokenizer(\n", + " batch[\"text\"],\n", + " return_tensors=\"pt\",\n", + " padding=True,\n", + " truncation=True,\n", + ").input_ids.to(device)\n", + "\n", + "with torch.no_grad():\n", + " compressed = compressor.generate(input_ids=input_ids, generation_config=generation_config)\n", + " print(repr(tokenizer.decode(compressed.sequences[0])))\n", + " decompressed = decompressor.forward(input_ids=compressed.sequences, labels=input_ids)\n", + "\n", + "actions = compressed.sequences[..., 1:]\n", + "action_distributions = torch.stack(compressed.logits).transpose(0, 1)\n", + "values = compressor.forward(input_ids=input_ids, decoder_input_ids=compressed.sequences).value_predictions[..., :-1]\n", + "action_mask = actions != generation_config.pad_token_id\n", + "is_pad = actions == generation_config.pad_token_id\n", + "is_eos = actions == generation_config.eos_token_id\n", + "compressed_length = actions.size(-1) - is_pad.logical_or(is_eos).sum(dim=-1)\n", + "\n", + "losses = F.cross_entropy(\n", + " decompressed.logits.flatten(0, -2),\n", + " target=input_ids.flatten(),\n", + " ignore_index=0,\n", + " reduction=\"none\",\n", + ").view(input_ids.shape)\n", + "decompressor_loss = losses.mean()\n", + "\n", + "sequence_compression_loss = losses.detach().sum(dim=-1)\n", + "rewards = torch.where(\n", + " actions == generation_config.eos_token_id,\n", + " -sequence_compression_loss.unsqueeze(-1),\n", + " -TOKEN_COST,\n", + ") * action_mask\n", + "qs = rewards.flip(dims=[-1]).cumsum(dim=-1).flip(dims=[-1])\n", + "\n", + "advantage = (qs - values) * action_mask\n", + "critic_loss = (advantage * advantage).mean()\n", + "\n", + "action_logits = F.cross_entropy(\n", + " action_distributions.flatten(0, -2),\n", + " target=actions.flatten(),\n", + " ignore_index=0,\n", + " reduction=\"none\",\n", + ").view(actions.shape)\n", + "actor_loss = (action_logits * advantage.detach()).mean()\n", + "\n", + "print(f\"actor_loss={actor_loss}\")\n", + "print(f\"critic_loss={critic_loss}\")\n", + "print(f\"reward={rewards.sum(dim=-1).mean()}\")\n", + "print(f\"decompressor_loss={decompressor_loss}\")\n", + "print(f\"accuracy={(-losses.sum(dim=-1)).exp().mean()}\")\n", + "print(f\"compressed_size={compressed_length.float().mean()}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3IceDKUVw4bG" + }, + "outputs": [], + "source": [ + "actions[2][4] = 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "C6M4pehdw4bG" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qRQ23pIHw4bH" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "08ZGGXx5w4bH" + }, + "outputs": [], + "source": [ + "actions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EWH18Ssyw4bH" + }, + "outputs": [], + "source": [ + "_61.tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SYyxH35jw4bH" + }, + "outputs": [], + "source": [ + "tokenizer.decode(compressed[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PYiKrtM2M03J" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FLVMLQIqQXCf" + }, + "outputs": [], + "source": [ + "action_logits" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PfBhV45yw4bH" + }, + "outputs": [], + "source": [ + "compressed[0, 1] = 4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oxbMaMA1w4bH" + }, + "outputs": [], + "source": [ + "values, indices = compression_output.logits[0, -1].sort(descending=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "W1LgK-jbw4bH" + }, + "outputs": [], + "source": [ + "indices" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pLLIgKM4w4bH" + }, + "outputs": [], + "source": [ + "F.cross_entropy(\n", + " compression_output.logits[:, :-1, :].view(-1, num_ids),\n", + " target=compressed[:, 1:].flatten(),\n", + " ignore_index=0,\n", + " reduction='none',\n", + ") * advantage.flatten()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e2T85EARPdwI" + }, + "outputs": [], + "source": [ + "compression_output.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eAIEFx4jw4bI" + }, + "outputs": [], + "source": [ + "len(action_logits)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f8fWsj1Rw4bI" + }, + "outputs": [], + "source": [ + "compressed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0n7pvXSLw4bI" + }, + "outputs": [], + "source": [ + "sample[\"text\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GtKo3PPGQf0J" + }, + "outputs": [], + "source": [ + "advantage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "VXhr1x1tQhII" + }, + "outputs": [], + "source": [ + "losses" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fLAz9DwoN5np" + }, + "outputs": [], + "source": [ + "reward" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xIKY8_DwNa4l" + }, + "outputs": [], + "source": [ + "len_compressed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5zxqYdtCNLn7" + }, + "outputs": [], + "source": [ + "advantage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "aDveEsAPMsQt" + }, + "outputs": [], + "source": [ + "actor_loss" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SiJGEKx2MtlU" + }, + "outputs": [], + "source": [ + "critic_loss" ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import wandb\n", - "\n", - "wandb.init(\n", - " name = \"Token Training\",\n", - " project=\"DETHCOD\",\n", - " config={\n", - " \"compressor_model_config\": compressor.config.to_dict(),\n", - " \"decompressor_model_config\": decompressor.config.to_dict(),\n", - " # TODO: Add other parameters\n", - " },\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "class TokenCostScheduler:\n", - " def __init__(self, total_steps, max_token_cost, schedule_fn=None):\n", - " self.total_steps = total_steps\n", - " self.max_token_cost = max_token_cost\n", - " self.step_count = 0\n", - "\n", - " linear_schedule = lambda self: min(self.step_count / self.total_steps, 1.0) * self.max_token_cost\n", - " # If no schedule function is provided, default to linear schedule\n", - " self.schedule_fn = schedule_fn if schedule_fn else linear_schedule\n", - "\n", - " def get_token_cost(self):\n", - " # Get the current token cost based on the schedule\n", - " token_cost = self.schedule_fn(self)\n", - " self.step_count += 1 # Increment the step count\n", - " return token_cost" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[34m\u001b[1mwandb\u001b[0m: logging graph, to disable use `wandb.watch(log_graph=False)`\n", - "\u001b[34m\u001b[1mwandb\u001b[0m: logging graph, to disable use `wandb.watch(log_graph=False)`\n" - ] - } - ], - "source": [ - "graph = wandb.watch((compressor.critic_head, compressor.lm_head), log_freq=100, log=\"all\", log_graph=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### RL Training Loop" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 388, - "referenced_widgets": [ - "a0678d2428ff4198a9381b664dea08c4", - "579d2c20323a4e14aa0b2fcc125e9eb9", - "1a79263283254ba3a8e909ea3966e3ac", - "e4dcb7f644ce4739b255809f9df0bf53", - "584d3bd4ac484269bcf7da1d48c78448", - "e648ad71485b482992d3b5b699fdf90b", - "a7c81547e14040a28b9f3e8f469bc933", - "460431870cd346caa15e02b9ffe0c63f", - "a75e62964f224e8ab32e9136c00f786e", - "6f20c7b7089045ffa62fda32898dd673", - "e79223029d27455288e6daa49aabe4f3" - ] - }, - "id": "-71bvb9b4Rth", - "outputId": "058aeb31-300b-4aef-e930-5421113cbff1" - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a1196b0e1600483c8f1c9e065cdb90f5", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/106887 [00:00" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import torch\n", - "import matplotlib.pyplot as plt\n", - "\n", - "top_token_count = 100\n", - "\n", - "# Assuming `action_distributions` is the tensor of shape [100, 32128]\n", - "logits = action_distributions[1].detach().cpu() # Ensure it's on the CPU\n", - "\n", - "# Step 1: Average the logits across the first axis (dimension 0)\n", - "avg_logits = torch.mean(logits, dim=0)\n", - "\n", - "# Step 2: Get the top 50 tokens based on average logit values\n", - "top_values, top_indices = torch.topk(avg_logits, top_token_count)\n", - "\n", - "# Step 3: Convert the top indices to tokens using the tokenizer\n", - "top_tokens = tokenizer.convert_ids_to_tokens(top_indices.numpy())\n", - "\n", - "# Step 4: Plot the top 50 logits using imshow with tokens as labels\n", - "plt.figure(figsize=(10, 2))\n", - "plt.imshow(logits[..., top_indices].numpy(), cmap='viridis', aspect='auto', interpolation=\"nearest\")\n", - "plt.colorbar(label='Logit Value')\n", - "plt.yticks([]) # Hide y-axis as we only have one row\n", - "plt.xticks(range(top_token_count), top_tokens, rotation='vertical')\n", - "plt.title('Top 50 Tokens by Average Logit')\n", - "plt.show()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[ 165.1084, -36.0591, -121.1219, ..., 693.7413, 704.1188,\n", - " 714.4963],\n", - " [ 52.5199, -161.4629, -264.1466, ..., 560.4196, 570.7971,\n", - " 581.1746],\n", - " [ 108.7585, -87.1466, -611.3521, ..., 665.0784, 675.4559,\n", - " 685.8333],\n", - " ...,\n", - " [ 141.6855, -90.8539, -191.5150, ..., 620.3885, 630.7659,\n", - " 641.1434],\n", - " [ -97.1033, -232.9352, -222.5577, ..., 698.5034, 708.8810,\n", - " 719.2583],\n", - " [ 129.4216, -67.8324, -597.4383, ..., 678.9921, 689.3696,\n", - " 699.7472]], device='cuda:0', grad_fn=)" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "advantage" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[-1512.3618, -1300.8169, -1205.3765, ..., -743.8093, -743.8093,\n", - " -743.8093],\n", - " [-1502.4591, -1278.0989, -1165.0376, ..., -713.1734, -713.1734,\n", - " -713.1734],\n", - " [-1512.4761, -1306.1935, -771.6105, ..., -771.6105, -771.6105,\n", - " -771.6105],\n", - " ...,\n", - " [-1500.7911, -1257.8741, -1146.8356, ..., -682.3087, -682.3086,\n", - " -682.3087],\n", - " [-1571.7404, -1425.5309, -1425.5309, ..., -1070.1616, -1070.1617,\n", - " -1070.1616],\n", - " [-1510.2328, -1302.6012, -762.6179, ..., -762.6179, -762.6179,\n", - " -762.6179]], device='cuda:0', grad_fn=)" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "values" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "val_tmp = values.detach()" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [], - "source": [ - "bias = nn.Parameter(torch.tensor(0.0, device=device))\n", - "optim_tmp = torch.optim.Adam(params=[bias])" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [], - "source": [ - "# optim_tmp.param_groups[0]['betas'] = (0.99, 0.5)\n", - "optim_tmp.param_groups[0]['lr'] = 0.1" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "198affb45b4f40b1beb28eb813be0481", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/10000 [00:00)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "advantage" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor(200, device='cuda:1')" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "action_mask.sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[9.2983e-06, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " 2.3842e-07, 9.5367e-07, 2.8610e-06, 8.1062e-06, 1.3590e-05, 2.7775e-05,\n", - " 8.0701e-05, 2.9488e-04, 8.9534e-04, 2.2504e-03, 3.2974e-03, 6.3756e-03,\n", - " 1.6895e-02, 6.8286e-02, 2.1855e-01, 5.3514e-01, 8.1005e-01, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, 9.1202e+01],\n", - " [1.5736e-05, -0.0000e+00, -0.0000e+00, 1.1921e-07, 1.1921e-07, 1.1921e-07,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, 2.3842e-07, 3.5763e-07,\n", - " 7.1526e-07, 2.9802e-06, 1.1206e-05, 3.8861e-05, 8.2132e-05, 2.3815e-04,\n", - " 9.1130e-04, 3.5617e-03, 1.0967e-02, 3.0503e-02, 2.9737e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, 1.0006e+02]], device='cuda:1')" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "action_logits" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(tensor([-1099.6810, -1087.6995, -1076.0786, -1063.6698, -1054.7687, -1046.5447,\n", - " -1037.6260, -1027.8066, -1018.0566, -1007.5678, -995.8646, -985.5587,\n", - " -977.1706, -966.2009, -955.0208, -943.8681, -934.0468, -923.2490,\n", - " -912.6065, -899.9257, -890.4675, -879.4435, -870.5907, -859.1940,\n", - " -845.0573, -835.8955, -825.3179, -813.2614, -802.4627, -791.4663,\n", - " -781.6210, -771.6415, -761.0430, -750.6395, -741.1759, -729.8900,\n", - " -719.4247, -708.3924, -698.3824, -689.5949, -678.8000, -668.8644,\n", - " -657.7481, -646.4171, -636.8819, -628.0941, -618.0164, -608.4584,\n", - " -597.8752, -586.1464, -575.6812, -566.5031, -557.1078, -548.1906,\n", - " -537.7205, -525.3519, -514.1478, -503.8547, -494.7173, -481.8814,\n", - " -471.4543, -462.1197, -451.7022, -438.7026, -427.2851, -417.7741,\n", - " -409.7844, -398.9852, -388.6053, -377.3386, -367.8718, -357.7217,\n", - " -345.6424, -336.0607, -324.9157, -313.4325, -304.9853, -294.3703,\n", - " -284.6585, -274.1472, -264.1192, -253.2724, -243.0500, -233.2437,\n", - " -220.8721, -210.5932, -202.5967, -193.7442, -183.4849, -173.7296,\n", - " -160.4890, -148.3543, -139.0402, -131.2023, -124.4018, -115.6297,\n", - " -103.3717, -93.1214, -84.9352, -70.5845], device='cuda:1',\n", - " grad_fn=),\n", - " tensor([-1083.6101, -1073.2327, -1062.8552, -1052.4777, -1042.1002, -1031.7227,\n", - " -1021.3452, -1010.9678, -1000.5903, -990.2128, -979.8353, -969.4578,\n", - " -959.0803, -948.7029, -938.3254, -927.9479, -917.5704, -907.1929,\n", - " -896.8154, -886.4380, -876.0605, -865.6830, -855.3055, -844.9280,\n", - " -834.5505, -824.1731, -813.7956, -803.4181, -793.0406, -782.6631,\n", - " -772.2856, -761.9081, -751.5307, -741.1532, -730.7757, -720.3983,\n", - " -710.0208, -699.6432, -689.2657, -678.8883, -668.5107, -658.1333,\n", - " -647.7559, -637.3783, -627.0009, -616.6234, -606.2458, -595.8684,\n", - " -585.4909, -575.1134, -564.7360, -554.3585, -543.9810, -533.6035,\n", - " -523.2260, -512.8485, -502.4711, -492.0936, -481.7161, -471.3386,\n", - " -460.9611, -450.5836, -440.2061, -429.8287, -419.4512, -409.0737,\n", - " -398.6962, -388.3187, -377.9413, -367.5638, -357.1863, -346.8088,\n", - " -336.4313, -326.0538, -315.6764, -305.2989, -294.9214, -284.5439,\n", - " -274.1664, -263.7889, -253.4115, -243.0340, -232.6565, -222.2790,\n", - " -211.9015, -201.5240, -191.1465, -180.7691, -170.3916, -160.0141,\n", - " -149.6366, -139.2591, -128.8817, -118.5042, -108.1267, -97.7492,\n", - " -87.3717, -76.9942, -66.6168, -56.2393], device='cuda:1'))" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "values[0], qs[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[[ 42.5565, -7.8072, 29.3323, ..., -32.0589, -33.0385, -35.3182],\n", - " [ 23.7275, -6.8322, 26.1425, ..., -38.0214, -39.0071, -41.5004],\n", - " [ 27.3845, -11.7691, 26.7946, ..., -36.9438, -37.9392, -40.4390],\n", - " ...,\n", - " [ 8.6169, -19.3931, -13.6451, ..., -45.4590, -46.8009, -46.7714],\n", - " [ 9.2576, -19.5066, -13.6655, ..., -45.5242, -46.8551, -46.8182],\n", - " [ 10.3809, -21.2369, -14.6508, ..., -45.2848, -46.5306, -46.4914]],\n", - "\n", - " [[ 37.7327, -5.0951, 26.8845, ..., -32.0686, -33.0935, -35.2686],\n", - " [ 18.1861, -3.8062, 25.1262, ..., -38.5185, -39.5455, -41.9225],\n", - " [ 20.0888, -9.5134, 26.6477, ..., -37.9658, -38.9319, -41.2657],\n", - " ...,\n", - " [ 7.4155, -23.2394, -13.5891, ..., -48.8296, -50.1104, -50.0522],\n", - " [ 7.9775, -23.4906, -13.4194, ..., -48.8065, -50.0781, -50.0124],\n", - " [ 9.0720, -25.4228, -14.5521, ..., -48.0591, -49.2677, -49.1962]]],\n", - " device='cuda:1')" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "action_distributions" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } - ], - "source": [ - "plt.plot(advantage[0].cpu().detach())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { + ], + "metadata": { + "accelerator": "GPU", "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "eWtEiSe0RZqa", - "outputId": "e2b87961-8603-48e7-9a72-fecfd1ebec4d" - }, - "outputs": [], - "source": [ - "import random\n", - "\n", - "sample = random.choice(dataset)\n", - "print(repr(sample[\"text\"]))\n", - "\n", - "input_ids = tokenizer(\n", - " batch[\"text\"],\n", - " return_tensors=\"pt\",\n", - " padding=True,\n", - " truncation=True,\n", - ").input_ids.to(device)\n", - "\n", - "with torch.no_grad():\n", - " compressed = compressor.generate(input_ids=input_ids, generation_config=generation_config)\n", - " print(repr(tokenizer.decode(compressed.sequences[0])))\n", - " decompressed = decompressor.forward(input_ids=compressed.sequences, labels=input_ids)\n", - "\n", - "actions = compressed.sequences[..., 1:]\n", - "action_distributions = torch.stack(compressed.logits).transpose(0, 1)\n", - "values = compressor.forward(input_ids=input_ids, decoder_input_ids=compressed.sequences).value_predictions[..., :-1]\n", - "action_mask = actions != generation_config.pad_token_id\n", - "is_pad = actions == generation_config.pad_token_id\n", - "is_eos = actions == generation_config.eos_token_id\n", - "compressed_length = actions.size(-1) - is_pad.logical_or(is_eos).sum(dim=-1)\n", - "\n", - "losses = F.cross_entropy(\n", - " decompressed.logits.flatten(0, -2),\n", - " target=input_ids.flatten(),\n", - " ignore_index=0,\n", - " reduction=\"none\",\n", - ").view(input_ids.shape)\n", - "decompressor_loss = losses.mean()\n", - "\n", - "sequence_compression_loss = losses.detach().sum(dim=-1)\n", - "rewards = torch.where(\n", - " actions == generation_config.eos_token_id,\n", - " -sequence_compression_loss.unsqueeze(-1),\n", - " -TOKEN_COST,\n", - ") * action_mask\n", - "qs = rewards.flip(dims=[-1]).cumsum(dim=-1).flip(dims=[-1])\n", - "\n", - "advantage = (qs - values) * action_mask\n", - "critic_loss = (advantage * advantage).mean()\n", - "\n", - "action_logits = F.cross_entropy(\n", - " action_distributions.flatten(0, -2),\n", - " target=actions.flatten(),\n", - " ignore_index=0,\n", - " reduction=\"none\",\n", - ").view(actions.shape)\n", - "actor_loss = (action_logits * advantage.detach()).mean()\n", - "\n", - "print(f\"actor_loss={actor_loss}\")\n", - "print(f\"critic_loss={critic_loss}\")\n", - "print(f\"reward={rewards.sum(dim=-1).mean()}\")\n", - "print(f\"decompressor_loss={decompressor_loss}\")\n", - "print(f\"accuracy={(-losses.sum(dim=-1)).exp().mean()}\")\n", - "print(f\"compressed_size={compressed_length.float().mean()}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "actions[2][4] = 1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "actions" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "_61.tolist()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tokenizer.decode(compressed[0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" + "gpuType": "T4", + "provenance": [] }, - "id": "PYiKrtM2M03J", - "outputId": "ccf98ed3-034e-4363-e687-a08941c63c26" - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "FLVMLQIqQXCf", - "outputId": "01a7d128-c502-49f3-9556-fc948ee1f1ef" - }, - "outputs": [], - "source": [ - "action_logits" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "compressed[0, 1] = 4" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "values, indices = compression_output.logits[0, -1].sort(descending=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "indices" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "F.cross_entropy(\n", - " compression_output.logits[:, :-1, :].view(-1, num_ids),\n", - " target=compressed[:, 1:].flatten(),\n", - " ignore_index=0,\n", - " reduction='none',\n", - ") * advantage.flatten()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "e2T85EARPdwI", - "outputId": "bc324f8e-e86a-44c4-ab3b-a95c72b1cae3" - }, - "outputs": [], - "source": [ - "compression_output.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "len(action_logits)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "compressed" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sample[\"text\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "GtKo3PPGQf0J", - "outputId": "b0d3ea63-0a51-43ab-8fa2-e784c530ab45" - }, - "outputs": [], - "source": [ - "advantage" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "VXhr1x1tQhII", - "outputId": "213f761f-3ea8-4f9a-e857-b7e3ac69a167" - }, - "outputs": [], - "source": [ - "losses" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "fLAz9DwoN5np", - "outputId": "b3931440-5067-4716-99b2-9421357bd608" - }, - "outputs": [], - "source": [ - "reward" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "xIKY8_DwNa4l", - "outputId": "bf6eb955-9a2a-4b57-8db4-6d86a7e94675" - }, - "outputs": [], - "source": [ - "len_compressed" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "5zxqYdtCNLn7", - "outputId": "fb8f9db0-ea93-4a70-be64-dbced88bc02b" - }, - "outputs": [], - "source": [ - "advantage" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "aDveEsAPMsQt", - "outputId": "b2edf6d5-b6c8-44fa-99b8-13a4321b5afc" - }, - "outputs": [], - "source": [ - "actor_loss" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "SiJGEKx2MtlU", - "outputId": "ad04d0e9-3976-418b-a74f-9a480ce1b48b" - }, - "outputs": [], - "source": [ - "critic_loss" - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "gpuType": "T4", - "include_colab_link": true, - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.3" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "1a79263283254ba3a8e909ea3966e3ac": { - "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": "danger", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_460431870cd346caa15e02b9ffe0c63f", - "max": 855090, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_a75e62964f224e8ab32e9136c00f786e", - "value": 1702 - } - }, - "460431870cd346caa15e02b9ffe0c63f": { - "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 - } - }, - "579d2c20323a4e14aa0b2fcc125e9eb9": { - "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_e648ad71485b482992d3b5b699fdf90b", - "placeholder": "​", - "style": "IPY_MODEL_a7c81547e14040a28b9f3e8f469bc933", - "value": "actor_loss=-10.76, critic_loss=745.64, decompressor_loss=1.31:   0%" - } - }, - "584d3bd4ac484269bcf7da1d48c78448": { - "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 - } - }, - "6f20c7b7089045ffa62fda32898dd673": { - "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 - } - }, - "a0678d2428ff4198a9381b664dea08c4": { - "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_579d2c20323a4e14aa0b2fcc125e9eb9", - "IPY_MODEL_1a79263283254ba3a8e909ea3966e3ac", - "IPY_MODEL_e4dcb7f644ce4739b255809f9df0bf53" - ], - "layout": "IPY_MODEL_584d3bd4ac484269bcf7da1d48c78448" - } - }, - "a75e62964f224e8ab32e9136c00f786e": { - "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": "" - } - }, - "a7c81547e14040a28b9f3e8f469bc933": { - "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": "" - } - }, - "e4dcb7f644ce4739b255809f9df0bf53": { - "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_6f20c7b7089045ffa62fda32898dd673", - "placeholder": "​", - "style": "IPY_MODEL_e79223029d27455288e6daa49aabe4f3", - "value": " 1702/855090 [14:03<68:11:10,  3.48it/s]" - } - }, - "e648ad71485b482992d3b5b699fdf90b": { - "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 - } - }, - "e79223029d27455288e6daa49aabe4f3": { - "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": "" - } + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "2011e26c9fde4ada959624a30d935c6b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_55a34be2f9d14d00926062efafa2d7b0", + "IPY_MODEL_1925655871374689a1057b008f889052", + "IPY_MODEL_576e75f0473145168b5d166acb903643" + ], + "layout": "IPY_MODEL_532d04fe48164a00a8db36177c9ea152" + } + }, + "55a34be2f9d14d00926062efafa2d7b0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_ffbc13e493114403b6f88a67db932b15", + "placeholder": "​", + "style": "IPY_MODEL_a5c93a83de084232a6964a113aecb930", + "value": "Generating train split: " + } + }, + "1925655871374689a1057b008f889052": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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_232f001ecfd4414aba63125571389434", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_06df0c8f7b974e189272f1a91a5e28c5", + "value": 1 + } + }, + "576e75f0473145168b5d166acb903643": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_4b524028a9564a61a935d10083922c4c", + "placeholder": "​", + "style": "IPY_MODEL_1dc435da8c744a6282e8f7cfce8b4f2f", + "value": " 1128024/0 [00:02<00:00, 387057.12 examples/s]" + } + }, + "532d04fe48164a00a8db36177c9ea152": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "ffbc13e493114403b6f88a67db932b15": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "a5c93a83de084232a6964a113aecb930": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "232f001ecfd4414aba63125571389434": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "20px" + } + }, + "06df0c8f7b974e189272f1a91a5e28c5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "4b524028a9564a61a935d10083922c4c": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "1dc435da8c744a6282e8f7cfce8b4f2f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "3bf1e9a699f14d709b1f81ae98bf1215": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_0124c91212644264aaf84fe52e26e1dd", + "IPY_MODEL_61bc579763f6454cb6a36dc80b9068a0", + "IPY_MODEL_f056e5f5aec54fe8b3cfc121e1c24430" + ], + "layout": "IPY_MODEL_e6563f7242f3412a940b8761621eeac7" + } + }, + "0124c91212644264aaf84fe52e26e1dd": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_71f62c2eb9ad40e289c5bbcc0c95490d", + "placeholder": "​", + "style": "IPY_MODEL_bc1b308fdc1b4e80a6d04a70e75de34e", + "value": "Filter: 100%" + } + }, + "61bc579763f6454cb6a36dc80b9068a0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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_b0349099323b4b6280e3f253ab2aa033", + "max": 1128024, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_e486dae88741401a82d16c7aa84b57cf", + "value": 1128024 + } + }, + "f056e5f5aec54fe8b3cfc121e1c24430": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_654f5bb5e6e44858af000d593b701980", + "placeholder": "​", + "style": "IPY_MODEL_22d010b51fd34ddf82627507aed81676", + "value": " 1128024/1128024 [02:45<00:00, 6447.57 examples/s]" + } + }, + "e6563f7242f3412a940b8761621eeac7": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "71f62c2eb9ad40e289c5bbcc0c95490d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "bc1b308fdc1b4e80a6d04a70e75de34e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "b0349099323b4b6280e3f253ab2aa033": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "e486dae88741401a82d16c7aa84b57cf": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "654f5bb5e6e44858af000d593b701980": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "22d010b51fd34ddf82627507aed81676": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "259751f990bc4422b181c49619700334": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_a1b0cd399a2d44e6a5f3431ac861d2d2", + "IPY_MODEL_b9be4ff6d92f4112aa8078e96b3838db", + "IPY_MODEL_96e4d29108ca47ea9beb7f7b1a78d79a" + ], + "layout": "IPY_MODEL_8b32e1b93368443f981ec8187016c7f2" + } + }, + "a1b0cd399a2d44e6a5f3431ac861d2d2": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_065511e68dfb4053b4f0a70ef7a91ee3", + "placeholder": "​", + "style": "IPY_MODEL_b2826da9f9314c1cb966b54a7b6120fe", + "value": "compression_ratio=0.85, critic_loss=5318.31, actor_loss=0.26, decompressor_loss=1.43:   0%" + } + }, + "b9be4ff6d92f4112aa8078e96b3838db": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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": "danger", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7a87b54b7ed549bdb26958bf7f803af2", + "max": 107029, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_dad9de6f3118448eb665a9fcb544ff68", + "value": 2 + } + }, + "96e4d29108ca47ea9beb7f7b1a78d79a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_05f070c4b1294821b0874bf4ddc9d7d7", + "placeholder": "​", + "style": "IPY_MODEL_95b6d03796e84153a5e2a6904d640659", + "value": " 2/107029 [00:17<228:26:51,  7.68s/it]" + } + }, + "8b32e1b93368443f981ec8187016c7f2": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "065511e68dfb4053b4f0a70ef7a91ee3": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "b2826da9f9314c1cb966b54a7b6120fe": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "7a87b54b7ed549bdb26958bf7f803af2": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "dad9de6f3118448eb665a9fcb544ff68": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "05f070c4b1294821b0874bf4ddc9d7d7": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "95b6d03796e84153a5e2a6904d640659": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + } + } } - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From 3c3925ee9a4553d7b16e297b980d7c77e8318b40 Mon Sep 17 00:00:00 2001 From: axiom <20.mahdikh.0@gmail.com> Date: Sun, 27 Oct 2024 18:18:21 +0330 Subject: [PATCH 2/8] Add reward scaling Add playground --- Playground.ipynb | 7190 +++++++++++++++++++++++++++++++++++++------- TokenDethcod.ipynb | 447 +-- 2 files changed, 6234 insertions(+), 1403 deletions(-) diff --git a/Playground.ipynb b/Playground.ipynb index 24b7332..1400d71 100644 --- a/Playground.ipynb +++ b/Playground.ipynb @@ -1,1076 +1,6206 @@ { - "cells": [ + "cells": [ + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "vINNjRbwnFOa", - "outputId": "cb1c6076-ba6f-4e11-9b29-f16ceb46122b" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: transformers in /usr/local/lib/python3.10/dist-packages (4.38.2)\n", - "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers) (3.13.4)\n", - "Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.20.3)\n", - "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (1.25.2)\n", - "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers) (24.0)\n", - "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (6.0.1)\n", - "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (2023.12.25)\n", - "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers) (2.31.0)\n", - "Requirement already satisfied: tokenizers<0.19,>=0.14 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.15.2)\n", - "Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.4.2)\n", - "Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.66.2)\n", - "Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.19.3->transformers) (2023.6.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.19.3->transformers) (4.11.0)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.0.7)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2024.2.2)\n" - ] - } - ], - "source": [ - "%pip install transformers" - ] + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_1268750/2315452469.py:9: FutureWarning: 'H' is deprecated and will be removed in a future version, please use 'h' instead.\n", + " times = pd.date_range(start='2023-01-01', periods=n_points, freq='H')\n" + ] }, { - "cell_type": "markdown", - "metadata": { - "id": "3yDIICSsnFOb" - }, - "source": [ - "## Download Data" + "data": { + "text/html": [ + " \n", + " " ] + }, + "metadata": {}, + "output_type": "display_data" }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "QkZQTpFxnexd", - "outputId": "7b935131-d364-405b-d429-377e61772a56" - }, - "outputs": [ + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting requests_cache\n", - " Downloading requests_cache-1.2.0-py3-none-any.whl (61 kB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m61.4/61.4 kB\u001b[0m \u001b[31m1.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hRequirement already satisfied: attrs>=21.2 in /usr/local/lib/python3.10/dist-packages (from requests_cache) (23.2.0)\n", - "Collecting cattrs>=22.2 (from requests_cache)\n", - " Downloading cattrs-23.2.3-py3-none-any.whl (57 kB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.5/57.5 kB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hRequirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests_cache) (4.2.0)\n", - "Requirement already satisfied: requests>=2.22 in /usr/local/lib/python3.10/dist-packages (from requests_cache) (2.31.0)\n", - "Collecting url-normalize>=1.4 (from requests_cache)\n", - " Downloading url_normalize-1.4.3-py2.py3-none-any.whl (6.8 kB)\n", - "Requirement already satisfied: urllib3>=1.25.5 in /usr/local/lib/python3.10/dist-packages (from requests_cache) (2.0.7)\n", - "Requirement already satisfied: exceptiongroup>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from cattrs>=22.2->requests_cache) (1.2.0)\n", - "Requirement already satisfied: typing-extensions!=4.6.3,>=4.1.0 in /usr/local/lib/python3.10/dist-packages (from cattrs>=22.2->requests_cache) (4.11.0)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.22->requests_cache) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.22->requests_cache) (3.6)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.22->requests_cache) (2024.2.2)\n", - "Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from url-normalize>=1.4->requests_cache) (1.16.0)\n", - "Installing collected packages: url-normalize, cattrs, requests_cache\n", - "Successfully installed cattrs-23.2.3 requests_cache-1.2.0 url-normalize-1.4.3\n" + "colorbar": { + "title": { + "text": "Density" + } + }, + "colorscale": [ + [ + 0, + "#440154" + ], + [ + 0.1111111111111111, + "#482878" + ], + [ + 0.2222222222222222, + "#3e4989" + ], + [ + 0.3333333333333333, + "#31688e" + ], + [ + 0.4444444444444444, + "#26828e" + ], + [ + 0.5555555555555556, + "#1f9e89" + ], + [ + 0.6666666666666666, + "#35b779" + ], + [ + 0.7777777777777778, + "#6ece58" + ], + [ + 0.8888888888888888, + "#b5de2b" + ], + [ + 1, + "#fde725" ] - } - ], - "source": [ - "%pip install requests_cache" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" + ], + "nbinsx": 100, + "nbinsy": 50, + "type": "histogram2d", + "x": [ + "2023-01-01T00:00:00", + "2023-01-01T01:00:00", + "2023-01-01T02:00:00", + "2023-01-01T03:00:00", + "2023-01-01T04:00:00", + "2023-01-01T05:00:00", + "2023-01-01T06:00:00", + "2023-01-01T07:00:00", + "2023-01-01T08:00:00", + "2023-01-01T09:00:00", + "2023-01-01T10:00:00", + "2023-01-01T11:00:00", + "2023-01-01T12:00:00", + "2023-01-01T13:00:00", + "2023-01-01T14:00:00", + "2023-01-01T15:00:00", + "2023-01-01T16:00:00", + "2023-01-01T17:00:00", + "2023-01-01T18:00:00", + "2023-01-01T19:00:00", + "2023-01-01T20:00:00", + "2023-01-01T21:00:00", + "2023-01-01T22:00:00", + "2023-01-01T23:00:00", + "2023-01-02T00:00:00", + "2023-01-02T01:00:00", + "2023-01-02T02:00:00", + "2023-01-02T03:00:00", + "2023-01-02T04:00:00", + "2023-01-02T05:00:00", + "2023-01-02T06:00:00", + "2023-01-02T07:00:00", + "2023-01-02T08:00:00", + "2023-01-02T09:00:00", + "2023-01-02T10:00:00", + "2023-01-02T11:00:00", + "2023-01-02T12:00:00", + "2023-01-02T13:00:00", + "2023-01-02T14:00:00", + "2023-01-02T15:00:00", + "2023-01-02T16:00:00", + "2023-01-02T17:00:00", + "2023-01-02T18:00:00", + "2023-01-02T19:00:00", + "2023-01-02T20:00:00", + "2023-01-02T21:00:00", + "2023-01-02T22:00:00", + "2023-01-02T23:00:00", + "2023-01-03T00:00:00", + "2023-01-03T01:00:00", + "2023-01-03T02:00:00", + "2023-01-03T03:00:00", + "2023-01-03T04:00:00", + "2023-01-03T05:00:00", + "2023-01-03T06:00:00", + "2023-01-03T07:00:00", + "2023-01-03T08:00:00", + "2023-01-03T09:00:00", + "2023-01-03T10:00:00", + "2023-01-03T11:00:00", + "2023-01-03T12:00:00", + "2023-01-03T13:00:00", + "2023-01-03T14:00:00", + "2023-01-03T15:00:00", + "2023-01-03T16:00:00", + "2023-01-03T17:00:00", + "2023-01-03T18:00:00", + "2023-01-03T19:00:00", + "2023-01-03T20:00:00", + "2023-01-03T21:00:00", + "2023-01-03T22:00:00", + "2023-01-03T23:00:00", + "2023-01-04T00:00:00", + "2023-01-04T01:00:00", + "2023-01-04T02:00:00", + "2023-01-04T03:00:00", + "2023-01-04T04:00:00", + "2023-01-04T05:00:00", + "2023-01-04T06:00:00", + "2023-01-04T07:00:00", + "2023-01-04T08:00:00", + "2023-01-04T09:00:00", + "2023-01-04T10:00:00", + "2023-01-04T11:00:00", + "2023-01-04T12:00:00", + "2023-01-04T13:00:00", + "2023-01-04T14:00:00", + "2023-01-04T15:00:00", + "2023-01-04T16:00:00", + "2023-01-04T17:00:00", + "2023-01-04T18:00:00", + "2023-01-04T19:00:00", + "2023-01-04T20:00:00", + "2023-01-04T21:00:00", + "2023-01-04T22:00:00", + "2023-01-04T23:00:00", + "2023-01-05T00:00:00", + "2023-01-05T01:00:00", + "2023-01-05T02:00:00", + "2023-01-05T03:00:00", + "2023-01-05T04:00:00", + "2023-01-05T05:00:00", + "2023-01-05T06:00:00", + "2023-01-05T07:00:00", + "2023-01-05T08:00:00", + "2023-01-05T09:00:00", + "2023-01-05T10:00:00", + "2023-01-05T11:00:00", + "2023-01-05T12:00:00", + "2023-01-05T13:00:00", + "2023-01-05T14:00:00", + "2023-01-05T15:00:00", + "2023-01-05T16:00:00", + "2023-01-05T17:00:00", + "2023-01-05T18:00:00", + "2023-01-05T19:00:00", + "2023-01-05T20:00:00", + "2023-01-05T21:00:00", + "2023-01-05T22:00:00", + "2023-01-05T23:00:00", + "2023-01-06T00:00:00", + "2023-01-06T01:00:00", + "2023-01-06T02:00:00", + "2023-01-06T03:00:00", + "2023-01-06T04:00:00", + "2023-01-06T05:00:00", + "2023-01-06T06:00:00", + "2023-01-06T07:00:00", + "2023-01-06T08:00:00", + "2023-01-06T09:00:00", + "2023-01-06T10:00:00", + "2023-01-06T11:00:00", + "2023-01-06T12:00:00", + "2023-01-06T13:00:00", + "2023-01-06T14:00:00", + "2023-01-06T15:00:00", + "2023-01-06T16:00:00", + "2023-01-06T17:00:00", + "2023-01-06T18:00:00", + "2023-01-06T19:00:00", + "2023-01-06T20:00:00", + "2023-01-06T21:00:00", + "2023-01-06T22:00:00", + "2023-01-06T23:00:00", + "2023-01-07T00:00:00", + "2023-01-07T01:00:00", + "2023-01-07T02:00:00", + "2023-01-07T03:00:00", + "2023-01-07T04:00:00", + "2023-01-07T05:00:00", + "2023-01-07T06:00:00", + "2023-01-07T07:00:00", + "2023-01-07T08:00:00", + "2023-01-07T09:00:00", + "2023-01-07T10:00:00", + "2023-01-07T11:00:00", + "2023-01-07T12:00:00", + "2023-01-07T13:00:00", + "2023-01-07T14:00:00", + "2023-01-07T15:00:00", + "2023-01-07T16:00:00", + "2023-01-07T17:00:00", + "2023-01-07T18:00:00", + "2023-01-07T19:00:00", + "2023-01-07T20:00:00", + "2023-01-07T21:00:00", + "2023-01-07T22:00:00", + "2023-01-07T23:00:00", + "2023-01-08T00:00:00", + "2023-01-08T01:00:00", + "2023-01-08T02:00:00", + "2023-01-08T03:00:00", + "2023-01-08T04:00:00", + "2023-01-08T05:00:00", + "2023-01-08T06:00:00", + "2023-01-08T07:00:00", + "2023-01-08T08:00:00", + "2023-01-08T09:00:00", + "2023-01-08T10:00:00", + "2023-01-08T11:00:00", + "2023-01-08T12:00:00", + "2023-01-08T13:00:00", + "2023-01-08T14:00:00", + "2023-01-08T15:00:00", + "2023-01-08T16:00:00", + "2023-01-08T17:00:00", + "2023-01-08T18:00:00", + "2023-01-08T19:00:00", + "2023-01-08T20:00:00", + "2023-01-08T21:00:00", + "2023-01-08T22:00:00", + "2023-01-08T23:00:00", + "2023-01-09T00:00:00", + "2023-01-09T01:00:00", + "2023-01-09T02:00:00", + "2023-01-09T03:00:00", + "2023-01-09T04:00:00", + "2023-01-09T05:00:00", + "2023-01-09T06:00:00", + "2023-01-09T07:00:00", + "2023-01-09T08:00:00", + "2023-01-09T09:00:00", + "2023-01-09T10:00:00", + "2023-01-09T11:00:00", + "2023-01-09T12:00:00", + "2023-01-09T13:00:00", + "2023-01-09T14:00:00", + "2023-01-09T15:00:00", + "2023-01-09T16:00:00", + "2023-01-09T17:00:00", + "2023-01-09T18:00:00", + "2023-01-09T19:00:00", + "2023-01-09T20:00:00", + "2023-01-09T21:00:00", + "2023-01-09T22:00:00", + "2023-01-09T23:00:00", + "2023-01-10T00:00:00", + "2023-01-10T01:00:00", + "2023-01-10T02:00:00", + "2023-01-10T03:00:00", + "2023-01-10T04:00:00", + "2023-01-10T05:00:00", + "2023-01-10T06:00:00", + "2023-01-10T07:00:00", + "2023-01-10T08:00:00", + "2023-01-10T09:00:00", + "2023-01-10T10:00:00", + "2023-01-10T11:00:00", + "2023-01-10T12:00:00", + "2023-01-10T13:00:00", + "2023-01-10T14:00:00", + "2023-01-10T15:00:00", + "2023-01-10T16:00:00", + "2023-01-10T17:00:00", + "2023-01-10T18:00:00", + "2023-01-10T19:00:00", + "2023-01-10T20:00:00", + "2023-01-10T21:00:00", + "2023-01-10T22:00:00", + "2023-01-10T23:00:00", + "2023-01-11T00:00:00", + "2023-01-11T01:00:00", + "2023-01-11T02:00:00", + "2023-01-11T03:00:00", + "2023-01-11T04:00:00", + "2023-01-11T05:00:00", + "2023-01-11T06:00:00", + "2023-01-11T07:00:00", + "2023-01-11T08:00:00", + "2023-01-11T09:00:00", + "2023-01-11T10:00:00", + "2023-01-11T11:00:00", + "2023-01-11T12:00:00", + "2023-01-11T13:00:00", + "2023-01-11T14:00:00", + "2023-01-11T15:00:00", + "2023-01-11T16:00:00", + "2023-01-11T17:00:00", + "2023-01-11T18:00:00", + "2023-01-11T19:00:00", + "2023-01-11T20:00:00", + "2023-01-11T21:00:00", + "2023-01-11T22:00:00", + "2023-01-11T23:00:00", + "2023-01-12T00:00:00", + "2023-01-12T01:00:00", + "2023-01-12T02:00:00", + "2023-01-12T03:00:00", + "2023-01-12T04:00:00", + "2023-01-12T05:00:00", + "2023-01-12T06:00:00", + "2023-01-12T07:00:00", + "2023-01-12T08:00:00", + "2023-01-12T09:00:00", + "2023-01-12T10:00:00", + "2023-01-12T11:00:00", + "2023-01-12T12:00:00", + "2023-01-12T13:00:00", + "2023-01-12T14:00:00", + "2023-01-12T15:00:00", + "2023-01-12T16:00:00", + "2023-01-12T17:00:00", + "2023-01-12T18:00:00", + "2023-01-12T19:00:00", + "2023-01-12T20:00:00", + "2023-01-12T21:00:00", + "2023-01-12T22:00:00", + "2023-01-12T23:00:00", + "2023-01-13T00:00:00", + "2023-01-13T01:00:00", + "2023-01-13T02:00:00", + "2023-01-13T03:00:00", + "2023-01-13T04:00:00", + "2023-01-13T05:00:00", + "2023-01-13T06:00:00", + "2023-01-13T07:00:00", + "2023-01-13T08:00:00", + "2023-01-13T09:00:00", + "2023-01-13T10:00:00", + "2023-01-13T11:00:00", + "2023-01-13T12:00:00", + "2023-01-13T13:00:00", + "2023-01-13T14:00:00", + "2023-01-13T15:00:00", + "2023-01-13T16:00:00", + "2023-01-13T17:00:00", + "2023-01-13T18:00:00", + "2023-01-13T19:00:00", + "2023-01-13T20:00:00", + "2023-01-13T21:00:00", + "2023-01-13T22:00:00", + "2023-01-13T23:00:00", + "2023-01-14T00:00:00", + "2023-01-14T01:00:00", + "2023-01-14T02:00:00", + "2023-01-14T03:00:00", + "2023-01-14T04:00:00", + "2023-01-14T05:00:00", + "2023-01-14T06:00:00", + "2023-01-14T07:00:00", + "2023-01-14T08:00:00", + "2023-01-14T09:00:00", + "2023-01-14T10:00:00", + "2023-01-14T11:00:00", + "2023-01-14T12:00:00", + "2023-01-14T13:00:00", + "2023-01-14T14:00:00", + "2023-01-14T15:00:00", + "2023-01-14T16:00:00", + "2023-01-14T17:00:00", + "2023-01-14T18:00:00", + "2023-01-14T19:00:00", + "2023-01-14T20:00:00", + "2023-01-14T21:00:00", + "2023-01-14T22:00:00", + "2023-01-14T23:00:00", + "2023-01-15T00:00:00", + "2023-01-15T01:00:00", + "2023-01-15T02:00:00", + "2023-01-15T03:00:00", + "2023-01-15T04:00:00", + "2023-01-15T05:00:00", + "2023-01-15T06:00:00", + "2023-01-15T07:00:00", + "2023-01-15T08:00:00", + "2023-01-15T09:00:00", + "2023-01-15T10:00:00", + "2023-01-15T11:00:00", + "2023-01-15T12:00:00", + "2023-01-15T13:00:00", + "2023-01-15T14:00:00", + "2023-01-15T15:00:00", + "2023-01-15T16:00:00", + "2023-01-15T17:00:00", + "2023-01-15T18:00:00", + "2023-01-15T19:00:00", + "2023-01-15T20:00:00", + "2023-01-15T21:00:00", + "2023-01-15T22:00:00", + "2023-01-15T23:00:00", + "2023-01-16T00:00:00", + "2023-01-16T01:00:00", + "2023-01-16T02:00:00", + "2023-01-16T03:00:00", + "2023-01-16T04:00:00", + "2023-01-16T05:00:00", + "2023-01-16T06:00:00", + "2023-01-16T07:00:00", + "2023-01-16T08:00:00", + "2023-01-16T09:00:00", + "2023-01-16T10:00:00", + "2023-01-16T11:00:00", + "2023-01-16T12:00:00", + "2023-01-16T13:00:00", + "2023-01-16T14:00:00", + "2023-01-16T15:00:00", + "2023-01-16T16:00:00", + "2023-01-16T17:00:00", + "2023-01-16T18:00:00", + "2023-01-16T19:00:00", + "2023-01-16T20:00:00", + "2023-01-16T21:00:00", + "2023-01-16T22:00:00", + "2023-01-16T23:00:00", + "2023-01-17T00:00:00", + "2023-01-17T01:00:00", + "2023-01-17T02:00:00", + "2023-01-17T03:00:00", + "2023-01-17T04:00:00", + "2023-01-17T05:00:00", + "2023-01-17T06:00:00", + "2023-01-17T07:00:00", + "2023-01-17T08:00:00", + "2023-01-17T09:00:00", + "2023-01-17T10:00:00", + "2023-01-17T11:00:00", + "2023-01-17T12:00:00", + "2023-01-17T13:00:00", + "2023-01-17T14:00:00", + "2023-01-17T15:00:00", + "2023-01-17T16:00:00", + "2023-01-17T17:00:00", + "2023-01-17T18:00:00", + "2023-01-17T19:00:00", + "2023-01-17T20:00:00", + "2023-01-17T21:00:00", + "2023-01-17T22:00:00", + "2023-01-17T23:00:00", + "2023-01-18T00:00:00", + "2023-01-18T01:00:00", + "2023-01-18T02:00:00", + "2023-01-18T03:00:00", + "2023-01-18T04:00:00", + "2023-01-18T05:00:00", + "2023-01-18T06:00:00", + "2023-01-18T07:00:00", + "2023-01-18T08:00:00", + "2023-01-18T09:00:00", + "2023-01-18T10:00:00", + "2023-01-18T11:00:00", + "2023-01-18T12:00:00", + "2023-01-18T13:00:00", + "2023-01-18T14:00:00", + "2023-01-18T15:00:00", + "2023-01-18T16:00:00", + "2023-01-18T17:00:00", + "2023-01-18T18:00:00", + "2023-01-18T19:00:00", + "2023-01-18T20:00:00", + "2023-01-18T21:00:00", + "2023-01-18T22:00:00", + "2023-01-18T23:00:00", + "2023-01-19T00:00:00", + "2023-01-19T01:00:00", + "2023-01-19T02:00:00", + "2023-01-19T03:00:00", + "2023-01-19T04:00:00", + "2023-01-19T05:00:00", + "2023-01-19T06:00:00", + "2023-01-19T07:00:00", + "2023-01-19T08:00:00", + "2023-01-19T09:00:00", + "2023-01-19T10:00:00", + "2023-01-19T11:00:00", + "2023-01-19T12:00:00", + "2023-01-19T13:00:00", + "2023-01-19T14:00:00", + "2023-01-19T15:00:00", + "2023-01-19T16:00:00", + "2023-01-19T17:00:00", + "2023-01-19T18:00:00", + "2023-01-19T19:00:00", + "2023-01-19T20:00:00", + "2023-01-19T21:00:00", + "2023-01-19T22:00:00", + "2023-01-19T23:00:00", + "2023-01-20T00:00:00", + "2023-01-20T01:00:00", + "2023-01-20T02:00:00", + "2023-01-20T03:00:00", + "2023-01-20T04:00:00", + "2023-01-20T05:00:00", + "2023-01-20T06:00:00", + "2023-01-20T07:00:00", + "2023-01-20T08:00:00", + "2023-01-20T09:00:00", + "2023-01-20T10:00:00", + "2023-01-20T11:00:00", + "2023-01-20T12:00:00", + "2023-01-20T13:00:00", + "2023-01-20T14:00:00", + "2023-01-20T15:00:00", + "2023-01-20T16:00:00", + "2023-01-20T17:00:00", + "2023-01-20T18:00:00", + "2023-01-20T19:00:00", + "2023-01-20T20:00:00", + "2023-01-20T21:00:00", + "2023-01-20T22:00:00", + "2023-01-20T23:00:00", + "2023-01-21T00:00:00", + "2023-01-21T01:00:00", + "2023-01-21T02:00:00", + "2023-01-21T03:00:00", + "2023-01-21T04:00:00", + "2023-01-21T05:00:00", + "2023-01-21T06:00:00", + "2023-01-21T07:00:00", + "2023-01-21T08:00:00", + "2023-01-21T09:00:00", + "2023-01-21T10:00:00", + "2023-01-21T11:00:00", + "2023-01-21T12:00:00", + "2023-01-21T13:00:00", + "2023-01-21T14:00:00", + "2023-01-21T15:00:00", + "2023-01-21T16:00:00", + "2023-01-21T17:00:00", + "2023-01-21T18:00:00", + "2023-01-21T19:00:00", + "2023-01-21T20:00:00", + "2023-01-21T21:00:00", + "2023-01-21T22:00:00", + "2023-01-21T23:00:00", + "2023-01-22T00:00:00", + "2023-01-22T01:00:00", + "2023-01-22T02:00:00", + "2023-01-22T03:00:00", + "2023-01-22T04:00:00", + "2023-01-22T05:00:00", + "2023-01-22T06:00:00", + "2023-01-22T07:00:00", + "2023-01-22T08:00:00", + "2023-01-22T09:00:00", + "2023-01-22T10:00:00", + "2023-01-22T11:00:00", + "2023-01-22T12:00:00", + "2023-01-22T13:00:00", + "2023-01-22T14:00:00", + "2023-01-22T15:00:00", + "2023-01-22T16:00:00", + "2023-01-22T17:00:00", + "2023-01-22T18:00:00", + "2023-01-22T19:00:00", + "2023-01-22T20:00:00", + "2023-01-22T21:00:00", + "2023-01-22T22:00:00", + "2023-01-22T23:00:00", + "2023-01-23T00:00:00", + "2023-01-23T01:00:00", + "2023-01-23T02:00:00", + "2023-01-23T03:00:00", + "2023-01-23T04:00:00", + "2023-01-23T05:00:00", + "2023-01-23T06:00:00", + "2023-01-23T07:00:00", + "2023-01-23T08:00:00", + "2023-01-23T09:00:00", + "2023-01-23T10:00:00", + "2023-01-23T11:00:00", + "2023-01-23T12:00:00", + "2023-01-23T13:00:00", + "2023-01-23T14:00:00", + "2023-01-23T15:00:00", + "2023-01-23T16:00:00", + "2023-01-23T17:00:00", + "2023-01-23T18:00:00", + "2023-01-23T19:00:00", + "2023-01-23T20:00:00", + "2023-01-23T21:00:00", + "2023-01-23T22:00:00", + "2023-01-23T23:00:00", + "2023-01-24T00:00:00", + "2023-01-24T01:00:00", + "2023-01-24T02:00:00", + "2023-01-24T03:00:00", + "2023-01-24T04:00:00", + "2023-01-24T05:00:00", + "2023-01-24T06:00:00", + "2023-01-24T07:00:00", + "2023-01-24T08:00:00", + "2023-01-24T09:00:00", + "2023-01-24T10:00:00", + "2023-01-24T11:00:00", + "2023-01-24T12:00:00", + "2023-01-24T13:00:00", + "2023-01-24T14:00:00", + "2023-01-24T15:00:00", + "2023-01-24T16:00:00", + "2023-01-24T17:00:00", + "2023-01-24T18:00:00", + "2023-01-24T19:00:00", + "2023-01-24T20:00:00", + "2023-01-24T21:00:00", + "2023-01-24T22:00:00", + "2023-01-24T23:00:00", + "2023-01-25T00:00:00", + "2023-01-25T01:00:00", + "2023-01-25T02:00:00", + "2023-01-25T03:00:00", + "2023-01-25T04:00:00", + "2023-01-25T05:00:00", + "2023-01-25T06:00:00", + "2023-01-25T07:00:00", + "2023-01-25T08:00:00", + "2023-01-25T09:00:00", + "2023-01-25T10:00:00", + "2023-01-25T11:00:00", + "2023-01-25T12:00:00", + "2023-01-25T13:00:00", + "2023-01-25T14:00:00", + "2023-01-25T15:00:00", + "2023-01-25T16:00:00", + "2023-01-25T17:00:00", + "2023-01-25T18:00:00", + "2023-01-25T19:00:00", + "2023-01-25T20:00:00", + "2023-01-25T21:00:00", + "2023-01-25T22:00:00", + "2023-01-25T23:00:00", + "2023-01-26T00:00:00", + "2023-01-26T01:00:00", + "2023-01-26T02:00:00", + "2023-01-26T03:00:00", + "2023-01-26T04:00:00", + "2023-01-26T05:00:00", + "2023-01-26T06:00:00", + "2023-01-26T07:00:00", + "2023-01-26T08:00:00", + "2023-01-26T09:00:00", + "2023-01-26T10:00:00", + "2023-01-26T11:00:00", + "2023-01-26T12:00:00", + "2023-01-26T13:00:00", + "2023-01-26T14:00:00", + "2023-01-26T15:00:00", + "2023-01-26T16:00:00", + "2023-01-26T17:00:00", + "2023-01-26T18:00:00", + "2023-01-26T19:00:00", + "2023-01-26T20:00:00", + "2023-01-26T21:00:00", + "2023-01-26T22:00:00", + "2023-01-26T23:00:00", + "2023-01-27T00:00:00", + "2023-01-27T01:00:00", + "2023-01-27T02:00:00", + "2023-01-27T03:00:00", + "2023-01-27T04:00:00", + "2023-01-27T05:00:00", + "2023-01-27T06:00:00", + "2023-01-27T07:00:00", + "2023-01-27T08:00:00", + "2023-01-27T09:00:00", + "2023-01-27T10:00:00", + "2023-01-27T11:00:00", + "2023-01-27T12:00:00", + "2023-01-27T13:00:00", + "2023-01-27T14:00:00", + "2023-01-27T15:00:00", + "2023-01-27T16:00:00", + "2023-01-27T17:00:00", + "2023-01-27T18:00:00", + "2023-01-27T19:00:00", + "2023-01-27T20:00:00", + "2023-01-27T21:00:00", + "2023-01-27T22:00:00", + "2023-01-27T23:00:00", + "2023-01-28T00:00:00", + "2023-01-28T01:00:00", + "2023-01-28T02:00:00", + "2023-01-28T03:00:00", + "2023-01-28T04:00:00", + "2023-01-28T05:00:00", + "2023-01-28T06:00:00", + "2023-01-28T07:00:00", + "2023-01-28T08:00:00", + "2023-01-28T09:00:00", + "2023-01-28T10:00:00", + "2023-01-28T11:00:00", + "2023-01-28T12:00:00", + "2023-01-28T13:00:00", + "2023-01-28T14:00:00", + "2023-01-28T15:00:00", + "2023-01-28T16:00:00", + "2023-01-28T17:00:00", + "2023-01-28T18:00:00", + "2023-01-28T19:00:00", + "2023-01-28T20:00:00", + "2023-01-28T21:00:00", + "2023-01-28T22:00:00", + "2023-01-28T23:00:00", + "2023-01-29T00:00:00", + "2023-01-29T01:00:00", + "2023-01-29T02:00:00", + "2023-01-29T03:00:00", + "2023-01-29T04:00:00", + "2023-01-29T05:00:00", + "2023-01-29T06:00:00", + "2023-01-29T07:00:00", + "2023-01-29T08:00:00", + "2023-01-29T09:00:00", + "2023-01-29T10:00:00", + "2023-01-29T11:00:00", + "2023-01-29T12:00:00", + "2023-01-29T13:00:00", + "2023-01-29T14:00:00", + "2023-01-29T15:00:00", + "2023-01-29T16:00:00", + "2023-01-29T17:00:00", + "2023-01-29T18:00:00", + "2023-01-29T19:00:00", + "2023-01-29T20:00:00", + "2023-01-29T21:00:00", + "2023-01-29T22:00:00", + "2023-01-29T23:00:00", + "2023-01-30T00:00:00", + "2023-01-30T01:00:00", + "2023-01-30T02:00:00", + "2023-01-30T03:00:00", + "2023-01-30T04:00:00", + "2023-01-30T05:00:00", + "2023-01-30T06:00:00", + "2023-01-30T07:00:00", + "2023-01-30T08:00:00", + "2023-01-30T09:00:00", + "2023-01-30T10:00:00", + "2023-01-30T11:00:00", + "2023-01-30T12:00:00", + "2023-01-30T13:00:00", + "2023-01-30T14:00:00", + "2023-01-30T15:00:00", + "2023-01-30T16:00:00", + "2023-01-30T17:00:00", + "2023-01-30T18:00:00", + "2023-01-30T19:00:00", + "2023-01-30T20:00:00", + "2023-01-30T21:00:00", + "2023-01-30T22:00:00", + "2023-01-30T23:00:00", + "2023-01-31T00:00:00", + "2023-01-31T01:00:00", + "2023-01-31T02:00:00", + "2023-01-31T03:00:00", + "2023-01-31T04:00:00", + "2023-01-31T05:00:00", + "2023-01-31T06:00:00", + "2023-01-31T07:00:00", + "2023-01-31T08:00:00", + "2023-01-31T09:00:00", + "2023-01-31T10:00:00", + "2023-01-31T11:00:00", + "2023-01-31T12:00:00", + "2023-01-31T13:00:00", + "2023-01-31T14:00:00", + "2023-01-31T15:00:00", + "2023-01-31T16:00:00", + "2023-01-31T17:00:00", + "2023-01-31T18:00:00", + "2023-01-31T19:00:00", + "2023-01-31T20:00:00", + "2023-01-31T21:00:00", + "2023-01-31T22:00:00", + "2023-01-31T23:00:00", + "2023-02-01T00:00:00", + "2023-02-01T01:00:00", + "2023-02-01T02:00:00", + "2023-02-01T03:00:00", + "2023-02-01T04:00:00", + "2023-02-01T05:00:00", + "2023-02-01T06:00:00", + "2023-02-01T07:00:00", + "2023-02-01T08:00:00", + "2023-02-01T09:00:00", + "2023-02-01T10:00:00", + "2023-02-01T11:00:00", + "2023-02-01T12:00:00", + "2023-02-01T13:00:00", + "2023-02-01T14:00:00", + "2023-02-01T15:00:00", + "2023-02-01T16:00:00", + "2023-02-01T17:00:00", + "2023-02-01T18:00:00", + "2023-02-01T19:00:00", + "2023-02-01T20:00:00", + "2023-02-01T21:00:00", + "2023-02-01T22:00:00", + "2023-02-01T23:00:00", + "2023-02-02T00:00:00", + "2023-02-02T01:00:00", + "2023-02-02T02:00:00", + "2023-02-02T03:00:00", + "2023-02-02T04:00:00", + "2023-02-02T05:00:00", + "2023-02-02T06:00:00", + "2023-02-02T07:00:00", + "2023-02-02T08:00:00", + "2023-02-02T09:00:00", + "2023-02-02T10:00:00", + "2023-02-02T11:00:00", + "2023-02-02T12:00:00", + "2023-02-02T13:00:00", + "2023-02-02T14:00:00", + "2023-02-02T15:00:00", + "2023-02-02T16:00:00", + "2023-02-02T17:00:00", + "2023-02-02T18:00:00", + "2023-02-02T19:00:00", + "2023-02-02T20:00:00", + "2023-02-02T21:00:00", + "2023-02-02T22:00:00", + "2023-02-02T23:00:00", + "2023-02-03T00:00:00", + "2023-02-03T01:00:00", + "2023-02-03T02:00:00", + "2023-02-03T03:00:00", + "2023-02-03T04:00:00", + "2023-02-03T05:00:00", + "2023-02-03T06:00:00", + "2023-02-03T07:00:00", + "2023-02-03T08:00:00", + "2023-02-03T09:00:00", + "2023-02-03T10:00:00", + "2023-02-03T11:00:00", + "2023-02-03T12:00:00", + "2023-02-03T13:00:00", + "2023-02-03T14:00:00", + "2023-02-03T15:00:00", + "2023-02-03T16:00:00", + "2023-02-03T17:00:00", + "2023-02-03T18:00:00", + "2023-02-03T19:00:00", + "2023-02-03T20:00:00", + "2023-02-03T21:00:00", + "2023-02-03T22:00:00", + "2023-02-03T23:00:00", + "2023-02-04T00:00:00", + "2023-02-04T01:00:00", + "2023-02-04T02:00:00", + "2023-02-04T03:00:00", + "2023-02-04T04:00:00", + "2023-02-04T05:00:00", + "2023-02-04T06:00:00", + "2023-02-04T07:00:00", + "2023-02-04T08:00:00", + "2023-02-04T09:00:00", + "2023-02-04T10:00:00", + "2023-02-04T11:00:00", + "2023-02-04T12:00:00", + "2023-02-04T13:00:00", + "2023-02-04T14:00:00", + "2023-02-04T15:00:00", + "2023-02-04T16:00:00", + "2023-02-04T17:00:00", + "2023-02-04T18:00:00", + "2023-02-04T19:00:00", + "2023-02-04T20:00:00", + "2023-02-04T21:00:00", + "2023-02-04T22:00:00", + "2023-02-04T23:00:00", + "2023-02-05T00:00:00", + "2023-02-05T01:00:00", + "2023-02-05T02:00:00", + "2023-02-05T03:00:00", + "2023-02-05T04:00:00", + "2023-02-05T05:00:00", + "2023-02-05T06:00:00", + "2023-02-05T07:00:00", + "2023-02-05T08:00:00", + "2023-02-05T09:00:00", + "2023-02-05T10:00:00", + "2023-02-05T11:00:00", + "2023-02-05T12:00:00", + "2023-02-05T13:00:00", + "2023-02-05T14:00:00", + "2023-02-05T15:00:00", + "2023-02-05T16:00:00", + "2023-02-05T17:00:00", + "2023-02-05T18:00:00", + "2023-02-05T19:00:00", + "2023-02-05T20:00:00", + "2023-02-05T21:00:00", + "2023-02-05T22:00:00", + "2023-02-05T23:00:00", + "2023-02-06T00:00:00", + "2023-02-06T01:00:00", + "2023-02-06T02:00:00", + "2023-02-06T03:00:00", + "2023-02-06T04:00:00", + "2023-02-06T05:00:00", + "2023-02-06T06:00:00", + "2023-02-06T07:00:00", + "2023-02-06T08:00:00", + "2023-02-06T09:00:00", + "2023-02-06T10:00:00", + "2023-02-06T11:00:00", + "2023-02-06T12:00:00", + "2023-02-06T13:00:00", + "2023-02-06T14:00:00", + "2023-02-06T15:00:00", + "2023-02-06T16:00:00", + "2023-02-06T17:00:00", + "2023-02-06T18:00:00", + "2023-02-06T19:00:00", + "2023-02-06T20:00:00", + "2023-02-06T21:00:00", + "2023-02-06T22:00:00", + "2023-02-06T23:00:00", + "2023-02-07T00:00:00", + "2023-02-07T01:00:00", + "2023-02-07T02:00:00", + "2023-02-07T03:00:00", + "2023-02-07T04:00:00", + "2023-02-07T05:00:00", + "2023-02-07T06:00:00", + "2023-02-07T07:00:00", + "2023-02-07T08:00:00", + "2023-02-07T09:00:00", + "2023-02-07T10:00:00", + "2023-02-07T11:00:00", + "2023-02-07T12:00:00", + "2023-02-07T13:00:00", + "2023-02-07T14:00:00", + "2023-02-07T15:00:00", + "2023-02-07T16:00:00", + "2023-02-07T17:00:00", + "2023-02-07T18:00:00", + "2023-02-07T19:00:00", + "2023-02-07T20:00:00", + "2023-02-07T21:00:00", + "2023-02-07T22:00:00", + "2023-02-07T23:00:00", + "2023-02-08T00:00:00", + "2023-02-08T01:00:00", + "2023-02-08T02:00:00", + "2023-02-08T03:00:00", + "2023-02-08T04:00:00", + "2023-02-08T05:00:00", + "2023-02-08T06:00:00", + "2023-02-08T07:00:00", + "2023-02-08T08:00:00", + "2023-02-08T09:00:00", + "2023-02-08T10:00:00", + "2023-02-08T11:00:00", + "2023-02-08T12:00:00", + "2023-02-08T13:00:00", + "2023-02-08T14:00:00", + "2023-02-08T15:00:00", + "2023-02-08T16:00:00", + "2023-02-08T17:00:00", + "2023-02-08T18:00:00", + "2023-02-08T19:00:00", + "2023-02-08T20:00:00", + "2023-02-08T21:00:00", + "2023-02-08T22:00:00", + "2023-02-08T23:00:00", + "2023-02-09T00:00:00", + "2023-02-09T01:00:00", + "2023-02-09T02:00:00", + "2023-02-09T03:00:00", + "2023-02-09T04:00:00", + "2023-02-09T05:00:00", + "2023-02-09T06:00:00", + "2023-02-09T07:00:00", + "2023-02-09T08:00:00", + "2023-02-09T09:00:00", + "2023-02-09T10:00:00", + "2023-02-09T11:00:00", + "2023-02-09T12:00:00", + "2023-02-09T13:00:00", + "2023-02-09T14:00:00", + "2023-02-09T15:00:00", + "2023-02-09T16:00:00", + "2023-02-09T17:00:00", + "2023-02-09T18:00:00", + "2023-02-09T19:00:00", + "2023-02-09T20:00:00", + "2023-02-09T21:00:00", + "2023-02-09T22:00:00", + "2023-02-09T23:00:00", + "2023-02-10T00:00:00", + "2023-02-10T01:00:00", + "2023-02-10T02:00:00", + "2023-02-10T03:00:00", + "2023-02-10T04:00:00", + "2023-02-10T05:00:00", + "2023-02-10T06:00:00", + "2023-02-10T07:00:00", + "2023-02-10T08:00:00", + "2023-02-10T09:00:00", + "2023-02-10T10:00:00", + "2023-02-10T11:00:00", + "2023-02-10T12:00:00", + "2023-02-10T13:00:00", + "2023-02-10T14:00:00", + "2023-02-10T15:00:00", + "2023-02-10T16:00:00", + "2023-02-10T17:00:00", + "2023-02-10T18:00:00", + "2023-02-10T19:00:00", + "2023-02-10T20:00:00", + "2023-02-10T21:00:00", + "2023-02-10T22:00:00", + "2023-02-10T23:00:00", + "2023-02-11T00:00:00", + "2023-02-11T01:00:00", + "2023-02-11T02:00:00", + "2023-02-11T03:00:00", + "2023-02-11T04:00:00", + "2023-02-11T05:00:00", + "2023-02-11T06:00:00", + "2023-02-11T07:00:00", + "2023-02-11T08:00:00", + "2023-02-11T09:00:00", + "2023-02-11T10:00:00", + "2023-02-11T11:00:00", + "2023-02-11T12:00:00", + "2023-02-11T13:00:00", + "2023-02-11T14:00:00", + "2023-02-11T15:00:00" + ], + "xaxis": "x", + "y": [ + -0.6996777182930012, + -0.4623168414563844, + -0.02981518496008706, + 0.32346838885278695, + -0.34911165680679496, + -0.1967426927108748, + -0.44759661001386597, + -0.3175859008409847, + -0.5247763576596676, + 0.267617605780284, + -0.6586970328171629, + -0.09879980234619984, + -1.0376304363126327, + 0.3445939090447838, + -0.8679819015826247, + -0.0989553917313239, + 0.32570900180722406, + 0.24194291702716078, + 0.1601736540971601, + -0.21208297320095815, + -0.26141774401774986, + 0.28685000196928956, + 0.0121772961304914, + -1.0711351793059318, + -0.8637715850503557, + -0.21816183483701607, + -0.01900173908410019, + -0.060015663359130667, + -0.3067589863652083, + 0.5113962825992027, + 0.12868826871167255, + 0.8342920369387947, + -0.19961156130263963, + -0.3235979698513705, + 0.241593231149687, + -0.7869933816450164, + 0.6128828315011706, + 0.73218744010491, + -0.11222590927998599, + -0.5235491513060772, + -0.8419638457289342, + 0.22944213143447, + -0.5393404167156478, + 0.019254234750353608, + 0.0863136499704098, + -0.4418299687433362, + -0.3261614392067098, + 0.7881960784921247, + -0.7382701748629479, + -0.6900456770737258, + 0.3127813507547647, + -0.19790176671870452, + -0.2470150931413694, + -0.13033688291195356, + 0.2751525769227101, + 0.3358116839690257, + 0.012777035495722622, + -0.5863645096296823, + -0.2718000772972161, + 0.18530716604305297, + -0.38584935532417236, + 1.4242713103150377, + -0.5743828501860517, + 0.8698568893890498, + 0.1812204707015661, + 0.5598349473130719, + 0.6473407378604529, + -0.5804133936892599, + 0.23385060065594565, + -0.1732519408653579, + 0.023460289439591997, + -0.23852041361156084, + -0.038410945530127694, + 0.6414961120942848, + -0.4981334097235699, + 0.24687829158065622, + 0.7782909493298755, + 0.21405758048295626, + -0.7503798953171554, + -0.4251108710567464, + 0.17432606720392962, + 0.17462885215921442, + 0.16081752560869145, + -1.0383739917804204, + -0.19096772611577667, + -0.21502082359553482, + -0.5151417270159211, + -0.11939457951325672, + 0.12952107291035156, + 0.09817492454248922, + 0.03580062970703202, + 0.0186111182549209, + -0.3638147718184899, + -0.025972942903649765, + -0.3663200386077896, + 0.040358290054291146, + -0.03931759515804534, + 0.9991003422660538, + -0.45816383735124067, + -0.17324423794899635, + -0.4990050549298261, + 1.4481276890968446, + -1.0441873523903638, + 0.06979481407758688, + -0.5540914083687581, + 0.5199529635627654, + -0.3063869525312848, + 0.5267077815868281, + 0.3118844803479026, + -0.9570156769333931, + 0.09534120038167337, + -0.10871643658986141, + -0.43503386534437716, + -0.24784094398630252, + -0.07520945257178824, + -0.18248050123311277, + -1.2017077926191373, + 0.028809398516792706, + -0.10054952335748357, + -0.5253271980038061, + -0.5527629664789919, + -0.5935151527801901, + -0.31936511101459253, + 0.5715024563652418, + -0.8167157661505478, + 0.573172696509344, + -0.15131773261951662, + 0.37713792500967896, + 0.03206917329649617, + -0.16438120515174015, + -0.16067860772513654, + -0.21096037711764226, + -0.8068556345293235, + -0.22676715075698994, + 0.12207831764532434, + -0.4820435841441788, + -0.5947352444623203, + 0.6138039075684962, + -0.2987000349249289, + -0.35058637115544916, + 0.14878175167999586, + -0.68785340665581, + 0.07502779351626332, + -0.06278822673577111, + 0.0865359121419349, + -0.007789523790733721, + 0.5481375434476009, + 0.7200254412971472, + -0.7972525316124859, + 0.4234806741591639, + 0.49569617472815364, + 1.0766950568018574, + 0.3194808738447511, + 0.6615448967037492, + -0.8210075800681844, + -0.5049085446713171, + 0.344075172588862, + -1.1262179026721544, + -0.49088274349579714, + 0.16241569175431114, + 1.2497028574367866, + -1.1454712862953706, + 0.694786233381798, + 0.8226993734784459, + -0.5112852160048202, + -1.2198762031696364, + -0.6921364092552589, + -0.2819545600261799, + -0.29737717083264303, + -0.4267077793901538, + -0.37946429489338257, + -0.1405957119846879, + -0.05210055197593799, + 0.0312965639497611, + 0.3769822944333381, + 0.14033753843338692, + 0.8464784070976927, + 0.049169813397374806, + 0.49429555357545873, + 0.5517946586078857, + -0.08994707557673931, + -0.6960011431722997, + -0.4591583030011565, + 0.7852503018115885, + 0.4948140682851688, + -0.47038559399410795, + 0.4912436967691548, + 0.11231657499851233, + -0.27502604951227594, + 0.48417222743181754, + -0.052687753072979904, + 0.6670127474591021, + 0.30068382197560684, + -0.15989096707126849, + 0.7964968667658346, + -0.22023736898019952, + 0.009818899463340608, + -0.27624497720857377, + -0.11195706703233066, + -0.6820702149869221, + -0.06261225132395354, + 0.21470277056262654, + -0.061148751516141964, + -0.2716490145181938, + -0.024430035162852137, + -0.02029584560194119, + 0.35099584390337757, + 0.3314504587754741, + 0.7013026358998468, + -0.8747883715934694, + 0.6219316176956425, + 0.34645259889795366, + 0.35920363278459866, + -0.44746218847222075, + 0.1474748391460139, + -0.6238710363368671, + 0.33674531212193426, + -0.13949708111190096, + 0.41767352662987867, + -1.0725745638866941, + 0.5937992095147564, + -0.1549103551135138, + -0.31688844046604925, + -0.20689954872574912, + 0.09264382943885413, + 0.06491034986671318, + -0.02190573598955481, + 0.07350100081424432, + -0.48193955839745484, + -1.1052615007956756, + 0.2787458925039168, + 0.6849014897895389, + 0.044141024175627375, + -1.289854668827159, + 0.4018372839848654, + -0.819558402722034, + -0.8388504070382203, + 0.27679412085399735, + -0.2844915395926377, + -0.8141983115642688, + 0.18956387049374357, + 0.1017901800511809, + 0.2908404569743219, + 0.5073783653464334, + 0.32463877253300355, + 0.6119701333811283, + -0.017041734129613045, + 0.3849866155293209, + -0.11689295589537396, + 0.7779478231018137, + -0.16544011610722853, + -0.4167644808044624, + 0.9968678212857278, + -0.1870282849237861, + -0.6138344962366461, + 0.6048205093456027, + -0.8362861934188515, + -0.2095095046830226, + 0.35250592787920443, + 0.02788453882885311, + -0.2791634562608612, + -0.038002695706205736, + -0.2693779962231848, + 0.4603367965396832, + -0.084680412018039, + 0.70685724845249, + 0.055613030674350306, + 0.4519538207323949, + 0.3677649712948833, + -0.6180465876052187, + -0.5456550602971344, + -0.30456906045358845, + 0.5461563823362896, + 0.15820422484740096, + -0.6065488499895917, + -0.0708584568199524, + -1.1596647699908469, + -0.19665891969718594, + -0.09602455824501577, + 0.1545582321012507, + -0.06677045239114121, + 0.07623491819027195, + -0.3540543383442951, + -0.47835115839729203, + 0.3929947302539749, + 0.6656164767788888, + 0.9181026865516483, + -0.2539956634562719, + 0.5516833030869368, + 1.0764452964762414, + -0.19428930226548205, + -1.2464997587163953, + 0.003035455769946682, + -0.41924538722582105, + -0.04091467927378256, + 0.04944482659557137, + -0.4595382414938842, + 0.1451372720943257, + -0.1336961570359514, + -0.1608489030980068, + 0.33404522682152427, + -0.4960211747682614, + 0.08747987834770432, + 0.37787257974642235, + -0.26825492178520177, + 0.44923399089551863, + -0.014090578684564203, + 0.004559498322101785, + -0.542947782915789, + -0.2373491164399764, + 0.012513479372571967, + -0.4088831496001435, + -0.6951037745086567, + -0.2789051531759311, + -0.005176309921690381, + 0.6559181161750798, + 0.5325568315376863, + 0.15261235217733382, + 0.3047561010796416, + 0.09348565149272303, + -0.028324962448553585, + -0.26484637717836534, + 0.03524938902954555, + -0.24325082191310088, + -0.032237207405060087, + 0.9877332831769357, + 0.46966769690937715, + 0.07204377786080773, + 0.6048473714205538, + -0.29996436499810225, + -0.7653754161718487, + -0.6093809258486583, + 0.10672143546510399, + -0.745363068424976, + -0.0743337286010558, + 0.16854298555901964, + 0.3067013317704699, + 0.1512348432440641, + 0.19408840927061438, + -0.08520811118774385, + -0.08028699052493238, + -0.001523010076707236, + -0.21846908487317493, + -0.5953231373931707, + -0.47477706772066186, + 0.7424489842249518, + 1.2769605674509776, + -0.46715995561963686, + 0.6834393492077107, + 0.11238270094634173, + 0.5850565130296799, + 0.9009902187900098, + -0.27073136410239396, + -0.3795775801513234, + 0.2882552003633597, + 1.295521146072455, + 0.27312222412624143, + -0.19590200270127323, + 0.7394557843870644, + -0.09167995988957789, + 0.007654924586497774, + -0.28964574980054425, + -0.0597901842070766, + 0.4865344704407778, + -0.5982857508322457, + 0.07926478651348501, + 0.013652269754965918, + 0.4666339795365981, + 0.22164112559575522, + 0.4424013570134504, + 0.08647302996171147, + -0.8558542400711717, + 0.6859505714656782, + 0.8067806989383706, + -0.735585163746804, + 0.10466183857593303, + 0.3345363693299583, + -0.5199523436980382, + 0.30280776986843216, + -0.9130048567734681, + -0.33896293566963465, + 0.24395570407285128, + -1.0786541066327517, + 0.30285746150166926, + -0.37104768600465343, + -0.14964629020324594, + -0.650870644699399, + -0.7807555983634265, + -0.016002074532883326, + 0.3767089351730917, + -0.2299860714695583, + 0.3388576848760531, + -1.0066936237633115, + -0.06826766554136876, + 0.18266077565605432, + -0.09234015293245412, + 0.6735631447648482, + 0.48580701925532577, + -0.6002069539722127, + 0.32844713948569787, + 0.5234554913409699, + -0.2683263762636432, + -0.5928520773314985, + -0.35947665533253337, + -0.49802384290290824, + 0.3783975442847304, + 0.7109053333709219, + -0.7506668259777434, + 0.16133991942106785, + 0.1254165082275237, + -0.664097070924529, + -0.27811500470033, + -0.22794388604080362, + -1.082501172450542, + 0.3217591151900715, + -0.4639200640406185, + -0.028506562448542216, + -0.13429613943162844, + -0.7642342132062658, + -0.2539178781448118, + -0.2691480395248165, + -0.5362536686549011, + 0.1824763647714427, + 0.4196048336695032, + 0.5224045970105168, + 0.9831782946880009, + -1.028103564970161, + 0.5516041828608416, + 0.110626811792886, + 0.13840664994446028, + -0.15370334890455029, + -0.4078686062696484, + -0.4302367441798727, + 0.2915387192844693, + 0.08356085689320575, + -0.14128997524414988, + 0.12434556309177358, + -0.8036727880099963, + -0.24548747581912567, + -0.36743889302490873, + -0.33144063433370635, + -0.5867369287426625, + -0.09051077935185337, + 0.6484159739779232, + -0.19984397587632063, + 0.3256784468959145, + 0.2643083408748784, + -0.29318200937754657, + -0.6191415357168178, + -0.01063578836803103, + -0.1544165062994819, + -0.851107472317619, + -0.12037658974428411, + -1.3008415570901974, + -0.28275482281577213, + 0.880381379577909, + -0.37667081055226626, + -0.19057919244138888, + -0.6448763770413728, + -0.33659067563497924, + 0.0692279919918869, + 0.6121491181446829, + 0.10451162864301256, + 0.42526022710465017, + 0.29026172490236135, + -0.29428920221030475, + -0.8349522521757031, + -0.19733576491149055, + 0.5979415310175922, + -0.22230133411007036, + -0.5983157433228256, + 0.30489145215969105, + 0.06700858333645865, + -0.0073440973645985674, + 0.39244915654112, + -0.3241402169219295, + 0.06047407430389079, + -0.2097662219535139, + 0.44374608890105005, + 0.21872915016170522, + -0.3611906789138857, + 0.18641657604588335, + -0.8634819256167026, + 0.19981809280730123, + -0.11234236287594301, + -0.4662954159365449, + 0.7091828664665156, + 0.8804044059903879, + 0.7628281572850474, + -0.631292051713591, + 0.2759290729462235, + -1.2790996428341264, + 0.28212379932869436, + -0.09227565159851858, + -0.7710549762839377, + -1.0030464440795615, + -1.030751788318199, + -0.6041831152965712, + -0.5120312629057311, + -0.29626347460059144, + -0.38918053808331887, + 0.2755928581642667, + 0.40909944171115376, + 0.0016872287054760515, + 0.0850923112624642, + 0.22661402466363767, + -0.34819372372835766, + -0.47765260428525536, + -0.044203443145923726, + -0.7387650405276309, + 0.5708445570667524, + 0.09682972963985914, + 0.3584111603014024, + 0.9332683085365299, + 0.04134034292134969, + 0.06087375419164176, + -0.7567248716210655, + -0.31540584227738866, + 0.5120934121646025, + -0.9270462831670941, + -0.6105168477626766, + -0.2910488517343079, + 0.113242049424916, + 0.4797196183617398, + 0.1861033880355265, + -0.5443743098520932, + -0.9422931529673044, + -0.7716217641360945, + 0.244424710893137, + 0.5598087166445058, + -0.07044312345560197, + 0.8842196827814259, + -0.16158385709239076, + 0.07380129314933415, + 0.2330182509341212, + 0.7973515336333977, + -0.2568000532848582, + 0.26635041983095564, + 0.584958417855144, + 1.4361311066408247, + 0.013757452525318126, + -0.886125798334872, + -0.830629607273935, + 0.22854812829313592, + 0.3011060301808901, + -0.23438712803751183, + 0.4991927195941458, + -0.15089594990973298, + -0.38304013919234514, + -0.6134666119421538, + 0.050077038239976335, + 0.10183687508848294, + 0.4389912933782805, + 0.41344017701993, + 0.1132394459507634, + -0.18368275340808904, + -0.4567923131166247, + 0.40158947534017253, + -0.7463442844797609, + 0.13556180052128441, + 0.010683647174218103, + 0.3736058395739117, + 1.2121201301364708, + -0.44202269818052486, + -0.3684219485462167, + 0.14066377855910672, + -0.03349535861243602, + -0.2579696088520498, + 0.7812729284432711, + 0.26452633867314745, + -0.39713233981091356, + 0.6271447115846247, + -0.14677896608331464, + 0.6782909023117026, + -0.23321499121676315, + 0.01782074114874188, + 0.8075659079527546, + -0.5823696772285858, + 0.36729578839902444, + 0.4051262185071905, + -0.10028459861547143, + -0.5743186747143576, + 0.5079109094891985, + -0.030839924923985906, + -0.21440825016528647, + -0.34655280363157204, + -0.08822077763861258, + 0.18351391954166107, + 0.41379511032435984, + -0.043071941523187274, + 0.5360695059928035, + 1.4606752417473037, + -0.2182799020788339, + -0.45196742054309763, + 1.1814662177709192, + 0.5048653523549688, + -0.3095771305025989, + -1.0287477348558494, + -0.010396853837703945, + 0.3640014706145672, + 0.09144822055242008, + -0.6874382095740924, + 0.32298208956226765, + 0.3995960033251268, + 0.2413717610910162, + 0.4766643041293561, + -0.06133515799739775, + -0.8123392292347803, + -0.16153963655801462, + 0.12617675106314374, + 0.14590563445777205, + 0.7815954043483285, + -0.4415548885735795, + 0.038918598506401114, + 0.09023995679531271, + -1.5965537839224304, + -0.14937645418284312, + 0.37589552504759216, + 0.21317879810277165, + -0.5742228545983774, + -0.056635205268882216, + 0.7191389891586834, + -0.4596144672876017, + 0.334072042769497, + -0.9366488881087729, + -0.5400240328573243, + 0.22366094782937562, + -0.6405081808675565, + -0.03392775526370165, + -0.42638683756110973, + -0.24236640864723746, + 0.4231783274954368, + 0.321774916158731, + -0.5149804087905806, + 0.1673876660532705, + 0.20182423162099838, + 0.4775612896746765, + -0.21179953279673053, + -1.0312624596215725, + 0.5337664571271366, + -0.012109728336379022, + -0.7061102777077144, + 0.03982069562285759, + -0.226185898124867, + 0.5311967640734399, + -0.2141535486038243, + 0.09357213250227447, + -0.49286499783993143, + -0.5936930257823756, + -1.2947818210093072, + -0.28981658660678766, + -0.16289815829108312, + -0.09719215078866801, + 0.17658314640534423, + -0.1692419217308454, + 0.14770070506951472, + -0.08423048813480716, + -0.6587987678039797, + 0.5032712826398206, + -0.5699392805645227, + -0.6585575336699326, + 0.05903426349553936, + 1.0609274495042973, + 0.30391099354721623, + -0.6484972732805546, + 0.011434031149441082, + 0.4996511161474554, + 0.25238746061410877, + -0.42031001325227657, + -0.2733667841006897, + 0.11946604958484719, + 0.18341220590734375, + 0.19587907452191095, + 0.46120509224925127, + -0.8076878447347209, + 0.16116023460566992, + -0.6085792604127482, + -0.7606580259612259, + -0.49915544907398024, + 0.21581015635902423, + -0.20186504516830484, + 0.012097803195458057, + 0.4518509303650641, + -0.1621796408608016, + 0.5895198955799014, + -0.593839694230782, + 0.23230864864919654, + -0.10057982793641967, + -0.141643935773071, + 0.1294524868520387, + -0.29334690073763736, + 0.23745182831126233, + -0.4356486487286221, + 0.6729898401233743, + -0.06318978977320588, + -0.9694644995291425, + 0.5001656623027874, + 0.33887248526242575, + -0.25695392482945745, + -0.08979089096979898, + -0.17531504963677957, + -0.2445935650738318, + -0.31736073428088496, + -0.5548499209781116, + -0.20490932846425625, + 0.12062882730927127, + -0.33628685060136565, + -0.949940967447608, + 0.06631687319128687, + 0.4872646523353208, + -0.5535403346434864, + 0.06019058197679916, + 1.086334773007018, + -0.42371083857521086, + 0.26766409297696137, + 0.045266641152080345, + -0.16599016528450727, + -0.09524983988953328, + -0.3547259085695198, + 0.21774318528492165, + -0.25655289908804146, + 0.12977333879195863, + -0.3694052404437515, + -0.3076837420065268, + 0.46771935102229767, + -0.5429910580875161, + 0.267981722557024, + -0.4040288991405725, + -0.1836436567006703, + -0.9190918383975613, + 0.11173299118592606, + 0.17465839805909877, + 0.009709802943866253, + 0.15158989141713775, + -0.399970950971025, + 0.808155304218294, + 0.526841209573177, + 0.5339014607895964, + -0.47515379598678775, + -0.8553066862909624, + 0.05222460926873573, + 0.08441086159500533, + -0.035026081556590705, + -0.5809391513040953, + 0.46367656709528704, + -0.11918449136739256, + -0.4875988148912149, + -0.2505470849699226, + -0.0947908082993717, + -0.5005230462835706, + 1.3516161464996186, + -0.3389376597654538, + 0.3270378415637119, + 0.9153164484282286, + -0.25560129976249035, + -0.6868292725814786, + 0.06872425731384602, + -0.4764372736014695, + -0.8061391289943227, + -0.6574572267920238, + -0.8199822646856965, + -0.371063745535946, + -0.03771681945079619, + 0.8009829059485842, + 0.12303124406497412, + 0.42162329765809586, + -1.0854713587489067, + 0.08794290621616829, + -0.06160240339224282, + -0.27574268802023383, + -0.021801223186226792, + -0.8475255202153765, + 0.31132468086722587, + -0.0973037276186215, + 0.3712352928490241, + 0.6600112556103529, + 0.3058845454526427, + 0.018518398524206003, + 0.21465111225862998, + 0.34621048993692805, + 0.7031587318359169, + 0.04155278631434739, + 0.7523601870155011, + -0.38002798184480135, + -0.04121987646725156, + 0.7287757497324652, + 0.15460453852493172, + 0.3760782027952916, + -0.15958725520959027, + -0.6702252230115723, + 0.9375862348228723, + -0.05751303957370868, + 0.08006639778332025, + -0.33567003822523284, + -0.10659831411884457, + 0.3759846658694095, + 0.1595269678333091, + 0.3980129284017444, + -0.5380035692992993, + -0.01065582433597112, + -0.9505953428765035, + 0.03033040690731037, + 0.3542033834552314, + 0.7568571963064136, + 0.9015698381279725, + 0.7920679715027449, + -0.1335633255057418, + -0.2543625116149669, + 0.7905953510160666, + -0.44751915703805767, + 0.24153052584171975, + -0.0733965059927747, + -0.8061103141277122, + -0.44841965793276595, + 0.13426532395291613, + 0.44559611270764365, + 1.0759077006646525, + 0.35957665962121, + 0.10556511941384716, + 0.4935897635755919, + 0.06562848354615236, + -0.03842594147938394, + 0.1124279909040391, + 0.32500129041172987, + -0.08432733598336378, + -0.22097032478470435, + 0.545199538721423, + -0.705466189873135, + 0.04929406614213089, + -0.0094248114724238, + -0.3541072116282786, + -0.11660806563175083, + -0.47656831695662255, + -0.14356208260091208, + 0.30621868732021895, + -0.18075176260305081, + 0.571863103660331, + -0.054279852888261565, + 0.01661499532223032, + 0.1040584286362698, + 0.06426875571946533, + 0.9409245227488195, + 0.27436245387048075, + -0.04642245057055727, + -0.07992819599870016, + 0.5138375704629791, + -0.6328539204323502, + 0.43308742410725065, + -0.4847286002633684, + -0.21359718093584246, + 0.3231136549219015, + -0.887655446304756, + 0.59681841587824, + -0.45957708680500087, + -0.5002911590214891, + 0.33531010453832244, + -0.6962326500321644, + 0.1250232572994765, + -0.1443468146399285, + -0.13016091938561036, + 0.06715437073527386, + -0.40540413657989105, + -0.3967443602761067, + 0.8742659866190903, + -0.6521701214390763, + 0.8312459940178372, + -0.5162731021708287, + -0.5633525684137917, + 0.5454832151075991, + 0.20540714397729243, + 0.5528523342429679, + 0.10746051514436766, + 0.15401714209287065, + -0.3898302661346699, + -0.6551543730598043, + -0.697841905394978, + 0.28108401328915106, + 0.10461093687226386, + 0.8417190961104751, + 0.4029350332480943, + -0.48242581654872874, + -0.8077914117741158, + 0.617174435939961, + 0.2962321295764472, + 0.013202878479463553, + -0.14008057940980345, + 0.4048017599608231, + -0.21203052223204483, + 0.23691967353545806, + 0.007226135439139636, + -0.2731421240018499, + -0.003211134905468871, + 0.21819294526328425, + 0.05480490196291532, + 0.044181479602667606, + 0.18500551494106388, + 0.12939803133355118, + -0.7993235852523586, + -0.28045972397061947, + 0.1477401590145802, + -0.3484772022553678, + 0.16690974487800497, + -0.5865623187933207, + -0.18482109609904684, + 0.0536510720021145, + -0.22385846290513878, + 0.7854380760342496, + 0.5633837344549026, + 0.5969625031995277, + -0.07147154738185346, + -0.8662574997425458, + -1.1156500730963161, + -0.3190255507203785, + -0.25042223747222847, + 0.9005288670763695, + 0.2713368998670109, + 0.39389187595411945, + 0.310423799125558, + 0.08407190929239483, + 0.23604528884856368, + 0.9896499051878939, + -0.3739551280587669, + 0.5363715128699033, + -0.1196234320555748, + -1.0370413348749867, + 0.4596922957932117, + 1.2651437613731649, + 0.14300211094005544, + -0.5504798174992853, + -0.9791737271102969, + 0.6147747972262085, + -0.24834961161826108, + 0.23265522839002672, + 0.05297417715206798, + -1.3221716735085174, + 0.7514851641975766, + -0.12686983074728675, + -0.23384658588271656, + -0.5428931624696736, + -0.04899157673544774, + -0.15402526975205122, + 0.19582428371089555, + -0.1345634706225537, + 0.17159613774870527, + -0.31078594492802547, + 0.184805168021817, + -0.1885501969510932, + 0.014631406842489203, + -0.5630251253860841, + 0.02569686179424313, + 0.8865162341034407, + -0.6309607503569958, + 0.4528661504313094, + 0.32688316932440986, + 0.29783064702174605, + -0.6872190465854088, + 1.0678371069893478, + -1.5688742668299969, + -0.5280284045330259, + -0.11161945706457982, + 0.027447000308143177, + -0.1427770374288284, + -0.26056121418966915, + -0.3226077929750285, + -0.27780223300172424, + -0.044790340627624436, + 0.09866921015366314, + 0.07563664182675578, + 0.09745414017634052, + -0.5668850484335324, + -0.29677836114043094, + 1.4701943173321403, + -0.32795038826488043, + -0.09736809735938745, + 0.009354378222948712, + 0.19425922654444294, + -0.5620563599930067, + -0.47376323106142904, + 0.38643883391180456, + -0.20352614356226761, + 0.485828367270643, + 0.6898090823944651, + 0.3133586122949825, + -0.4311967361913794, + -0.47656252268804333, + -0.2565427100486466, + -0.3625478934239985, + -0.25808914355747925, + 0.3207407976114761, + -0.21596127233697032, + -0.40020476261384114, + -0.377145664906787, + -0.5944566857373215, + -0.35415192360053194, + -0.1757241037707915, + -0.5350751191582137, + 0.013260629624530118, + 0.4409373256138589, + 0.08153348197188204, + 0.37245132240322454 + ], + "yaxis": "y" }, - "id": "JQb9wuBJnFOc", - "outputId": "ac13c900-127f-4648-9a20-4644311c3392" - }, - "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Downloading: 100%|██████████| 36.4M/36.4M [00:00<00:00, 301MB/s]\n", - "File downloaded and decompressed successfully.\n" - ] + "line": { + "color": "rgba(255, 255, 255, 0.5)" + }, + "mode": "lines", + "name": "Difference Trend", + "type": "scatter", + "x": [ + "2023-01-01T00:00:00", + "2023-01-01T01:00:00", + "2023-01-01T02:00:00", + "2023-01-01T03:00:00", + "2023-01-01T04:00:00", + "2023-01-01T05:00:00", + "2023-01-01T06:00:00", + "2023-01-01T07:00:00", + "2023-01-01T08:00:00", + "2023-01-01T09:00:00", + "2023-01-01T10:00:00", + "2023-01-01T11:00:00", + "2023-01-01T12:00:00", + "2023-01-01T13:00:00", + "2023-01-01T14:00:00", + "2023-01-01T15:00:00", + "2023-01-01T16:00:00", + "2023-01-01T17:00:00", + "2023-01-01T18:00:00", + "2023-01-01T19:00:00", + "2023-01-01T20:00:00", + "2023-01-01T21:00:00", + "2023-01-01T22:00:00", + "2023-01-01T23:00:00", + "2023-01-02T00:00:00", + "2023-01-02T01:00:00", + "2023-01-02T02:00:00", + "2023-01-02T03:00:00", + "2023-01-02T04:00:00", + "2023-01-02T05:00:00", + "2023-01-02T06:00:00", + "2023-01-02T07:00:00", + "2023-01-02T08:00:00", + "2023-01-02T09:00:00", + "2023-01-02T10:00:00", + "2023-01-02T11:00:00", + "2023-01-02T12:00:00", + "2023-01-02T13:00:00", + "2023-01-02T14:00:00", + "2023-01-02T15:00:00", + "2023-01-02T16:00:00", + "2023-01-02T17:00:00", + "2023-01-02T18:00:00", + "2023-01-02T19:00:00", + "2023-01-02T20:00:00", + "2023-01-02T21:00:00", + "2023-01-02T22:00:00", + "2023-01-02T23:00:00", + "2023-01-03T00:00:00", + "2023-01-03T01:00:00", + "2023-01-03T02:00:00", + "2023-01-03T03:00:00", + "2023-01-03T04:00:00", + "2023-01-03T05:00:00", + "2023-01-03T06:00:00", + "2023-01-03T07:00:00", + "2023-01-03T08:00:00", + "2023-01-03T09:00:00", + "2023-01-03T10:00:00", + "2023-01-03T11:00:00", + "2023-01-03T12:00:00", + "2023-01-03T13:00:00", + "2023-01-03T14:00:00", + "2023-01-03T15:00:00", + "2023-01-03T16:00:00", + "2023-01-03T17:00:00", + "2023-01-03T18:00:00", + "2023-01-03T19:00:00", + "2023-01-03T20:00:00", + "2023-01-03T21:00:00", + "2023-01-03T22:00:00", + "2023-01-03T23:00:00", + "2023-01-04T00:00:00", + "2023-01-04T01:00:00", + "2023-01-04T02:00:00", + "2023-01-04T03:00:00", + "2023-01-04T04:00:00", + "2023-01-04T05:00:00", + "2023-01-04T06:00:00", + "2023-01-04T07:00:00", + "2023-01-04T08:00:00", + "2023-01-04T09:00:00", + "2023-01-04T10:00:00", + "2023-01-04T11:00:00", + "2023-01-04T12:00:00", + "2023-01-04T13:00:00", + "2023-01-04T14:00:00", + "2023-01-04T15:00:00", + "2023-01-04T16:00:00", + "2023-01-04T17:00:00", + "2023-01-04T18:00:00", + "2023-01-04T19:00:00", + "2023-01-04T20:00:00", + "2023-01-04T21:00:00", + "2023-01-04T22:00:00", + "2023-01-04T23:00:00", + "2023-01-05T00:00:00", + "2023-01-05T01:00:00", + "2023-01-05T02:00:00", + "2023-01-05T03:00:00", + "2023-01-05T04:00:00", + "2023-01-05T05:00:00", + "2023-01-05T06:00:00", + "2023-01-05T07:00:00", + "2023-01-05T08:00:00", + "2023-01-05T09:00:00", + "2023-01-05T10:00:00", + "2023-01-05T11:00:00", + "2023-01-05T12:00:00", + "2023-01-05T13:00:00", + "2023-01-05T14:00:00", + "2023-01-05T15:00:00", + "2023-01-05T16:00:00", + "2023-01-05T17:00:00", + "2023-01-05T18:00:00", + "2023-01-05T19:00:00", + "2023-01-05T20:00:00", + "2023-01-05T21:00:00", + "2023-01-05T22:00:00", + "2023-01-05T23:00:00", + "2023-01-06T00:00:00", + "2023-01-06T01:00:00", + "2023-01-06T02:00:00", + "2023-01-06T03:00:00", + "2023-01-06T04:00:00", + "2023-01-06T05:00:00", + "2023-01-06T06:00:00", + "2023-01-06T07:00:00", + "2023-01-06T08:00:00", + "2023-01-06T09:00:00", + "2023-01-06T10:00:00", + "2023-01-06T11:00:00", + "2023-01-06T12:00:00", + "2023-01-06T13:00:00", + "2023-01-06T14:00:00", + "2023-01-06T15:00:00", + "2023-01-06T16:00:00", + "2023-01-06T17:00:00", + "2023-01-06T18:00:00", + "2023-01-06T19:00:00", + "2023-01-06T20:00:00", + "2023-01-06T21:00:00", + "2023-01-06T22:00:00", + "2023-01-06T23:00:00", + "2023-01-07T00:00:00", + "2023-01-07T01:00:00", + "2023-01-07T02:00:00", + "2023-01-07T03:00:00", + "2023-01-07T04:00:00", + "2023-01-07T05:00:00", + "2023-01-07T06:00:00", + "2023-01-07T07:00:00", + "2023-01-07T08:00:00", + "2023-01-07T09:00:00", + "2023-01-07T10:00:00", + "2023-01-07T11:00:00", + "2023-01-07T12:00:00", + "2023-01-07T13:00:00", + "2023-01-07T14:00:00", + "2023-01-07T15:00:00", + "2023-01-07T16:00:00", + "2023-01-07T17:00:00", + "2023-01-07T18:00:00", + "2023-01-07T19:00:00", + "2023-01-07T20:00:00", + "2023-01-07T21:00:00", + "2023-01-07T22:00:00", + "2023-01-07T23:00:00", + "2023-01-08T00:00:00", + "2023-01-08T01:00:00", + "2023-01-08T02:00:00", + "2023-01-08T03:00:00", + "2023-01-08T04:00:00", + "2023-01-08T05:00:00", + "2023-01-08T06:00:00", + "2023-01-08T07:00:00", + "2023-01-08T08:00:00", + "2023-01-08T09:00:00", + "2023-01-08T10:00:00", + "2023-01-08T11:00:00", + "2023-01-08T12:00:00", + "2023-01-08T13:00:00", + "2023-01-08T14:00:00", + "2023-01-08T15:00:00", + "2023-01-08T16:00:00", + "2023-01-08T17:00:00", + "2023-01-08T18:00:00", + "2023-01-08T19:00:00", + "2023-01-08T20:00:00", + "2023-01-08T21:00:00", + "2023-01-08T22:00:00", + "2023-01-08T23:00:00", + "2023-01-09T00:00:00", + "2023-01-09T01:00:00", + "2023-01-09T02:00:00", + "2023-01-09T03:00:00", + "2023-01-09T04:00:00", + "2023-01-09T05:00:00", + "2023-01-09T06:00:00", + "2023-01-09T07:00:00", + "2023-01-09T08:00:00", + "2023-01-09T09:00:00", + "2023-01-09T10:00:00", + "2023-01-09T11:00:00", + "2023-01-09T12:00:00", + "2023-01-09T13:00:00", + "2023-01-09T14:00:00", + "2023-01-09T15:00:00", + "2023-01-09T16:00:00", + "2023-01-09T17:00:00", + "2023-01-09T18:00:00", + "2023-01-09T19:00:00", + "2023-01-09T20:00:00", + "2023-01-09T21:00:00", + "2023-01-09T22:00:00", + "2023-01-09T23:00:00", + "2023-01-10T00:00:00", + "2023-01-10T01:00:00", + "2023-01-10T02:00:00", + "2023-01-10T03:00:00", + "2023-01-10T04:00:00", + "2023-01-10T05:00:00", + "2023-01-10T06:00:00", + "2023-01-10T07:00:00", + "2023-01-10T08:00:00", + "2023-01-10T09:00:00", + "2023-01-10T10:00:00", + "2023-01-10T11:00:00", + "2023-01-10T12:00:00", + "2023-01-10T13:00:00", + "2023-01-10T14:00:00", + "2023-01-10T15:00:00", + "2023-01-10T16:00:00", + "2023-01-10T17:00:00", + "2023-01-10T18:00:00", + "2023-01-10T19:00:00", + "2023-01-10T20:00:00", + "2023-01-10T21:00:00", + "2023-01-10T22:00:00", + "2023-01-10T23:00:00", + "2023-01-11T00:00:00", + "2023-01-11T01:00:00", + "2023-01-11T02:00:00", + "2023-01-11T03:00:00", + "2023-01-11T04:00:00", + "2023-01-11T05:00:00", + "2023-01-11T06:00:00", + "2023-01-11T07:00:00", + "2023-01-11T08:00:00", + "2023-01-11T09:00:00", + "2023-01-11T10:00:00", + "2023-01-11T11:00:00", + "2023-01-11T12:00:00", + "2023-01-11T13:00:00", + "2023-01-11T14:00:00", + "2023-01-11T15:00:00", + "2023-01-11T16:00:00", + "2023-01-11T17:00:00", + "2023-01-11T18:00:00", + "2023-01-11T19:00:00", + "2023-01-11T20:00:00", + "2023-01-11T21:00:00", + "2023-01-11T22:00:00", + "2023-01-11T23:00:00", + "2023-01-12T00:00:00", + "2023-01-12T01:00:00", + "2023-01-12T02:00:00", + "2023-01-12T03:00:00", + "2023-01-12T04:00:00", + "2023-01-12T05:00:00", + "2023-01-12T06:00:00", + "2023-01-12T07:00:00", + "2023-01-12T08:00:00", + "2023-01-12T09:00:00", + "2023-01-12T10:00:00", + "2023-01-12T11:00:00", + "2023-01-12T12:00:00", + "2023-01-12T13:00:00", + "2023-01-12T14:00:00", + "2023-01-12T15:00:00", + "2023-01-12T16:00:00", + "2023-01-12T17:00:00", + "2023-01-12T18:00:00", + "2023-01-12T19:00:00", + "2023-01-12T20:00:00", + "2023-01-12T21:00:00", + "2023-01-12T22:00:00", + "2023-01-12T23:00:00", + "2023-01-13T00:00:00", + "2023-01-13T01:00:00", + "2023-01-13T02:00:00", + "2023-01-13T03:00:00", + "2023-01-13T04:00:00", + "2023-01-13T05:00:00", + "2023-01-13T06:00:00", + "2023-01-13T07:00:00", + "2023-01-13T08:00:00", + "2023-01-13T09:00:00", + "2023-01-13T10:00:00", + "2023-01-13T11:00:00", + "2023-01-13T12:00:00", + "2023-01-13T13:00:00", + "2023-01-13T14:00:00", + "2023-01-13T15:00:00", + "2023-01-13T16:00:00", + "2023-01-13T17:00:00", + "2023-01-13T18:00:00", + "2023-01-13T19:00:00", + "2023-01-13T20:00:00", + "2023-01-13T21:00:00", + "2023-01-13T22:00:00", + "2023-01-13T23:00:00", + "2023-01-14T00:00:00", + "2023-01-14T01:00:00", + "2023-01-14T02:00:00", + "2023-01-14T03:00:00", + "2023-01-14T04:00:00", + "2023-01-14T05:00:00", + "2023-01-14T06:00:00", + "2023-01-14T07:00:00", + "2023-01-14T08:00:00", + "2023-01-14T09:00:00", + "2023-01-14T10:00:00", + "2023-01-14T11:00:00", + "2023-01-14T12:00:00", + "2023-01-14T13:00:00", + "2023-01-14T14:00:00", + "2023-01-14T15:00:00", + "2023-01-14T16:00:00", + "2023-01-14T17:00:00", + "2023-01-14T18:00:00", + "2023-01-14T19:00:00", + "2023-01-14T20:00:00", + "2023-01-14T21:00:00", + "2023-01-14T22:00:00", + "2023-01-14T23:00:00", + "2023-01-15T00:00:00", + "2023-01-15T01:00:00", + "2023-01-15T02:00:00", + "2023-01-15T03:00:00", + "2023-01-15T04:00:00", + "2023-01-15T05:00:00", + "2023-01-15T06:00:00", + "2023-01-15T07:00:00", + "2023-01-15T08:00:00", + "2023-01-15T09:00:00", + "2023-01-15T10:00:00", + "2023-01-15T11:00:00", + "2023-01-15T12:00:00", + "2023-01-15T13:00:00", + "2023-01-15T14:00:00", + "2023-01-15T15:00:00", + "2023-01-15T16:00:00", + "2023-01-15T17:00:00", + "2023-01-15T18:00:00", + "2023-01-15T19:00:00", + "2023-01-15T20:00:00", + "2023-01-15T21:00:00", + "2023-01-15T22:00:00", + "2023-01-15T23:00:00", + "2023-01-16T00:00:00", + "2023-01-16T01:00:00", + "2023-01-16T02:00:00", + "2023-01-16T03:00:00", + "2023-01-16T04:00:00", + "2023-01-16T05:00:00", + "2023-01-16T06:00:00", + "2023-01-16T07:00:00", + "2023-01-16T08:00:00", + "2023-01-16T09:00:00", + "2023-01-16T10:00:00", + "2023-01-16T11:00:00", + "2023-01-16T12:00:00", + "2023-01-16T13:00:00", + "2023-01-16T14:00:00", + "2023-01-16T15:00:00", + "2023-01-16T16:00:00", + "2023-01-16T17:00:00", + "2023-01-16T18:00:00", + "2023-01-16T19:00:00", + "2023-01-16T20:00:00", + "2023-01-16T21:00:00", + "2023-01-16T22:00:00", + "2023-01-16T23:00:00", + "2023-01-17T00:00:00", + "2023-01-17T01:00:00", + "2023-01-17T02:00:00", + "2023-01-17T03:00:00", + "2023-01-17T04:00:00", + "2023-01-17T05:00:00", + "2023-01-17T06:00:00", + "2023-01-17T07:00:00", + "2023-01-17T08:00:00", + "2023-01-17T09:00:00", + "2023-01-17T10:00:00", + "2023-01-17T11:00:00", + "2023-01-17T12:00:00", + "2023-01-17T13:00:00", + "2023-01-17T14:00:00", + "2023-01-17T15:00:00", + "2023-01-17T16:00:00", + "2023-01-17T17:00:00", + "2023-01-17T18:00:00", + "2023-01-17T19:00:00", + "2023-01-17T20:00:00", + "2023-01-17T21:00:00", + "2023-01-17T22:00:00", + "2023-01-17T23:00:00", + "2023-01-18T00:00:00", + "2023-01-18T01:00:00", + "2023-01-18T02:00:00", + "2023-01-18T03:00:00", + "2023-01-18T04:00:00", + "2023-01-18T05:00:00", + "2023-01-18T06:00:00", + "2023-01-18T07:00:00", + "2023-01-18T08:00:00", + "2023-01-18T09:00:00", + "2023-01-18T10:00:00", + "2023-01-18T11:00:00", + "2023-01-18T12:00:00", + "2023-01-18T13:00:00", + "2023-01-18T14:00:00", + "2023-01-18T15:00:00", + "2023-01-18T16:00:00", + "2023-01-18T17:00:00", + "2023-01-18T18:00:00", + "2023-01-18T19:00:00", + "2023-01-18T20:00:00", + "2023-01-18T21:00:00", + "2023-01-18T22:00:00", + "2023-01-18T23:00:00", + "2023-01-19T00:00:00", + "2023-01-19T01:00:00", + "2023-01-19T02:00:00", + "2023-01-19T03:00:00", + "2023-01-19T04:00:00", + "2023-01-19T05:00:00", + "2023-01-19T06:00:00", + "2023-01-19T07:00:00", + "2023-01-19T08:00:00", + "2023-01-19T09:00:00", + "2023-01-19T10:00:00", + "2023-01-19T11:00:00", + "2023-01-19T12:00:00", + "2023-01-19T13:00:00", + "2023-01-19T14:00:00", + "2023-01-19T15:00:00", + "2023-01-19T16:00:00", + "2023-01-19T17:00:00", + "2023-01-19T18:00:00", + "2023-01-19T19:00:00", + "2023-01-19T20:00:00", + "2023-01-19T21:00:00", + "2023-01-19T22:00:00", + "2023-01-19T23:00:00", + "2023-01-20T00:00:00", + "2023-01-20T01:00:00", + "2023-01-20T02:00:00", + "2023-01-20T03:00:00", + "2023-01-20T04:00:00", + "2023-01-20T05:00:00", + "2023-01-20T06:00:00", + "2023-01-20T07:00:00", + "2023-01-20T08:00:00", + "2023-01-20T09:00:00", + "2023-01-20T10:00:00", + "2023-01-20T11:00:00", + "2023-01-20T12:00:00", + "2023-01-20T13:00:00", + "2023-01-20T14:00:00", + "2023-01-20T15:00:00", + "2023-01-20T16:00:00", + "2023-01-20T17:00:00", + "2023-01-20T18:00:00", + "2023-01-20T19:00:00", + "2023-01-20T20:00:00", + "2023-01-20T21:00:00", + "2023-01-20T22:00:00", + "2023-01-20T23:00:00", + "2023-01-21T00:00:00", + "2023-01-21T01:00:00", + "2023-01-21T02:00:00", + "2023-01-21T03:00:00", + "2023-01-21T04:00:00", + "2023-01-21T05:00:00", + "2023-01-21T06:00:00", + "2023-01-21T07:00:00", + "2023-01-21T08:00:00", + "2023-01-21T09:00:00", + "2023-01-21T10:00:00", + "2023-01-21T11:00:00", + "2023-01-21T12:00:00", + "2023-01-21T13:00:00", + "2023-01-21T14:00:00", + "2023-01-21T15:00:00", + "2023-01-21T16:00:00", + "2023-01-21T17:00:00", + "2023-01-21T18:00:00", + "2023-01-21T19:00:00", + "2023-01-21T20:00:00", + "2023-01-21T21:00:00", + "2023-01-21T22:00:00", + "2023-01-21T23:00:00", + "2023-01-22T00:00:00", + "2023-01-22T01:00:00", + "2023-01-22T02:00:00", + "2023-01-22T03:00:00", + "2023-01-22T04:00:00", + "2023-01-22T05:00:00", + "2023-01-22T06:00:00", + "2023-01-22T07:00:00", + "2023-01-22T08:00:00", + "2023-01-22T09:00:00", + "2023-01-22T10:00:00", + "2023-01-22T11:00:00", + "2023-01-22T12:00:00", + "2023-01-22T13:00:00", + "2023-01-22T14:00:00", + "2023-01-22T15:00:00", + "2023-01-22T16:00:00", + "2023-01-22T17:00:00", + "2023-01-22T18:00:00", + "2023-01-22T19:00:00", + "2023-01-22T20:00:00", + "2023-01-22T21:00:00", + "2023-01-22T22:00:00", + "2023-01-22T23:00:00", + "2023-01-23T00:00:00", + "2023-01-23T01:00:00", + "2023-01-23T02:00:00", + "2023-01-23T03:00:00", + "2023-01-23T04:00:00", + "2023-01-23T05:00:00", + "2023-01-23T06:00:00", + "2023-01-23T07:00:00", + "2023-01-23T08:00:00", + "2023-01-23T09:00:00", + "2023-01-23T10:00:00", + "2023-01-23T11:00:00", + "2023-01-23T12:00:00", + "2023-01-23T13:00:00", + "2023-01-23T14:00:00", + "2023-01-23T15:00:00", + "2023-01-23T16:00:00", + "2023-01-23T17:00:00", + "2023-01-23T18:00:00", + "2023-01-23T19:00:00", + "2023-01-23T20:00:00", + "2023-01-23T21:00:00", + "2023-01-23T22:00:00", + "2023-01-23T23:00:00", + "2023-01-24T00:00:00", + "2023-01-24T01:00:00", + "2023-01-24T02:00:00", + "2023-01-24T03:00:00", + "2023-01-24T04:00:00", + "2023-01-24T05:00:00", + "2023-01-24T06:00:00", + "2023-01-24T07:00:00", + "2023-01-24T08:00:00", + "2023-01-24T09:00:00", + "2023-01-24T10:00:00", + "2023-01-24T11:00:00", + "2023-01-24T12:00:00", + "2023-01-24T13:00:00", + "2023-01-24T14:00:00", + "2023-01-24T15:00:00", + "2023-01-24T16:00:00", + "2023-01-24T17:00:00", + "2023-01-24T18:00:00", + "2023-01-24T19:00:00", + "2023-01-24T20:00:00", + "2023-01-24T21:00:00", + "2023-01-24T22:00:00", + "2023-01-24T23:00:00", + "2023-01-25T00:00:00", + "2023-01-25T01:00:00", + "2023-01-25T02:00:00", + "2023-01-25T03:00:00", + "2023-01-25T04:00:00", + "2023-01-25T05:00:00", + "2023-01-25T06:00:00", + "2023-01-25T07:00:00", + "2023-01-25T08:00:00", + "2023-01-25T09:00:00", + "2023-01-25T10:00:00", + "2023-01-25T11:00:00", + "2023-01-25T12:00:00", + "2023-01-25T13:00:00", + "2023-01-25T14:00:00", + "2023-01-25T15:00:00", + "2023-01-25T16:00:00", + "2023-01-25T17:00:00", + "2023-01-25T18:00:00", + "2023-01-25T19:00:00", + "2023-01-25T20:00:00", + "2023-01-25T21:00:00", + "2023-01-25T22:00:00", + "2023-01-25T23:00:00", + "2023-01-26T00:00:00", + "2023-01-26T01:00:00", + "2023-01-26T02:00:00", + "2023-01-26T03:00:00", + "2023-01-26T04:00:00", + "2023-01-26T05:00:00", + "2023-01-26T06:00:00", + "2023-01-26T07:00:00", + "2023-01-26T08:00:00", + "2023-01-26T09:00:00", + "2023-01-26T10:00:00", + "2023-01-26T11:00:00", + "2023-01-26T12:00:00", + "2023-01-26T13:00:00", + "2023-01-26T14:00:00", + "2023-01-26T15:00:00", + "2023-01-26T16:00:00", + "2023-01-26T17:00:00", + "2023-01-26T18:00:00", + "2023-01-26T19:00:00", + "2023-01-26T20:00:00", + "2023-01-26T21:00:00", + "2023-01-26T22:00:00", + "2023-01-26T23:00:00", + "2023-01-27T00:00:00", + "2023-01-27T01:00:00", + "2023-01-27T02:00:00", + "2023-01-27T03:00:00", + "2023-01-27T04:00:00", + "2023-01-27T05:00:00", + "2023-01-27T06:00:00", + "2023-01-27T07:00:00", + "2023-01-27T08:00:00", + "2023-01-27T09:00:00", + "2023-01-27T10:00:00", + "2023-01-27T11:00:00", + "2023-01-27T12:00:00", + "2023-01-27T13:00:00", + "2023-01-27T14:00:00", + "2023-01-27T15:00:00", + "2023-01-27T16:00:00", + "2023-01-27T17:00:00", + "2023-01-27T18:00:00", + "2023-01-27T19:00:00", + "2023-01-27T20:00:00", + "2023-01-27T21:00:00", + "2023-01-27T22:00:00", + "2023-01-27T23:00:00", + "2023-01-28T00:00:00", + "2023-01-28T01:00:00", + "2023-01-28T02:00:00", + "2023-01-28T03:00:00", + "2023-01-28T04:00:00", + "2023-01-28T05:00:00", + "2023-01-28T06:00:00", + "2023-01-28T07:00:00", + "2023-01-28T08:00:00", + "2023-01-28T09:00:00", + "2023-01-28T10:00:00", + "2023-01-28T11:00:00", + "2023-01-28T12:00:00", + "2023-01-28T13:00:00", + "2023-01-28T14:00:00", + "2023-01-28T15:00:00", + "2023-01-28T16:00:00", + "2023-01-28T17:00:00", + "2023-01-28T18:00:00", + "2023-01-28T19:00:00", + "2023-01-28T20:00:00", + "2023-01-28T21:00:00", + "2023-01-28T22:00:00", + "2023-01-28T23:00:00", + "2023-01-29T00:00:00", + "2023-01-29T01:00:00", + "2023-01-29T02:00:00", + "2023-01-29T03:00:00", + "2023-01-29T04:00:00", + "2023-01-29T05:00:00", + "2023-01-29T06:00:00", + "2023-01-29T07:00:00", + "2023-01-29T08:00:00", + "2023-01-29T09:00:00", + "2023-01-29T10:00:00", + "2023-01-29T11:00:00", + "2023-01-29T12:00:00", + "2023-01-29T13:00:00", + "2023-01-29T14:00:00", + "2023-01-29T15:00:00", + "2023-01-29T16:00:00", + "2023-01-29T17:00:00", + "2023-01-29T18:00:00", + "2023-01-29T19:00:00", + "2023-01-29T20:00:00", + "2023-01-29T21:00:00", + "2023-01-29T22:00:00", + "2023-01-29T23:00:00", + "2023-01-30T00:00:00", + "2023-01-30T01:00:00", + "2023-01-30T02:00:00", + "2023-01-30T03:00:00", + "2023-01-30T04:00:00", + "2023-01-30T05:00:00", + "2023-01-30T06:00:00", + "2023-01-30T07:00:00", + "2023-01-30T08:00:00", + "2023-01-30T09:00:00", + "2023-01-30T10:00:00", + "2023-01-30T11:00:00", + "2023-01-30T12:00:00", + "2023-01-30T13:00:00", + "2023-01-30T14:00:00", + "2023-01-30T15:00:00", + "2023-01-30T16:00:00", + "2023-01-30T17:00:00", + "2023-01-30T18:00:00", + "2023-01-30T19:00:00", + "2023-01-30T20:00:00", + "2023-01-30T21:00:00", + "2023-01-30T22:00:00", + "2023-01-30T23:00:00", + "2023-01-31T00:00:00", + "2023-01-31T01:00:00", + "2023-01-31T02:00:00", + "2023-01-31T03:00:00", + "2023-01-31T04:00:00", + "2023-01-31T05:00:00", + "2023-01-31T06:00:00", + "2023-01-31T07:00:00", + "2023-01-31T08:00:00", + "2023-01-31T09:00:00", + "2023-01-31T10:00:00", + "2023-01-31T11:00:00", + "2023-01-31T12:00:00", + "2023-01-31T13:00:00", + "2023-01-31T14:00:00", + "2023-01-31T15:00:00", + "2023-01-31T16:00:00", + "2023-01-31T17:00:00", + "2023-01-31T18:00:00", + "2023-01-31T19:00:00", + "2023-01-31T20:00:00", + "2023-01-31T21:00:00", + "2023-01-31T22:00:00", + "2023-01-31T23:00:00", + "2023-02-01T00:00:00", + "2023-02-01T01:00:00", + "2023-02-01T02:00:00", + "2023-02-01T03:00:00", + "2023-02-01T04:00:00", + "2023-02-01T05:00:00", + "2023-02-01T06:00:00", + "2023-02-01T07:00:00", + "2023-02-01T08:00:00", + "2023-02-01T09:00:00", + "2023-02-01T10:00:00", + "2023-02-01T11:00:00", + "2023-02-01T12:00:00", + "2023-02-01T13:00:00", + "2023-02-01T14:00:00", + "2023-02-01T15:00:00", + "2023-02-01T16:00:00", + "2023-02-01T17:00:00", + "2023-02-01T18:00:00", + "2023-02-01T19:00:00", + "2023-02-01T20:00:00", + "2023-02-01T21:00:00", + "2023-02-01T22:00:00", + "2023-02-01T23:00:00", + "2023-02-02T00:00:00", + "2023-02-02T01:00:00", + "2023-02-02T02:00:00", + "2023-02-02T03:00:00", + "2023-02-02T04:00:00", + "2023-02-02T05:00:00", + "2023-02-02T06:00:00", + "2023-02-02T07:00:00", + "2023-02-02T08:00:00", + "2023-02-02T09:00:00", + "2023-02-02T10:00:00", + "2023-02-02T11:00:00", + "2023-02-02T12:00:00", + "2023-02-02T13:00:00", + "2023-02-02T14:00:00", + "2023-02-02T15:00:00", + "2023-02-02T16:00:00", + "2023-02-02T17:00:00", + "2023-02-02T18:00:00", + "2023-02-02T19:00:00", + "2023-02-02T20:00:00", + "2023-02-02T21:00:00", + "2023-02-02T22:00:00", + "2023-02-02T23:00:00", + "2023-02-03T00:00:00", + "2023-02-03T01:00:00", + "2023-02-03T02:00:00", + "2023-02-03T03:00:00", + "2023-02-03T04:00:00", + "2023-02-03T05:00:00", + "2023-02-03T06:00:00", + "2023-02-03T07:00:00", + "2023-02-03T08:00:00", + "2023-02-03T09:00:00", + "2023-02-03T10:00:00", + "2023-02-03T11:00:00", + "2023-02-03T12:00:00", + "2023-02-03T13:00:00", + "2023-02-03T14:00:00", + "2023-02-03T15:00:00", + "2023-02-03T16:00:00", + "2023-02-03T17:00:00", + "2023-02-03T18:00:00", + "2023-02-03T19:00:00", + "2023-02-03T20:00:00", + "2023-02-03T21:00:00", + "2023-02-03T22:00:00", + "2023-02-03T23:00:00", + "2023-02-04T00:00:00", + "2023-02-04T01:00:00", + "2023-02-04T02:00:00", + "2023-02-04T03:00:00", + "2023-02-04T04:00:00", + "2023-02-04T05:00:00", + "2023-02-04T06:00:00", + "2023-02-04T07:00:00", + "2023-02-04T08:00:00", + "2023-02-04T09:00:00", + "2023-02-04T10:00:00", + "2023-02-04T11:00:00", + "2023-02-04T12:00:00", + "2023-02-04T13:00:00", + "2023-02-04T14:00:00", + "2023-02-04T15:00:00", + "2023-02-04T16:00:00", + "2023-02-04T17:00:00", + "2023-02-04T18:00:00", + "2023-02-04T19:00:00", + "2023-02-04T20:00:00", + "2023-02-04T21:00:00", + "2023-02-04T22:00:00", + "2023-02-04T23:00:00", + "2023-02-05T00:00:00", + "2023-02-05T01:00:00", + "2023-02-05T02:00:00", + "2023-02-05T03:00:00", + "2023-02-05T04:00:00", + "2023-02-05T05:00:00", + "2023-02-05T06:00:00", + "2023-02-05T07:00:00", + "2023-02-05T08:00:00", + "2023-02-05T09:00:00", + "2023-02-05T10:00:00", + "2023-02-05T11:00:00", + "2023-02-05T12:00:00", + "2023-02-05T13:00:00", + "2023-02-05T14:00:00", + "2023-02-05T15:00:00", + "2023-02-05T16:00:00", + "2023-02-05T17:00:00", + "2023-02-05T18:00:00", + "2023-02-05T19:00:00", + "2023-02-05T20:00:00", + "2023-02-05T21:00:00", + "2023-02-05T22:00:00", + "2023-02-05T23:00:00", + "2023-02-06T00:00:00", + "2023-02-06T01:00:00", + "2023-02-06T02:00:00", + "2023-02-06T03:00:00", + "2023-02-06T04:00:00", + "2023-02-06T05:00:00", + "2023-02-06T06:00:00", + "2023-02-06T07:00:00", + "2023-02-06T08:00:00", + "2023-02-06T09:00:00", + "2023-02-06T10:00:00", + "2023-02-06T11:00:00", + "2023-02-06T12:00:00", + "2023-02-06T13:00:00", + "2023-02-06T14:00:00", + "2023-02-06T15:00:00", + "2023-02-06T16:00:00", + "2023-02-06T17:00:00", + "2023-02-06T18:00:00", + "2023-02-06T19:00:00", + "2023-02-06T20:00:00", + "2023-02-06T21:00:00", + "2023-02-06T22:00:00", + "2023-02-06T23:00:00", + "2023-02-07T00:00:00", + "2023-02-07T01:00:00", + "2023-02-07T02:00:00", + "2023-02-07T03:00:00", + "2023-02-07T04:00:00", + "2023-02-07T05:00:00", + "2023-02-07T06:00:00", + "2023-02-07T07:00:00", + "2023-02-07T08:00:00", + "2023-02-07T09:00:00", + "2023-02-07T10:00:00", + "2023-02-07T11:00:00", + "2023-02-07T12:00:00", + "2023-02-07T13:00:00", + "2023-02-07T14:00:00", + "2023-02-07T15:00:00", + "2023-02-07T16:00:00", + "2023-02-07T17:00:00", + "2023-02-07T18:00:00", + "2023-02-07T19:00:00", + "2023-02-07T20:00:00", + "2023-02-07T21:00:00", + "2023-02-07T22:00:00", + "2023-02-07T23:00:00", + "2023-02-08T00:00:00", + "2023-02-08T01:00:00", + "2023-02-08T02:00:00", + "2023-02-08T03:00:00", + "2023-02-08T04:00:00", + "2023-02-08T05:00:00", + "2023-02-08T06:00:00", + "2023-02-08T07:00:00", + "2023-02-08T08:00:00", + "2023-02-08T09:00:00", + "2023-02-08T10:00:00", + "2023-02-08T11:00:00", + "2023-02-08T12:00:00", + "2023-02-08T13:00:00", + "2023-02-08T14:00:00", + "2023-02-08T15:00:00", + "2023-02-08T16:00:00", + "2023-02-08T17:00:00", + "2023-02-08T18:00:00", + "2023-02-08T19:00:00", + "2023-02-08T20:00:00", + "2023-02-08T21:00:00", + "2023-02-08T22:00:00", + "2023-02-08T23:00:00", + "2023-02-09T00:00:00", + "2023-02-09T01:00:00", + "2023-02-09T02:00:00", + "2023-02-09T03:00:00", + "2023-02-09T04:00:00", + "2023-02-09T05:00:00", + "2023-02-09T06:00:00", + "2023-02-09T07:00:00", + "2023-02-09T08:00:00", + "2023-02-09T09:00:00", + "2023-02-09T10:00:00", + "2023-02-09T11:00:00", + "2023-02-09T12:00:00", + "2023-02-09T13:00:00", + "2023-02-09T14:00:00", + "2023-02-09T15:00:00", + "2023-02-09T16:00:00", + "2023-02-09T17:00:00", + "2023-02-09T18:00:00", + "2023-02-09T19:00:00", + "2023-02-09T20:00:00", + "2023-02-09T21:00:00", + "2023-02-09T22:00:00", + "2023-02-09T23:00:00", + "2023-02-10T00:00:00", + "2023-02-10T01:00:00", + "2023-02-10T02:00:00", + "2023-02-10T03:00:00", + "2023-02-10T04:00:00", + "2023-02-10T05:00:00", + "2023-02-10T06:00:00", + "2023-02-10T07:00:00", + "2023-02-10T08:00:00", + "2023-02-10T09:00:00", + "2023-02-10T10:00:00", + "2023-02-10T11:00:00", + "2023-02-10T12:00:00", + "2023-02-10T13:00:00", + "2023-02-10T14:00:00", + "2023-02-10T15:00:00", + "2023-02-10T16:00:00", + "2023-02-10T17:00:00", + "2023-02-10T18:00:00", + "2023-02-10T19:00:00", + "2023-02-10T20:00:00", + "2023-02-10T21:00:00", + "2023-02-10T22:00:00", + "2023-02-10T23:00:00", + "2023-02-11T00:00:00", + "2023-02-11T01:00:00", + "2023-02-11T02:00:00", + "2023-02-11T03:00:00", + "2023-02-11T04:00:00", + "2023-02-11T05:00:00", + "2023-02-11T06:00:00", + "2023-02-11T07:00:00", + "2023-02-11T08:00:00", + "2023-02-11T09:00:00", + "2023-02-11T10:00:00", + "2023-02-11T11:00:00", + "2023-02-11T12:00:00", + "2023-02-11T13:00:00", + "2023-02-11T14:00:00", + "2023-02-11T15:00:00" + ], + "xaxis": "x2", + "y": [ + -0.6996777182930012, + -0.4623168414563844, + -0.02981518496008706, + 0.32346838885278695, + -0.34911165680679496, + -0.1967426927108748, + -0.44759661001386597, + -0.3175859008409847, + -0.5247763576596676, + 0.267617605780284, + -0.6586970328171629, + -0.09879980234619984, + -1.0376304363126327, + 0.3445939090447838, + -0.8679819015826247, + -0.0989553917313239, + 0.32570900180722406, + 0.24194291702716078, + 0.1601736540971601, + -0.21208297320095815, + -0.26141774401774986, + 0.28685000196928956, + 0.0121772961304914, + -1.0711351793059318, + -0.8637715850503557, + -0.21816183483701607, + -0.01900173908410019, + -0.060015663359130667, + -0.3067589863652083, + 0.5113962825992027, + 0.12868826871167255, + 0.8342920369387947, + -0.19961156130263963, + -0.3235979698513705, + 0.241593231149687, + -0.7869933816450164, + 0.6128828315011706, + 0.73218744010491, + -0.11222590927998599, + -0.5235491513060772, + -0.8419638457289342, + 0.22944213143447, + -0.5393404167156478, + 0.019254234750353608, + 0.0863136499704098, + -0.4418299687433362, + -0.3261614392067098, + 0.7881960784921247, + -0.7382701748629479, + -0.6900456770737258, + 0.3127813507547647, + -0.19790176671870452, + -0.2470150931413694, + -0.13033688291195356, + 0.2751525769227101, + 0.3358116839690257, + 0.012777035495722622, + -0.5863645096296823, + -0.2718000772972161, + 0.18530716604305297, + -0.38584935532417236, + 1.4242713103150377, + -0.5743828501860517, + 0.8698568893890498, + 0.1812204707015661, + 0.5598349473130719, + 0.6473407378604529, + -0.5804133936892599, + 0.23385060065594565, + -0.1732519408653579, + 0.023460289439591997, + -0.23852041361156084, + -0.038410945530127694, + 0.6414961120942848, + -0.4981334097235699, + 0.24687829158065622, + 0.7782909493298755, + 0.21405758048295626, + -0.7503798953171554, + -0.4251108710567464, + 0.17432606720392962, + 0.17462885215921442, + 0.16081752560869145, + -1.0383739917804204, + -0.19096772611577667, + -0.21502082359553482, + -0.5151417270159211, + -0.11939457951325672, + 0.12952107291035156, + 0.09817492454248922, + 0.03580062970703202, + 0.0186111182549209, + -0.3638147718184899, + -0.025972942903649765, + -0.3663200386077896, + 0.040358290054291146, + -0.03931759515804534, + 0.9991003422660538, + -0.45816383735124067, + -0.17324423794899635, + -0.4990050549298261, + 1.4481276890968446, + -1.0441873523903638, + 0.06979481407758688, + -0.5540914083687581, + 0.5199529635627654, + -0.3063869525312848, + 0.5267077815868281, + 0.3118844803479026, + -0.9570156769333931, + 0.09534120038167337, + -0.10871643658986141, + -0.43503386534437716, + -0.24784094398630252, + -0.07520945257178824, + -0.18248050123311277, + -1.2017077926191373, + 0.028809398516792706, + -0.10054952335748357, + -0.5253271980038061, + -0.5527629664789919, + -0.5935151527801901, + -0.31936511101459253, + 0.5715024563652418, + -0.8167157661505478, + 0.573172696509344, + -0.15131773261951662, + 0.37713792500967896, + 0.03206917329649617, + -0.16438120515174015, + -0.16067860772513654, + -0.21096037711764226, + -0.8068556345293235, + -0.22676715075698994, + 0.12207831764532434, + -0.4820435841441788, + -0.5947352444623203, + 0.6138039075684962, + -0.2987000349249289, + -0.35058637115544916, + 0.14878175167999586, + -0.68785340665581, + 0.07502779351626332, + -0.06278822673577111, + 0.0865359121419349, + -0.007789523790733721, + 0.5481375434476009, + 0.7200254412971472, + -0.7972525316124859, + 0.4234806741591639, + 0.49569617472815364, + 1.0766950568018574, + 0.3194808738447511, + 0.6615448967037492, + -0.8210075800681844, + -0.5049085446713171, + 0.344075172588862, + -1.1262179026721544, + -0.49088274349579714, + 0.16241569175431114, + 1.2497028574367866, + -1.1454712862953706, + 0.694786233381798, + 0.8226993734784459, + -0.5112852160048202, + -1.2198762031696364, + -0.6921364092552589, + -0.2819545600261799, + -0.29737717083264303, + -0.4267077793901538, + -0.37946429489338257, + -0.1405957119846879, + -0.05210055197593799, + 0.0312965639497611, + 0.3769822944333381, + 0.14033753843338692, + 0.8464784070976927, + 0.049169813397374806, + 0.49429555357545873, + 0.5517946586078857, + -0.08994707557673931, + -0.6960011431722997, + -0.4591583030011565, + 0.7852503018115885, + 0.4948140682851688, + -0.47038559399410795, + 0.4912436967691548, + 0.11231657499851233, + -0.27502604951227594, + 0.48417222743181754, + -0.052687753072979904, + 0.6670127474591021, + 0.30068382197560684, + -0.15989096707126849, + 0.7964968667658346, + -0.22023736898019952, + 0.009818899463340608, + -0.27624497720857377, + -0.11195706703233066, + -0.6820702149869221, + -0.06261225132395354, + 0.21470277056262654, + -0.061148751516141964, + -0.2716490145181938, + -0.024430035162852137, + -0.02029584560194119, + 0.35099584390337757, + 0.3314504587754741, + 0.7013026358998468, + -0.8747883715934694, + 0.6219316176956425, + 0.34645259889795366, + 0.35920363278459866, + -0.44746218847222075, + 0.1474748391460139, + -0.6238710363368671, + 0.33674531212193426, + -0.13949708111190096, + 0.41767352662987867, + -1.0725745638866941, + 0.5937992095147564, + -0.1549103551135138, + -0.31688844046604925, + -0.20689954872574912, + 0.09264382943885413, + 0.06491034986671318, + -0.02190573598955481, + 0.07350100081424432, + -0.48193955839745484, + -1.1052615007956756, + 0.2787458925039168, + 0.6849014897895389, + 0.044141024175627375, + -1.289854668827159, + 0.4018372839848654, + -0.819558402722034, + -0.8388504070382203, + 0.27679412085399735, + -0.2844915395926377, + -0.8141983115642688, + 0.18956387049374357, + 0.1017901800511809, + 0.2908404569743219, + 0.5073783653464334, + 0.32463877253300355, + 0.6119701333811283, + -0.017041734129613045, + 0.3849866155293209, + -0.11689295589537396, + 0.7779478231018137, + -0.16544011610722853, + -0.4167644808044624, + 0.9968678212857278, + -0.1870282849237861, + -0.6138344962366461, + 0.6048205093456027, + -0.8362861934188515, + -0.2095095046830226, + 0.35250592787920443, + 0.02788453882885311, + -0.2791634562608612, + -0.038002695706205736, + -0.2693779962231848, + 0.4603367965396832, + -0.084680412018039, + 0.70685724845249, + 0.055613030674350306, + 0.4519538207323949, + 0.3677649712948833, + -0.6180465876052187, + -0.5456550602971344, + -0.30456906045358845, + 0.5461563823362896, + 0.15820422484740096, + -0.6065488499895917, + -0.0708584568199524, + -1.1596647699908469, + -0.19665891969718594, + -0.09602455824501577, + 0.1545582321012507, + -0.06677045239114121, + 0.07623491819027195, + -0.3540543383442951, + -0.47835115839729203, + 0.3929947302539749, + 0.6656164767788888, + 0.9181026865516483, + -0.2539956634562719, + 0.5516833030869368, + 1.0764452964762414, + -0.19428930226548205, + -1.2464997587163953, + 0.003035455769946682, + -0.41924538722582105, + -0.04091467927378256, + 0.04944482659557137, + -0.4595382414938842, + 0.1451372720943257, + -0.1336961570359514, + -0.1608489030980068, + 0.33404522682152427, + -0.4960211747682614, + 0.08747987834770432, + 0.37787257974642235, + -0.26825492178520177, + 0.44923399089551863, + -0.014090578684564203, + 0.004559498322101785, + -0.542947782915789, + -0.2373491164399764, + 0.012513479372571967, + -0.4088831496001435, + -0.6951037745086567, + -0.2789051531759311, + -0.005176309921690381, + 0.6559181161750798, + 0.5325568315376863, + 0.15261235217733382, + 0.3047561010796416, + 0.09348565149272303, + -0.028324962448553585, + -0.26484637717836534, + 0.03524938902954555, + -0.24325082191310088, + -0.032237207405060087, + 0.9877332831769357, + 0.46966769690937715, + 0.07204377786080773, + 0.6048473714205538, + -0.29996436499810225, + -0.7653754161718487, + -0.6093809258486583, + 0.10672143546510399, + -0.745363068424976, + -0.0743337286010558, + 0.16854298555901964, + 0.3067013317704699, + 0.1512348432440641, + 0.19408840927061438, + -0.08520811118774385, + -0.08028699052493238, + -0.001523010076707236, + -0.21846908487317493, + -0.5953231373931707, + -0.47477706772066186, + 0.7424489842249518, + 1.2769605674509776, + -0.46715995561963686, + 0.6834393492077107, + 0.11238270094634173, + 0.5850565130296799, + 0.9009902187900098, + -0.27073136410239396, + -0.3795775801513234, + 0.2882552003633597, + 1.295521146072455, + 0.27312222412624143, + -0.19590200270127323, + 0.7394557843870644, + -0.09167995988957789, + 0.007654924586497774, + -0.28964574980054425, + -0.0597901842070766, + 0.4865344704407778, + -0.5982857508322457, + 0.07926478651348501, + 0.013652269754965918, + 0.4666339795365981, + 0.22164112559575522, + 0.4424013570134504, + 0.08647302996171147, + -0.8558542400711717, + 0.6859505714656782, + 0.8067806989383706, + -0.735585163746804, + 0.10466183857593303, + 0.3345363693299583, + -0.5199523436980382, + 0.30280776986843216, + -0.9130048567734681, + -0.33896293566963465, + 0.24395570407285128, + -1.0786541066327517, + 0.30285746150166926, + -0.37104768600465343, + -0.14964629020324594, + -0.650870644699399, + -0.7807555983634265, + -0.016002074532883326, + 0.3767089351730917, + -0.2299860714695583, + 0.3388576848760531, + -1.0066936237633115, + -0.06826766554136876, + 0.18266077565605432, + -0.09234015293245412, + 0.6735631447648482, + 0.48580701925532577, + -0.6002069539722127, + 0.32844713948569787, + 0.5234554913409699, + -0.2683263762636432, + -0.5928520773314985, + -0.35947665533253337, + -0.49802384290290824, + 0.3783975442847304, + 0.7109053333709219, + -0.7506668259777434, + 0.16133991942106785, + 0.1254165082275237, + -0.664097070924529, + -0.27811500470033, + -0.22794388604080362, + -1.082501172450542, + 0.3217591151900715, + -0.4639200640406185, + -0.028506562448542216, + -0.13429613943162844, + -0.7642342132062658, + -0.2539178781448118, + -0.2691480395248165, + -0.5362536686549011, + 0.1824763647714427, + 0.4196048336695032, + 0.5224045970105168, + 0.9831782946880009, + -1.028103564970161, + 0.5516041828608416, + 0.110626811792886, + 0.13840664994446028, + -0.15370334890455029, + -0.4078686062696484, + -0.4302367441798727, + 0.2915387192844693, + 0.08356085689320575, + -0.14128997524414988, + 0.12434556309177358, + -0.8036727880099963, + -0.24548747581912567, + -0.36743889302490873, + -0.33144063433370635, + -0.5867369287426625, + -0.09051077935185337, + 0.6484159739779232, + -0.19984397587632063, + 0.3256784468959145, + 0.2643083408748784, + -0.29318200937754657, + -0.6191415357168178, + -0.01063578836803103, + -0.1544165062994819, + -0.851107472317619, + -0.12037658974428411, + -1.3008415570901974, + -0.28275482281577213, + 0.880381379577909, + -0.37667081055226626, + -0.19057919244138888, + -0.6448763770413728, + -0.33659067563497924, + 0.0692279919918869, + 0.6121491181446829, + 0.10451162864301256, + 0.42526022710465017, + 0.29026172490236135, + -0.29428920221030475, + -0.8349522521757031, + -0.19733576491149055, + 0.5979415310175922, + -0.22230133411007036, + -0.5983157433228256, + 0.30489145215969105, + 0.06700858333645865, + -0.0073440973645985674, + 0.39244915654112, + -0.3241402169219295, + 0.06047407430389079, + -0.2097662219535139, + 0.44374608890105005, + 0.21872915016170522, + -0.3611906789138857, + 0.18641657604588335, + -0.8634819256167026, + 0.19981809280730123, + -0.11234236287594301, + -0.4662954159365449, + 0.7091828664665156, + 0.8804044059903879, + 0.7628281572850474, + -0.631292051713591, + 0.2759290729462235, + -1.2790996428341264, + 0.28212379932869436, + -0.09227565159851858, + -0.7710549762839377, + -1.0030464440795615, + -1.030751788318199, + -0.6041831152965712, + -0.5120312629057311, + -0.29626347460059144, + -0.38918053808331887, + 0.2755928581642667, + 0.40909944171115376, + 0.0016872287054760515, + 0.0850923112624642, + 0.22661402466363767, + -0.34819372372835766, + -0.47765260428525536, + -0.044203443145923726, + -0.7387650405276309, + 0.5708445570667524, + 0.09682972963985914, + 0.3584111603014024, + 0.9332683085365299, + 0.04134034292134969, + 0.06087375419164176, + -0.7567248716210655, + -0.31540584227738866, + 0.5120934121646025, + -0.9270462831670941, + -0.6105168477626766, + -0.2910488517343079, + 0.113242049424916, + 0.4797196183617398, + 0.1861033880355265, + -0.5443743098520932, + -0.9422931529673044, + -0.7716217641360945, + 0.244424710893137, + 0.5598087166445058, + -0.07044312345560197, + 0.8842196827814259, + -0.16158385709239076, + 0.07380129314933415, + 0.2330182509341212, + 0.7973515336333977, + -0.2568000532848582, + 0.26635041983095564, + 0.584958417855144, + 1.4361311066408247, + 0.013757452525318126, + -0.886125798334872, + -0.830629607273935, + 0.22854812829313592, + 0.3011060301808901, + -0.23438712803751183, + 0.4991927195941458, + -0.15089594990973298, + -0.38304013919234514, + -0.6134666119421538, + 0.050077038239976335, + 0.10183687508848294, + 0.4389912933782805, + 0.41344017701993, + 0.1132394459507634, + -0.18368275340808904, + -0.4567923131166247, + 0.40158947534017253, + -0.7463442844797609, + 0.13556180052128441, + 0.010683647174218103, + 0.3736058395739117, + 1.2121201301364708, + -0.44202269818052486, + -0.3684219485462167, + 0.14066377855910672, + -0.03349535861243602, + -0.2579696088520498, + 0.7812729284432711, + 0.26452633867314745, + -0.39713233981091356, + 0.6271447115846247, + -0.14677896608331464, + 0.6782909023117026, + -0.23321499121676315, + 0.01782074114874188, + 0.8075659079527546, + -0.5823696772285858, + 0.36729578839902444, + 0.4051262185071905, + -0.10028459861547143, + -0.5743186747143576, + 0.5079109094891985, + -0.030839924923985906, + -0.21440825016528647, + -0.34655280363157204, + -0.08822077763861258, + 0.18351391954166107, + 0.41379511032435984, + -0.043071941523187274, + 0.5360695059928035, + 1.4606752417473037, + -0.2182799020788339, + -0.45196742054309763, + 1.1814662177709192, + 0.5048653523549688, + -0.3095771305025989, + -1.0287477348558494, + -0.010396853837703945, + 0.3640014706145672, + 0.09144822055242008, + -0.6874382095740924, + 0.32298208956226765, + 0.3995960033251268, + 0.2413717610910162, + 0.4766643041293561, + -0.06133515799739775, + -0.8123392292347803, + -0.16153963655801462, + 0.12617675106314374, + 0.14590563445777205, + 0.7815954043483285, + -0.4415548885735795, + 0.038918598506401114, + 0.09023995679531271, + -1.5965537839224304, + -0.14937645418284312, + 0.37589552504759216, + 0.21317879810277165, + -0.5742228545983774, + -0.056635205268882216, + 0.7191389891586834, + -0.4596144672876017, + 0.334072042769497, + -0.9366488881087729, + -0.5400240328573243, + 0.22366094782937562, + -0.6405081808675565, + -0.03392775526370165, + -0.42638683756110973, + -0.24236640864723746, + 0.4231783274954368, + 0.321774916158731, + -0.5149804087905806, + 0.1673876660532705, + 0.20182423162099838, + 0.4775612896746765, + -0.21179953279673053, + -1.0312624596215725, + 0.5337664571271366, + -0.012109728336379022, + -0.7061102777077144, + 0.03982069562285759, + -0.226185898124867, + 0.5311967640734399, + -0.2141535486038243, + 0.09357213250227447, + -0.49286499783993143, + -0.5936930257823756, + -1.2947818210093072, + -0.28981658660678766, + -0.16289815829108312, + -0.09719215078866801, + 0.17658314640534423, + -0.1692419217308454, + 0.14770070506951472, + -0.08423048813480716, + -0.6587987678039797, + 0.5032712826398206, + -0.5699392805645227, + -0.6585575336699326, + 0.05903426349553936, + 1.0609274495042973, + 0.30391099354721623, + -0.6484972732805546, + 0.011434031149441082, + 0.4996511161474554, + 0.25238746061410877, + -0.42031001325227657, + -0.2733667841006897, + 0.11946604958484719, + 0.18341220590734375, + 0.19587907452191095, + 0.46120509224925127, + -0.8076878447347209, + 0.16116023460566992, + -0.6085792604127482, + -0.7606580259612259, + -0.49915544907398024, + 0.21581015635902423, + -0.20186504516830484, + 0.012097803195458057, + 0.4518509303650641, + -0.1621796408608016, + 0.5895198955799014, + -0.593839694230782, + 0.23230864864919654, + -0.10057982793641967, + -0.141643935773071, + 0.1294524868520387, + -0.29334690073763736, + 0.23745182831126233, + -0.4356486487286221, + 0.6729898401233743, + -0.06318978977320588, + -0.9694644995291425, + 0.5001656623027874, + 0.33887248526242575, + -0.25695392482945745, + -0.08979089096979898, + -0.17531504963677957, + -0.2445935650738318, + -0.31736073428088496, + -0.5548499209781116, + -0.20490932846425625, + 0.12062882730927127, + -0.33628685060136565, + -0.949940967447608, + 0.06631687319128687, + 0.4872646523353208, + -0.5535403346434864, + 0.06019058197679916, + 1.086334773007018, + -0.42371083857521086, + 0.26766409297696137, + 0.045266641152080345, + -0.16599016528450727, + -0.09524983988953328, + -0.3547259085695198, + 0.21774318528492165, + -0.25655289908804146, + 0.12977333879195863, + -0.3694052404437515, + -0.3076837420065268, + 0.46771935102229767, + -0.5429910580875161, + 0.267981722557024, + -0.4040288991405725, + -0.1836436567006703, + -0.9190918383975613, + 0.11173299118592606, + 0.17465839805909877, + 0.009709802943866253, + 0.15158989141713775, + -0.399970950971025, + 0.808155304218294, + 0.526841209573177, + 0.5339014607895964, + -0.47515379598678775, + -0.8553066862909624, + 0.05222460926873573, + 0.08441086159500533, + -0.035026081556590705, + -0.5809391513040953, + 0.46367656709528704, + -0.11918449136739256, + -0.4875988148912149, + -0.2505470849699226, + -0.0947908082993717, + -0.5005230462835706, + 1.3516161464996186, + -0.3389376597654538, + 0.3270378415637119, + 0.9153164484282286, + -0.25560129976249035, + -0.6868292725814786, + 0.06872425731384602, + -0.4764372736014695, + -0.8061391289943227, + -0.6574572267920238, + -0.8199822646856965, + -0.371063745535946, + -0.03771681945079619, + 0.8009829059485842, + 0.12303124406497412, + 0.42162329765809586, + -1.0854713587489067, + 0.08794290621616829, + -0.06160240339224282, + -0.27574268802023383, + -0.021801223186226792, + -0.8475255202153765, + 0.31132468086722587, + -0.0973037276186215, + 0.3712352928490241, + 0.6600112556103529, + 0.3058845454526427, + 0.018518398524206003, + 0.21465111225862998, + 0.34621048993692805, + 0.7031587318359169, + 0.04155278631434739, + 0.7523601870155011, + -0.38002798184480135, + -0.04121987646725156, + 0.7287757497324652, + 0.15460453852493172, + 0.3760782027952916, + -0.15958725520959027, + -0.6702252230115723, + 0.9375862348228723, + -0.05751303957370868, + 0.08006639778332025, + -0.33567003822523284, + -0.10659831411884457, + 0.3759846658694095, + 0.1595269678333091, + 0.3980129284017444, + -0.5380035692992993, + -0.01065582433597112, + -0.9505953428765035, + 0.03033040690731037, + 0.3542033834552314, + 0.7568571963064136, + 0.9015698381279725, + 0.7920679715027449, + -0.1335633255057418, + -0.2543625116149669, + 0.7905953510160666, + -0.44751915703805767, + 0.24153052584171975, + -0.0733965059927747, + -0.8061103141277122, + -0.44841965793276595, + 0.13426532395291613, + 0.44559611270764365, + 1.0759077006646525, + 0.35957665962121, + 0.10556511941384716, + 0.4935897635755919, + 0.06562848354615236, + -0.03842594147938394, + 0.1124279909040391, + 0.32500129041172987, + -0.08432733598336378, + -0.22097032478470435, + 0.545199538721423, + -0.705466189873135, + 0.04929406614213089, + -0.0094248114724238, + -0.3541072116282786, + -0.11660806563175083, + -0.47656831695662255, + -0.14356208260091208, + 0.30621868732021895, + -0.18075176260305081, + 0.571863103660331, + -0.054279852888261565, + 0.01661499532223032, + 0.1040584286362698, + 0.06426875571946533, + 0.9409245227488195, + 0.27436245387048075, + -0.04642245057055727, + -0.07992819599870016, + 0.5138375704629791, + -0.6328539204323502, + 0.43308742410725065, + -0.4847286002633684, + -0.21359718093584246, + 0.3231136549219015, + -0.887655446304756, + 0.59681841587824, + -0.45957708680500087, + -0.5002911590214891, + 0.33531010453832244, + -0.6962326500321644, + 0.1250232572994765, + -0.1443468146399285, + -0.13016091938561036, + 0.06715437073527386, + -0.40540413657989105, + -0.3967443602761067, + 0.8742659866190903, + -0.6521701214390763, + 0.8312459940178372, + -0.5162731021708287, + -0.5633525684137917, + 0.5454832151075991, + 0.20540714397729243, + 0.5528523342429679, + 0.10746051514436766, + 0.15401714209287065, + -0.3898302661346699, + -0.6551543730598043, + -0.697841905394978, + 0.28108401328915106, + 0.10461093687226386, + 0.8417190961104751, + 0.4029350332480943, + -0.48242581654872874, + -0.8077914117741158, + 0.617174435939961, + 0.2962321295764472, + 0.013202878479463553, + -0.14008057940980345, + 0.4048017599608231, + -0.21203052223204483, + 0.23691967353545806, + 0.007226135439139636, + -0.2731421240018499, + -0.003211134905468871, + 0.21819294526328425, + 0.05480490196291532, + 0.044181479602667606, + 0.18500551494106388, + 0.12939803133355118, + -0.7993235852523586, + -0.28045972397061947, + 0.1477401590145802, + -0.3484772022553678, + 0.16690974487800497, + -0.5865623187933207, + -0.18482109609904684, + 0.0536510720021145, + -0.22385846290513878, + 0.7854380760342496, + 0.5633837344549026, + 0.5969625031995277, + -0.07147154738185346, + -0.8662574997425458, + -1.1156500730963161, + -0.3190255507203785, + -0.25042223747222847, + 0.9005288670763695, + 0.2713368998670109, + 0.39389187595411945, + 0.310423799125558, + 0.08407190929239483, + 0.23604528884856368, + 0.9896499051878939, + -0.3739551280587669, + 0.5363715128699033, + -0.1196234320555748, + -1.0370413348749867, + 0.4596922957932117, + 1.2651437613731649, + 0.14300211094005544, + -0.5504798174992853, + -0.9791737271102969, + 0.6147747972262085, + -0.24834961161826108, + 0.23265522839002672, + 0.05297417715206798, + -1.3221716735085174, + 0.7514851641975766, + -0.12686983074728675, + -0.23384658588271656, + -0.5428931624696736, + -0.04899157673544774, + -0.15402526975205122, + 0.19582428371089555, + -0.1345634706225537, + 0.17159613774870527, + -0.31078594492802547, + 0.184805168021817, + -0.1885501969510932, + 0.014631406842489203, + -0.5630251253860841, + 0.02569686179424313, + 0.8865162341034407, + -0.6309607503569958, + 0.4528661504313094, + 0.32688316932440986, + 0.29783064702174605, + -0.6872190465854088, + 1.0678371069893478, + -1.5688742668299969, + -0.5280284045330259, + -0.11161945706457982, + 0.027447000308143177, + -0.1427770374288284, + -0.26056121418966915, + -0.3226077929750285, + -0.27780223300172424, + -0.044790340627624436, + 0.09866921015366314, + 0.07563664182675578, + 0.09745414017634052, + -0.5668850484335324, + -0.29677836114043094, + 1.4701943173321403, + -0.32795038826488043, + -0.09736809735938745, + 0.009354378222948712, + 0.19425922654444294, + -0.5620563599930067, + -0.47376323106142904, + 0.38643883391180456, + -0.20352614356226761, + 0.485828367270643, + 0.6898090823944651, + 0.3133586122949825, + -0.4311967361913794, + -0.47656252268804333, + -0.2565427100486466, + -0.3625478934239985, + -0.25808914355747925, + 0.3207407976114761, + -0.21596127233697032, + -0.40020476261384114, + -0.377145664906787, + -0.5944566857373215, + -0.35415192360053194, + -0.1757241037707915, + -0.5350751191582137, + 0.013260629624530118, + 0.4409373256138589, + 0.08153348197188204, + 0.37245132240322454 + ], + "yaxis": "y2" } - ], - "source": [ - "%run download_dataset" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "wrDpshHUnFOd" - }, - "source": [ - "## Model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 49, - "referenced_widgets": [ - "94494955b6a94cf2a46a27d1d7016226", - "a5d8febd3dbb4cf0b6627d69c193d5e9", - "fc0529982c3541d3b828ecd22d393cb2", - "68f7078a7fe14149a1f0bfaeed27af3d", - "492d7a3140b74aa285c2d601ab05310d", - "53c9e0bce43241da9a24c5727b08a33f", - "91157c29d648453e8f634255a867f853", - "6e97b634bff64e7c8dc288df99b583e4", - "4ab291df191942a2af948edc15e83174", - "442f227cd54a449ca76b191d151b64b2", - "47c7b76960c842b7b46d6a121e01842c" - ] - }, - "id": "IKm2VnUKnFOe", - "outputId": "0ca1d7ea-1720-4687-8383-cd2252dd3087" - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "94494955b6a94cf2a46a27d1d7016226", - "version_major": 2, - "version_minor": 0 + ], + "layout": { + "height": 800, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } }, - "text/plain": [ - "generation_config.json: 0%| | 0.00/147 [00:00
" ] - }, + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import plotly.graph_objects as go\n", + "from plotly.subplots import make_subplots\n", + "\n", + "# Generate sample data\n", + "np.random.seed(42)\n", + "n_points = 1000\n", + "times = pd.date_range(start='2023-01-01', periods=n_points, freq='H')\n", + "predictions = np.random.normal(loc=0, scale=1, size=n_points) + np.sin(np.linspace(0, 10, n_points))\n", + "targets = predictions + np.random.normal(loc=0, scale=0.5, size=n_points)\n", + "differences = predictions - targets\n", + "\n", + "# Create DataFrame\n", + "df = pd.DataFrame({\n", + " 'time': times,\n", + " 'difference': differences\n", + "})\n", + "\n", + "# Create 2D histogram\n", + "fig = make_subplots(rows=2, cols=1, row_heights=[0.8, 0.2], vertical_spacing=0.05)\n", + "\n", + "heatmap = go.Histogram2d(\n", + " x=df['time'],\n", + " y=df['difference'],\n", + " colorscale='Viridis',\n", + " nbinsx=100,\n", + " nbinsy=50,\n", + " colorbar=dict(title='Density'),\n", + ")\n", + "\n", + "fig.add_trace(heatmap, row=1, col=1)\n", + "\n", + "# Add a line plot to show the trend of differences\n", + "line = go.Scatter(\n", + " x=df['time'],\n", + " y=df['difference'],\n", + " mode='lines',\n", + " line=dict(color='rgba(255, 255, 255, 0.5)'),\n", + " name='Difference Trend'\n", + ")\n", + "\n", + "fig.add_trace(line, row=2, col=1)\n", + "\n", + "# Update layout\n", + "fig.update_layout(\n", + " title='Temporal Density Heatmap of Prediction-Target Differences',\n", + " xaxis_title='Time',\n", + " yaxis_title='Prediction - Target',\n", + " height=800,\n", + " width=1200,\n", + ")\n", + "\n", + "fig.update_xaxes(title_text=\"Time\", row=2, col=1)\n", + "fig.update_yaxes(title_text=\"Difference\", row=2, col=1)\n", + "\n", + "# Show the plot\n", + "fig.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "id": "NMCRynUDpAz6" - }, - "source": [ - "## Data" + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0wAAAINCAYAAAAN7v/KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9eZwcdZ3///pUX3PPJJmZnJODHBAIgUAU4oEg4sV64SqouyLei37dxYNdXV3BY2F1UXf3t6K7Kiiiggu6KKuoeCKCBAIhIQTIfWeSzN1XVX0+vz8+9amu7q6qruquPmbyfvIIyUxXV326uqo+79fnfTEhhABBEARBEARBEARRhtbsARAEQRAEQRAEQbQqJJgIgiAIgiAIgiA8IMFEEARBEARBEAThAQkmgiAIgiAIgiAID0gwEQRBEARBEARBeECCiSAIgiAIgiAIwgMSTARBEARBEARBEB6QYCIIgiAIgiAIgvAg3uwBNBLOOQ4ePIju7m4wxpo9HIIgCIIgCIIgmoQQAhMTE1iwYAE0zduPdFIJpoMHD2JoaKjZwyAIgiAIgiAIokXYt28fFi1a5Pn6SSWYuru7AciT0tPT0+TREARBEARBEATRLMbHxzE0NGRrBC9OKsGkwvB6enpIMBEEQRAEQRAEUTFVh4o+EARBEARBEARBeECCiSAIgiAIgiAIwgMSTARBEARBEARBEB6cVDlMBEEQBEEQrYAQAoZhwDTNZg+FIGYssVgM8Xi85nZCJJgIgiAIgiAaSD6fx6FDh5BOp5s9FIKY8XR0dGD+/PlIJpNV74MEE0EQBEEQRIPgnGPXrl2IxWJYsGABkslkzavfBEGUI4RAPp/H8PAwdu3ahZUrV/o2p/WDBBNBEARBEESDyOfz4JxjaGgIHR0dzR4OQcxo2tvbkUgksGfPHuTzebS1tVW1Hyr6QBAEQRAE0WCqXekmCCIcUdxrdLcSBEEQBEEQBEF4QIKJIAiCIAiCIAjCAxJMBEEQBEEQBBGS3/72t2CMYXR0FABw6623oq+vr6Z9RrEPInpIMBEEQRAEQRC+vOMd7wBjDO9///vLXrv66qvBGMM73vGOxg+shFtvvRWMMfvP/Pnz8eY3vxm7du2q+7Evv/xyPPPMM4G3X7p0Kb7yla/UtA+iMZBgIgiCIAiCICoyNDSEH/zgB8hkMvbvstksvv/972Px4sVNHFkxPT09OHToEA4ePIjvfe97ePzxx/Ha177WtUmwaiAcBe3t7RgcHGz6PojoIcFEEARBEATRJIQApqaa80eIcGM955xzsHjxYtx999327+6++24MDQ1h3bp1JZ9L4Atf+AJOOeUUtLe346yzzsL//M//2K+bpol3vetdWLZsGdrb23Hqqafi3/7t34r28Y53vAOvf/3r8a//+q+YP38+5syZgw984APQdd13nIwxzJs3D/Pnz8dFF12ET3/609iyZQuee+45O4zuvvvuw/r165FKpfCHP/yh4ngB4P/+7/+watUqtLe346KLLsLu3buLXncLp7vnnnuwfv16tLW1ob+/H5dddhkA4MILL8SePXtwzTXX2N4wr33cfPPNWL58OZLJJE499VTcdtttZZ/3G9/4Bt7whjego6MDK1euxD333ON7johwkGAiCIIgCIJoEuk00NXVnD/pdPjxXnXVVbjlllvsn7/1rW/hne98Z9l2n/zkJ3HLLbfg5ptvxtatW3HNNdfgr/7qr/C73/0OgGzgu2jRItx555146qmn8E//9E/4xCc+gTvvvLNoP7/5zW+wY8cO/OY3v8G3v/1t3Hrrrbj11ltDjbm9vR0AioTWtddeixtuuAHbtm3D2rVrK4533759uOyyy/DqV78ajz/+ON797nfjH/7hH3yPe++99+Kyyy7DpZdeik2bNuH+++/H+vXrAUihuWjRInzmM5/BoUOHcOjQIdd9/OhHP8Lf/u3f4iMf+Qi2bNmC973vfbjqqqvwm9/8pmi766+/Hm9+85uxefNmvPrVr8bb3vY2nDhxItR5InwQJxFjY2MCgBgbG2v2UAiCIAiCOAnJZDLiqaeeEplMRgghxOSkENLX0/g/k5PBx33llVeK173udWJ4eFikUimxa9cusXv3btHW1iaGh4fF6173OnHllVdan2lStLW1iQcffLBoH+9617vEW97yFs9jXH311eKNb3xj0TGXLFkiDMOwf/emN71JXH755Z77uOWWW0Rvb6/98759+8T5558vFi1aJHK5nPjNb34jAIgf//jH9jZBxvvxj39crF69WnDO7df//u//XgAQIyMjrsfesGGDeNvb3uY51iVLlogvf/nLvuN/wQteIN7znvcUbfOmN71JvPrVr7Z/BiA++clPFn0expj42c9+5nnsk4nSe85JUG0Qb6pa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ALNmzQJjDO94xztCfb777rsP69evRyqVwje/+U0wxvD0008XjeFLX/oSli5daouqd73rXVi2bBna29tx6qmn4t/+7d9CfaYoIMFEEARBEARBeGIYBkzTRFtbW9Hv29vb8cADDxT97re//S0GBwexatUqvOc978HRo0ft18466yxs3LgRIyMjePTRR5HJZLBixQo88MADeOyxx/ChD30o0Hhuv/12vOxlL8O6devKXkskEujs7AQgRdhdd92Fb3/723jsscewYsUKvOIVr8CJEyeK3vOP//iPuOmmm7Bx40bE43G8853vBABcfvnl+NWvfgUA+POf/4xDhw5haGio7Jg33XQTvvWtb+Gb3/wmHnjgAZw4cQI/+tGPirb55Cc/iVtuuQU333wztm7dimuuuQZ/9Vd/hd/97neBxgIA9957Ly677DJceuml2LRpky2uFFdddRX++Mc/4gc/+AE2b96MN73pTXjlK1+JZ599NtB5VVx//fV485vfjM2bN+PVr3413va2t+HEiRMYGhrCXXfdBQDYvn07Dh06ZIuXoJ/v2muvxQ033IBt27bhL//yL3Huuefi9ttvL9rme9/7Ht761reCMQbOORYtWoQ777wTTz31FP7pn/4Jn/jEJ3DnnXeG+kw1I04ixsbGBAAxNjbW7KEQBEEQBHESkslkxFNPPSUymYz9u7RuiEcOnhBPHBkVW4fH6/7niSOj4pGDJ0RaNwKPe8OGDeIlL3mJOHDggDAMQ9x2222CMSZWrVplb/ODH/xA/PSnPxVPPvmkuOeee8RZZ50lzjjjDJHNZu1tPv3pT4vly5eLNWvWiLvvvlvkcjmxZs0asXHjRvEf//EfYtWqVeIFL3iB2LJli+dY2tvbxYc+9CHf8U5OTopEIiFuv/12+3f5fF4sWLBAfOELXxBCCPGb3/xGABC/+tWv7G3uvfdeAcD+fjZt2iQAiF27dhV9hrPOOsv+ef78+eLGG2+0f9Z1XSxatEi87nWvs8fS1tYmHnzwwaIxvutd7xJvectbAo9lw4YN4m1ve5vr533uuecEY0wcOHCg6PcXX3yx+PjHP+55npYsWSK+/OUv2z8DEJ/85CftnycnJwVjTPzsZz8rGufIyEjRNkE/349//OOibb70pS+JU045xf55+/btAoDYunWr55ivvvpq8cY3vtH++corr7TPtRtu95wiqDaYHoGDBEEQBEEQRNO47bbb8M53vhMLFy5ELBbDOeecg7e+9a147LHH7G0uv/xy+99r1qzB+vXrsWTJEtszAgDXXXcdrrvuOnu76667Di972cuQSCTwuc99Dk8++SR++tOf4u1vfzseffRR17EIIcCYf1jhjh07oOs6XvjCF9q/SyQSeP7zn49t27YVbbt27Vr73ypP6ejRo4HCA8fGxnDo0CFs2LDB/l08Hsf69evtsLynnnoK2WwWl1xySdF78/l8mZfMbyyPP/443vOe97iO47HHHoMQAqtWrSr6fS6Xw5w5cyp+Dq8xdHZ2oru7u8hTWEqYz+f0iAHAFVdcgY997GN46KGHcP755+P222/H2WefjdNPP93e5mtf+xq+8Y1vYM+ePchkMsjn85HlqAWFBBNBEARBEAThy/Lly/G73/0OU1NTGB8fx/z583H55Zdj2bJlnu+ZP38+lixZ4hkS9vTTT+P222/Hpk2b8K1vfQsXXHABBgYG8OY3vxnvfOc7MT4+jp6enrL3rVq1qkz0lKLESqmwchNbiUSh9IV6jfPgFQQrofZ17733FhXIAGTOV9CxtLe3+x4jFovh0UcfRSwWK3otbIEK5xjUOPzOR5jPp8IlFfPnz8dFF12E733vezj//PPx/e9/H+973/vs1++8805cc801uOmmm7BhwwZ0d3fji1/8Ih5++OFQn6lWKIeJIAiCIAiCCERnZyfmz5+PkZER3HfffXjd617nue3x48exb9++oupyCiEE3vve9+Kmm25CV1cXTNO0y4Grv72M9Le+9a341a9+hU2bNpW9ZhgGpqamsGLFCiSTyaIcK13XsXHjRqxevTrUZ/ajt7cX8+fPx0MPPVQ0Bqd37PTTT0cqlcLevXuxYsWKoj9uOVFerF271rOK4Lp162CaJo4ePVp2jHnz5lX/AUtQVQ9N07R/V+vne9vb3oY77rgDf/rTn7Bjxw5cccUV9mt/+MMf8IIXvABXX3011q1bhxUrVmDHjh2RfZ6gkIeJIAiCIAiC8OW+++6DEAKnnnoqnnvuOXzsYx/DqaeeiquuugoAMDk5ieuuuw5vfOMbMX/+fOzevRuf+MQn0N/fjze84Q1l+/vv//5vDA4O4rWvfS0A4IUvfCGuu+46PPTQQ/jZz36G008/HX19fa5j+bu/+zvce++9uPjii/HZz34WL3rRi9Dd3Y2NGzfiX/7lX/DNb34TZ599Nv7mb/4GH/vYx+y+T1/4wheQTqfxrne9K9Jz87d/+7e48cYbsXLlSqxevdpubqvo7u7GRz/6UVxzzTXgnONFL3oRxsfH8eCDD6KrqwtXXnlloON8+tOfxsUXX4zly5fjiiuugGEY+NnPfoZrr70Wq1atwtve9ja8/e1vx0033YR169bh2LFj+PWvf40zzzwTr371qyP5rEuWLAFjDD/96U/x6le/Gu3t7TV/vssuuwx/8zd/g7/5m7/BRRddVOSlWrFiBb7zne/gvvvuw7Jly3DbbbfhkUce8fVs1gMSTARBEARBEC2AwQWA6ELB/I8TjrGxMXz84x/H/v37MXv2bLzxjW/E5z//eTt8KxaL4cknn8R3vvMdjI6O2qFWd9xxB7q7u4v2deTIEfzzP/8zHnzwQft3z3/+8/GRj3wEl156KQYHB/Htb3/bcyypVAq//OUv8eUvfxlf//rX8dGPfhQdHR1YvXo1PvShD2HNmjUAgBtvvBGcc/z1X/81JiYmsH79etx3332YNWtW6M/vx0c+8hEcOnQI73jHO6BpGt75znfiDW94A8bGxuxtPvvZz2JwcBA33HADdu7cib6+Ppxzzjn4xCc+Efg4F154IX74wx/is5/9LG688Ub09PTgggsusF+/5ZZb8LnPfQ4f+chHcODAAcyZMwcbNmyITCwBwMKFC3H99dfjH/7hH3DVVVfh7W9/O2699daaPl9PTw9e85rX4Ic//CG+9a1vFb32/ve/H48//jguv/xyMMbwlre8BVdffTV+9rOfRfaZgsCEEOHvmmnK+Pg4ent7MTY25hoTSxAEQRAEUU+y2Sx27dqFZcuW2WW6dZNj2/EJ5M36iyVFMqZh9ZxuJGKUnUHMbNzuOUVQbUAeJoIgCIIgiCaSsMSL0cA17DhjJJYIIiAkmAiCIAiCIJpMIqYhUXkzgiCaAC0tEARBEARBEARBeDBtBNPNN9+MtWvXoqenBz09PdiwYUPDE74IgiAIgiAIgji5mDaCadGiRbjxxhuxceNGbNy4ES996Uvxute9Dlu3bm320IiTgIxu4pkTkzCrqCxEEARBEARBTF+mTQ7Ta17zmqKfP//5z+Pmm2/GQw89hDPOOKNJoyJOFvKcI6ObyBgmupLT5rYhCIIgWpSTqEgxQTSVKO61aWn5maaJH/7wh5iamsKGDRs8t8vlcsjlcvbP4+PjjRgeMQMRAtC5IMFEEARB1ITqW5ROp9He3t7k0RDEzCedTgMo3HvVMK0svyeffBIbNmxANptFV1cXfvSjH+H000/33P6GG27A9ddf38AREjMVLgQMzjGlmxho9mAIgiCIaUssFkNfXx+OHj0KAOjo6ABjrMmjak2UZ4DOD1ENQgik02kcPXoUfX19iMViVe9rWjWuzefz2Lt3L0ZHR3HXXXfhG9/4Bn73u995iiY3D9PQ0BA1riVCczyTx/bjk+hOxrFmoJse3gRBEETVCCFw+PBhjI6ONnsoLY3BOQSAhDZtUu6JFqSvrw/z5s1ztd2CNq6dVoKplJe97GVYvnw5vv71rwfaPuhJIYhShtM5PHtiCqmYhjMGutEWr36VgiAIgiAAmWKg63qzh9GS5AwTz41MQWMMq2Z3IabRQiURnkQi4etZCqoNplVIXilCiCIPEkHUCyEAxlQeEyfBRBAEQdRMLBarKUxoJnNsPIMciyOhMSCeQBvlDxNNZNpcfZ/4xCfwqle9CkNDQ5iYmMAPfvAD/Pa3v8XPf/7zZg+NOAngEGBgAAQyuolZbdSPnSAIgiDqQd7kOJbJIxXToHOBtGGikwQT0USmzdV35MgR/PVf/zUOHTqE3t5erF27Fj//+c9xySWXNHtoxEmADFwV0BjDRN5o9nAIgiAIYsZyPJNHxjDRk4xDzxtI62azh0Sc5EwbwfTNb36z2UMgTmJkv1qGuMaQ1g0YXCBO8dQEQRAEESkG5xieyiGhaWCMIa5pmMgbEEJQwSWiaVDZEYIIgKyNIpDQNLsfE0EQBEEQ0XIioyNtmGiLSxM1rjHkDI6cyZs8MuJkhgQTQQSAW8UkNSb/naHwAIIgCIKIFJMLHJnKIcYYNMublNCYXXCJIJoFCSaCCIAKyWNMln6geGqCIAiCiJaRrI60bqI9UagcKMPwaKGSaC4kmAgiAKbgUKHTMU3DeF7HNG5hRhAEQRAtBRcCR6eyYAy2d0lBBZeIZkOCiSACwAWgHt8JjSFvCmQpnpogCIIgImE0q2NCN9Hu0ufQWXCJIJoBCSaCCIDpEExxjcHkFB5AEARBEFGR1k0IIRBzqUBLBZeIZkOCiSACIERBMTHGIEAPboIgCIKICuk9ci8bTgWXiGZDgokgAmAKAeZ4kGuMYSJHD26CIAiCiAKdc3i1N1QFl6Z0ymMimgMJJoIIgBCiaN0roTGkDQMGpzwmgiAIgqgVgwv49aWNORrYEkSjIcFEEBUQQsAsiRSIaxoMLpDRSTARBEEQRK0YnEPzCMkDVMElTgWXiKZAgokgKiBQ7mGKaQxcCKQpj4kgCIIgaoILUdHDFNeYtVBJ8y7ReEgwEUQFhJCiqfQ5zsAwRX0hCIIgCKImTCEgUN5/yQmzXqPG8UQzIMFEEBXgkPHSrORBHtcYJpsUT53WTXCK4w6EEAIm9e4gCIJoWUwuivodehFjct4liEZDgokgKiCE/FNKTGPQuYDeYGM8b3LsHJ2irucBGc3p2Dk61exhEHVkNKtj/3im2cMgCKJKuBAy9N0vJg8yfzhtmNApj4loMCSYCKIC3AoVKAvJY4CAgNlgT89k3kDO4NTxPCBZgyNjmFRZaQZzIpPHcDpHVSsDonNO9wPRUpgc4AKeZcUV8RiDblIfRKLxkGAiiAoI6/+lC18aGLgAeIOFy3jeQM4kwRQU3TpXdL5mJgbnGMsZyJuCchsCIITAjhNTOJHVmz0UgrCROUwiUEiebBxPiyNEYyHBRBAVEEJYIXnFj3LGZKheIz1MJhcYy+owOeXlBCVncnDReE8g0Rgm8ibyXH7HUySYKpIzOdKGiWyAFfpj6XzdC9tM6QaFFxP287lSSB5ABZeI5kCCiSAqwD2r5MmQvEbqlildepc0jVH4UUCyBgcXIA/TDGU8p0MImVM4niMjqhIZgyNviSY/hBA4MpWru5g5kc7jyFSurseYyQghsHssPe1LbYdZANQ0KfwJopGQYCKICqiiD6ULX2olrJHV6ibzsjpeXGPQSTBVxOQChpWv0SoeuVzEoSQncz4KF9LjmtAYEhrDlG7QfVGBjG7KXjZ5/7w+nQvkTVM27a4jhhCBvF2EO6YQmMwb076Za5gIAAZGEQNEwyHBRBAVkGXFvWKrG/fgFkJgJJtHjDFoAPL1tmRmADrnMIX0ErbCBJszOJ4bmYwsYVnlo5ysIU3KUEzGNCRiGnSTI50n49sPVZK5UoXPnMmhc1H3BSGDC+gmb5kFjemGYYVnT/c2E6E8TEx+7pN1oYhoDiSYCKICqnGtF42a5zNWtbdkTIPGKCQvCMrgE2iNkDwp4ERkJXFNoTwBzf9szWAiZ4ALgZjGoDEGAWCKvBWemFxgSjfQFo/BFMI3rElV4qy3kDG4zC8kz2B1mEI+46a7YJLP58r5S4D0MMnPXN8xEYSTeLMHQBCtjpqI3JNRGxfqNZk3YHCgPS69WoYlBvw6o1d9rFztRmdXKhbBSGpDtwo+aEyG/jQb9b1FJd6EVcziZBTPQgiM5HTEHHWINSbzmBZ0NXFgLUzGMKFzgbZ4DGldtifoTrpvmzNNGdIq6nttSVEm+8u1xZv/zJhumJbgbAUPei3onFcsKa5gDOBcPk9jAUUWQdQKCSaCqECleahRK3tjOR0MUrhpjFn5OQLJWLAJIwoRFIZqjxel0HKGHJktEOOvqhtGJZi4iHZ/04m0biKjm0jGC4ESCU1DWjcwljGKhFQUCCGQMwXa4tEHZjRqcSFjmOACUI8MPw/TlG6CQ6Ce1ZtVbiEXjW8APlMwhRSc033NxODlrTu8aFYPROLkhgQTQVSAu9bIU7CGeC7yJsdE3rDFkcYAw2XCaLQoqgeVPkMY41KF+TDGkG8BgyxqDxOHNBzyLSAGG4W6PqbyJnqSCSRjGph1f7bHZHiizkXkgilnCkzkdSRjSX+vrmX8J2LBhVWt923Qe0L2qRJgjIExhozhnvsmhOxpJRdm6ndtmUI+X01xcl3DUaI8TNM/JI9DC+gtalYPROLkhgQTQVRAzkPuD2bG0JBwqMm8bMzZlZSGEQNDTyKJTJ7DnP4aKRR+xmWp4ZgzuPTIAdBbIM9H5WvkI7pmuNUjbKaV2K0oIIRA1uRg1n8K+W8OnXO0RZyiq3ImRIVUC50LjOZ0zG5LRi7avAgkuIQA58CcthQSmoZESoMmGCazRlkJUINzdMbjyBpmXUOO1fUrABJMVWJYYqkVQo6rhVsLSaE8TC1SyIc4eSDBRBAV8PMwaQAakWM+kTcwK5VAKiYFgYjJFVlaYCum1HCMQcOsVBLjeb3uuRhBUOFHURmHytjUTVlaPEjTx1ahFq+KYZ1DN0HCwGRuTsKlF0ANSONeQPh6nAttCHiL5VeYVi8y5R3TGLNyXwoheva2XI5/TlsKDHAVVVFgcI6eZAKd8Tgg2IzwkCsaFWZpcik6p3OVQVWYJ+jzS/VAbIE1MOIkggQTQVTA38PEYNbREJ/MyV4phomiMCC1qt7osqqTeQMxxtCeaP3kbGEVQ9AA9CUTAICJrFE2KTeyOIXOeaSr6WqF3rC8HwHT2RpKPYzgvCnsfmSlxKweZW5CoBaKPEx+2wFWI4LWQlWMVOeMobBKXyrslPHNLNOUoz4lddX5lFU/PRreTVOCXve1Pn8MLuywxumKLGAEJAJ7mBrfA5EgSDARRAWk7eDVhanQDyKq1f3SiTZvysRoN+Ow0YuKWauseTtaXzBxy/uiOSZXN3vMy7Cph5DSrRX+QvW+2q4Z+RkFuJAiIaY173tppHcgZ5pASTieQvZoQeR5TAaXq+CV7jmhPFEtZsup0GF1zuzEeS5QejsrbyxjCBSGWC3Cun5jjEFYgrRBUYwtQ5gQYzdUnua09zAJAcbCyfLp/JmJ6QcJJoKogPTieOcw2eEENRzDb9KUXgkBzWUyEQ1cxxZWnLnGpsck5RRIasQcInBicT2ElG5K45Bb4VFBKxx6oT6jygGoN60QMsW5QM7gnt4jO4/J5JFWtDOt50Cls6yeFq22+i3z5sq91G6eCd0URWK09iecO8qPpTxMpgh+f54MuN1vpc8f9V1NZw+TyaVnNqxYbrV7jJjZkGAiiAr4PZSZvTJanbcgUHK7YbqupFcaW9SYzgaw0yB0xrRWr5mlmKSwqH2/1VbxUyGCcY3ZAidZo0NI9XqMUjC1gijyI2fKcDs/scnAkDM5uiO6TlX5a5mf5H+e1XXWSqacEMIS66WvsLJy3sJqIquxQthevR4zhR53hZyURH0ONWMovT/lIlb0kQ6NxFQeplDvmt4ikZh+kGAiiAr4heRpAAwhV8jCLGYHNUq58AstauyEoXQSr2NOQ5RwK46IgQFMJus34nR5fbdCCHTG4+iMw9FstjbFJKCMDOYrmFpdBIVBekoEmM8VGHUek1MAVfYwtV5InsHdw3o1JguGOBdATCv0UGPM9s7W7aNY+aHyu2TkMQiJEALtsRgS7RriTBbN6G6bfmadaQvnMDdr45rGEwRAgokgKmIK7rlIrULyggqXsIar6ZF3o47dyEq8qsIbYwycC2itWGHAAXeEUioPXTMNsqKcKiGQ0wUmUZuQ4SbDrFQKAGCaon7CSJ23Jq9eCyHD8Sp5c1UeU97kaK+U16UqxfnEA3GHAKp0CQn7T/2uNSEERrI6upPxQP2edC4K3lYHGmN2MQv18Q3LQ1ZYAKqf+ONF52h6Fy6oBS4ERrM6elOJUHl36mypMEaB4jmmkQVtaqEa4cNYuXeUIOpJqy8SE0TT4cKvbS0LlK8wljGqMmaVke0qmAIcN0rUsbjAtCjnaqp4NQfNtMfsnCr759r3KRzmeT1th7GcgbTR/LLsutX0N1ZBMCmBrAfod5U1pfjwuzgK4Z2VhVCh/Hj90Llsjhv0Piwt+KCQzxAU9fCR901xDlO9njPFe2UnrcfA5NU1tC6U47aeAiVvn8yZ08K7XI1QZqCiD0RjIcFEEBUw/QQTg53D5MZkzsRoRseJbF6GvoTE6SUpOzYKxlkjMIVqLDg9VoINXh4Tz+tqxvqjvkl5DlkkY1H+s3qHZ+pcVHX9Rj4OU5ZQDuLoYkxWmKwEt4oN+G2qwjuByuFpapGjnosZhqlyqgIcQwjkTPfclqJKeWrfjjYJzLq26vVJnOeIWXk4JyOmgHUNhvv8Kr+MgdkVB91odeFUlWBimNbNeonpBwkmgqiAEN6KSXYpYa7GlpqgVEW0TBUdbu1IKJcBMKa8W6F3WxVSgDQ/tC0QQsAQ5YZ1s0PynOY2j8bFBFh5TPU0NrkQMneoyd97zjStrLTKikmD5VmpMGYOUTGs1rlwUbnog/LE1u9c5Tm3w3UrIRvWclevnFulPL1MXInKKrFKnEJUfV+N7i3XCnArxyyscFBtBVQUX6W3t6pwMlyiASqhgdmeU4JoBCSYCKICphCeBpo0LIo9TKWTEhfSMMgYPLSRbPqU8y1UsGqAgWFVYVN2VCt4mEwukPcIE+OAS8Uod2HbKISjCAVDNKujykulcunqImissB+T1zfsrxKcC+RN73LipQRdUDCtCnh+4T2F+5tV3J96vV7nSgiBnOXtC+KlVE1BvVNjCgVDuCg0e3ZSL8+sM9y50QtArYRphdSGDTErrjIY/PZvNeGkmzx0SXGZw+sd3UEQUUOCiSAqwAOUO1UTndskpASNwTmyIcOafCcDa1Bh19iyBg8/MaNwHhgYjBZIYsoYJsbyhquVoIx75wOOISKvTpU4D60m+1qRH50VwjNr3qPLMaDCTpsbApPnlYszOFELCpXEvaoK53evKe9qkLxBuzBKnc6V4RB3QY5g2FUFPSp9MivXyxKOUlwVLzTUMyRPHarS95U3ONJ66xj5UWJaRTnCFjEohOTKn8LOBa0inJyLcUEpCOzmz0XEyQEJJoLwQRmKfoqJgUFwv3LShS3TuhnKC2C65OEU9ibDMcLMsbrJMZbTkQuZwF9ILmaF2PEmT1Q65zA4dzUyVKiKcxJmrLmesUKBhujyz2wRW0fjQYhCTk4zc0xkDpW34V+KWnUP4mESFULy7Pw9VmF/6j5Rx63D96Eq3mksmHc5X+EBxpgstsBh9fIpyxGrU56kEGWLCMqT6UbaMDGZN2ZkyJ7spcRghgxJVNuqe6Lac9Ns4SS9mmFD8iyBTVF5RIMgwUQQPqjVdb9HeV8q6buyp8JZEhpD3uTIhfDOmMJ75S10PpEQmMgbyJvcCvULjslhh/U4SxE3DSEbcZrcfVWWlxgS8t+NLZLhNSYguvCjQqBYoWFq1Kjrl6OJVamEQNY0q2jK6R+yoxrSwqdEsdrG0ku+VfLU80KJmXqcrULlv8rhgfI+8Q930gA7HMx0uW8CHacKSp+tDCq82WVbKwzR8LjfpzNKrGvWMyHMok7xvFO7J7AZokmUhHsHJWxLD4KoFRJMBOGDWl33WtXuiMVRaQVWvSQnRGn4BTu28PUwSVjgRey0wZGxPEvVxcoXvCNBQp3qiaoqJSB77ZTiTCZXKJHSrGGbjjEVBE5tg1G7tKud1ccRAGGJ5XyTkqyDlhN3Ulh1995GVbSLqQptLhsXSvurkDzvnZY+LyL/OkShD1WQ8EDlGfQ7a+raKZS1dis9Xj/PZakINkX5NaZzYeeruN3v0xmV4xpjSriGeW/huRxVcY5Ge5vUczzsYkjQlh4EERUkmAjCB2dSfSlSLAGVVmCdhnKMMWR0M5Bg4R4GhdcYfbfhApN5AwwyByRsaJVz5bla4zxrmEjno5mIVSJ7TGPImeVhLGaRIVFMs0qLc+5McA8fTum6T0demfo5atQeNSavm2Z46HSuVuHDvpP5elNVbyzlNXW7pkv7Z/l5jpzPC+VBiRKDF7wRFcMD4S1KnDgr5enc3RtVT89l6Vjcnk26ya0wRHm/R7HqIawCF83GdFyDlTyibu8t6pcV4bOtUaLJLd80CKqlB3mYiEZBgokgfPBK1SmIpcorsM4V3pgmK7VlA+QQlRpqHiMMNMFO6gbynCMRY9BgCYqQE7OiWuM8a3CM5XXPynZhUM0141b+RWmYjrMEuqKeYWtBcIZXRiJwygx3VhcxI41u6d1pVh5T3uSBy4mX4lfoQy1KaIx5ek2dTWsreSnVbVWva023vCwaC+b5CW5Ay3Bh08qlKXqF+YchVovzXDmP5ebpk8VyGGJWWHMUxUeyBsdIVm9qIRigvDl5qJA8eVosoi/O4RRNk3kDuSpaY1TCFG4VTSsj5WX9iqsQRCkkmAjCB7vYgfVzRyxeJJYAVFzpLTWUGYC0UTl52a1wQTmVJ4y8yTGlm4gzy+T0WU33wk2AhF3ZM7jMOxrL126kqOaadjhRyYdxy/1S2zZlfhXCJTSqttwQ5cFgjt/UY7284GGyQoYafAJV/krQcuJOGPwr+6mQJk15TT3z4YrFmpeAUL9Vxl/UZ0rlL6nRCD/1BndR4oaslCeKynw7qUcBC+UDLirMgvJqj5zLPKwYY9Y1KJ8jtWJY4X1BFq/qCbcWf9x6YlV8b8n9X49bU4Xo7Z/I4HhGj3z/ppDPrfBlxa3z1XwnIXGSQIKJIHwQ9uoXyoWShW8iuCgPu4prDHlTVCz+4Fa4oOzYzH/CEEKG4qnwNXu8IlyxiPKkXBYuD8oKnUjEZEjNuEc58KDkTVXmWQak5RyhNV65X81sumun6ZeouGhCaApp8/UoylBaiavRHqa8KewqYmGpVL5dXQrqOnLb1C1/z2uXyhunBFikl5olHAvXkMyJ9LMXCyF5/rtmlnfSbYFGfubofUzyHJb4SF0KHxTKyReuwVwEVrJucpg82OJVPXH22gvTskGULcLUx8OsjhWHhmw9PExWmG8V6yEAKCSPaBwkmAjCh4KZUCGPyGMF1m6g6ni/ilWvNPlIg6JSyQf/hqUZq9BDQiuskIfNQeIuIRN26ExATEugaYwhoWmY0k2k9eqMHpV7oFYkY0x60ZSxUCmJuBnzq1ePpFoETqkxzGrcn+dxSn5utGDSrT5CVQkm+FdGLM5vEq4FB9wEttcZKPZHRxsuZIjiwhdBmpVya1SVUN5DwGWBpk7eslIh7hyHUw+VlpNXeUw1iQMhw3jV4lW+iX3lnPdTmJYNbvlp9WswLK9sDVrkuU12fmwV9zdARR+IxjFtBNMNN9yA5z3veeju7sbg4CBe//rXY/v27c0eFjHDUfHlXXF37xLgvwLrtcIbYxoyhgnTJ+k4yOTnFsLiPLgq9OA0NsN6WkxRnpSr8qCCGi3OfCwVWjNulTgPiyr4oD6TpvKYLKNHpUB4zb/NKPrgmq+BGgVTyc92n6moQ6dEQQRoljhtmOoUAlmDV5W7BBQ8Fl6nuajUu0fBAWc4aqWwTmF5TepRJU831XVfckyfo7iJEjdUiWa3BRq5vBP9V+4z6oLXQJSXk49Z93stIsewvDMxTXrpMnXwnAQei8N771d8pJTS55icC6IfH6DyjGS/JCFEpKKp1kUe8jARjWLaCKbf/e53+MAHPoCHHnoIv/zlL2EYBl7+8pdjamqq2UMjZjBCAL3JpG9Ii18iuFfhhpimGoF67zfIROJnEKrS2zGP4PCgE40z6d153DC9mEr3EdcYTMExnjNCrxCWNtdU5dpVfoepXvd4f1NC8lzPYW0CRxnKBX+Gj3iuAeH4v8YYzJD5b7VgCPm9el3DlagUfmqWiCHdpeCAWz6cp4dJFG8V5aVmlOS6qM/md4ygx2dg0DSGuMt5Vr+JOtzLKcSd4wAK31epVw0ov9+rQfaVk6GTMU0uXhlNSIaR4cPcNsTUdxrk2WwvDKn3ssqCaTQbvmk5ALuku0BhbFGVH69V8DSzmTZxcuG9bN5i/PznPy/6+ZZbbsHg4CAeffRRXHDBBU0aFTHTyRvSSKmcNi1X/Eq7lXt5mFTOhN9kUbkHU7FBGCvZWnli4q7LIsHzXdyS3p0Te+lxg+yDgSEZ05A1TUzlNXSngj+KvJpr5kyOTviEFlm/9Z2g/VxTNeBmsDsFTjVHtI1lFZJni9hw/YqCHEehMcDg8tqqVsSEIW/Kz+NmyAehUvl2pxhyNmRWhyvNhyv0dnLfYalcjUy+Cit/yXkPWiF5frdxGG9qUvNeP1XPsSjxM9vVPer1/TMwZA2OrkR196syshkYYkwgxwUyBkd3rLFryHaoW0mYpckFEPN/r7AXYZjjd/7PtpwpFx9SIdfK1fNLhUs655TJnImuVIXB+lCLYGKM+UZpEESUTBvBVMrY2BgAYPbs2Z7b5HI55HI5++fx8fG6j4uYOUzm/Dq4FPBb6S3kEIT08gjhurJddmyVx+C2b3tFunxyZAi+MlfcHLH4uEEmds99gEEDC71SrBfX0gVQyGPiQlhGovuJY7BK8bqQNzgm8gZmtSeqypfxo2CeOQ3e2gRO6bdXEM+BvpLAOM+nVZvN87o1uDTqaxZTQhqw4zkD1ZYTBwoCx2285WKosAigFj6cZceL3utxPFXDrtJ2YTEFPDxt/pKs2AdZHUGEWTUIl2cCUFz4QDcLVQGdxDT53DCEbC0QFsORqyZFE0PaMNGZjEV+7/uhQt2K2w3wQOe6dBFGLcB4LfqofNqqwqDtucj93leepmqEk1uz5KBoAPTmRVMSJxnTJiTPiRACH/7wh/GiF70Ia9as8dzuhhtuQG9vr/1naGiogaMkpjNqAgiaAwC4G0du3hknXo0TBUpLxvof2W2CNVwS2BVhwsHcJjRlOAc1orwmRXscQREyV6nUblT9rXTTv0+Q3/F0zpE1OTJVFqPww804dAqc6vZZUvShgjelWsq9Y+4NP4UQGM0aSNeaDyIEJnRT9siBrKxYG+7Vw0obQ9uLAI5NVVPR0qvf08NU8j1HFf6pSn47r/tK3q7C8aMYQ72q5Lk/Ewwh8yOzJncVMKq8eLV5THmz2DMT1xgM3vgS4zJ8uFzfuBUfKUV98sLcwop+X4ryZunWwlIYDLMQCur33mrC9HTTvVlyEBhjvvMcQUTJtBRMH/zgB7F582Z8//vf993u4x//OMbGxuw/+/bta9AIielM2Ae+XyK437ykMWngu21UqdKbfWwrtM9tEsubwlOohUkuLi8p7hxnsMnKK7yQoVBWNgiG5Xkra65pCTidy+abXuO1w+Bcjqdz6XGY0o3Im1m6naWw1QpLEY7/A+GLeQSltDcPA3M1VLMGR840a0ri5kJgNGdgPGdAYzJMrFrvUgF3EVmaX2h7zxwbu/dC8xYPxSIguip5Bi+uFFc8Gm+8CjmEIYgwqwavBSH1bMqZ8rtw876q51413hJekjek9sfAkNbN6Ktb+I4FKP1evYqPlL/X3evvE7RgL9CEyvsRwuFhCja2MHOo3/xSCdU2oJll4YmTh2kXkvf//t//wz333IPf//73WLRoke+2qVQKqVSqQSMjZgKlD/owIS3u5Ye9V3jtkCyUr1xUqvRWdhxR+nNx6e2yY8M796l0xzJEyX0vfk1BnfsoTLgle3DkjQRxJKhkbffkdJnXYJQYQ27HKzu3VqhKPMaQ5xxpw0RXMrrHo5vh6muIWiFpbXHNpzy6m/cz2lLW1lCKhi7zmHhxqXkhkDakWKo2J8HkAqM5HVndRDymRZiH5X6dFsRQ8XHkIkDM2sbdQ+z1EZ0igCG6MLacZ6VA/947Xo1ow8Pq42FyeyZAnt+sYbp+P4oYA7KWtyRMGJ1p53YWv0eWGOfImQKpeGPC8lxzG5klaCpMAJ6i3SWXVh5LhW/LRt/JgNFzzpYQsthGsCshaJiefF5XG3JbWx4oQYRh2niYhBD44Ac/iLvvvhu//vWvsWzZsmYPiTgZEPb/PFGrnd4hee5oUEm0fsZcsGGWJneXlt4uG3NA74aaLN2MFo0Fq+THHRNu2ThQEG5BUMdzMx41K68hiGeu7HxZwjDGZD7DlF6bp8Rt3B7fhOtn17nARN6wS6UHx7+RaTWUegKkB6B4lTpnCuQMjpimVXXehJBiKWOYSEQqlgqr0KW4F+IoXkF3D2ljnsUUnLsslOquDS6k59TrXvb7vrnHQkU1RL2I7+VhUs8mlavo5WGMaTLhP2xYXmmVTYVmVRxtZIlxGU5WspDiWEjzg5coTvUs9fQwOZb/9BBhbM6wVA2AycP1wPIL05MLe9Vfo+pZVI/+cwRRyrQRTB/4wAfw3e9+F9/73vfQ3d2Nw4cP4/Dhw8hkMs0eGjFDcHuoB1+7Eq66yvQJiXHLmVBUyn0qPXapYeZlFNjH9gnlKx1HeQ6H2kewcAj3PBBrHyHzbvwm+hgrL7XrNma3vCHDUWY4bgmvmnNxHHjnNbsbRnlTCjg/s8bDbxmt8eDy3anvzBYWQoYxCgjrOwgfIjOlm8gaJpKaFnnSPYN7vp5bNcWi1X1457t53Te85J7jfjFSASksfri96nOuRZT5bCLaLCYhvAWT9VsZjue9C7WdHjIsz73KpiTGpGerUQa4wcvzMf0W0pyYHufP0/NkvaAxJkuLh1ikkotQsNtYVONFdhNOQUPPvZBBtNSLiWgM00Yw3XzzzRgbG8OFF16I+fPn23/uuOOOZg+NmAF4roA5/l8Jt1Vnzv2M9/KcCfu4ISYA5mIk+xkFjqNUFEymKC4sUHTcgJOnn7csbN6NbnqH6Kjz6SsUPQSa6VjNVlWzpvIRGU6W98pr1G7HULlAfteBfKk0zC/a1VYVwlO8km0ZtNbY8lw2l41rWsVGsW7kTVmdUDY0jj6whjEZtlZqVrtVUyxd3Xf2abK3gcfnKxEoUpzXLjP8Fz+Y57kW1vGjOqNRmqT2d+H5fTPfHnKFrcLnMeVdqmwqZPEYWX673pRWaVQE9f6XLsL45dKq4wGFXmqBwqnVcaw8K40VSotXixJOkzn1jKveELXvbRJMRAOYNjlMlNRH1Au/BNVCEEMl3EPygpQGd+ZMKNQkFQhWbsDpgUq1VvZGcJ/S5KonT2lfjlKUl81bvHkbfUVjUXlZPttoTIZUeR3LK2+oNC4/rsm+TmndDNUjyg0/w5WhPAHb5IXSv36nxS0/rqj6YQTio1BWu/QVqxy8EEjrMtdEY8yRWB68P9d4TgcXAsk69cBhkAZ6aVioW2EPDYBhre5rMeYaLuTVILT0e1bGXFAftReGT2iayuFwQ9jfXTSSKUqj1B6bx+vqO6vkYa+myqbhUmWzcFz5X8Yw0RHXIrmHvFDeFfcCNhXOt88ijKeHyfq70EvN/7ldGGepOvLPU5zKG9AYQ3uicpJUOs/RnUggy6vz5mtMfq5GNdImTm6mjWAiiHpQsZpPYOHi4g3wCTtRMDDXJFrDJ5SvfB8lRrIQgUq1uhnrpZgVzb3Kq3t+pY3TWRMm5xgzgYzPd9HfnfRM1nYS11igJqdFQxZSoJSWbI4zhindQHtCQ9ynqWcluI/haue5OARO3uTSAGD+UTNuYl4Z0LUa6YVjuA9AVXjUuUDGMKV3CQxgIriHScg8razBkYpHUQ3PHc8wTJd70xkmG/e5f90W8OzfOL5nJaJqMbx1z/w3uC6WKMI0ra0MizSHybXwigNZSr7yObOvd+HteXZiCvcqm05iVvEHnUdR0t4bO3zYq7G4n3cZ5YswlaoZquewXPzilhCv/FxzLkBVFHNCFn9JxTS0B+gGp2aG7kQcDAxp06j4HifKi0s5TEQjIMFEED4ED6hhZatcal3ObyL3qojkVxq7/MgoWsk2BSoaBfaxK3gjfHsaQRo1bpPnsYm8/e+cYUoR4DI365xLsaIxdPmUbTo2kYdhcuQME4bmb0x1tFWeqJ3GpFep8pgmY/3TuomeVC2Cyds4ZNb5cwqcvF1CusL15yLmw1YdrITX5aHCeibyBkxRWrUwWIhM1uSYyssiD/USS0BBBJWHYbp4jyzfBucCXHMXurZXp+TElHpNnEKt2kbCosLih981EqGj0deTVQ2V9hT0egjrxVO5in6LKhqTIjVnciTq5PUEVG6Qtzfc79nrvQjjXc3QWakzcCijcCvK4F1a3LC2j7Fg10ohkkIeoCMmTdKgwknNrRSSRzQCEkzESUuQXhFueSJuKNHiJMhKv7Mfkm3g+ua8uBy7xEg2bE+M//s0x/u87Ae/0uTWYDE6pSOTK598k9YHmshzaXx4jR+V826SMYacKRtZJqHBz+RKZ733o8SUc4L1MqIYpLcqrcsS49WGNhU8D+WvqfAuUwjELeMva3D7u/GzA9w8CAUjPVhIXLVj16zrLGdyxFkhXMxe5a6wX5MLjOekURRlRTw3bBHkOJkq78HryCYETME8BEdBphTJROHm86st96dwL7uPVAoZuCojZVRHcnp9PFnVIMVlMK9QxX3BuwpnKX5VNhUyV0eG5XUmYpGM0Q0u1NHK969K93vhrHhX9prH92TywrWgMZl7WMkzp0JZndswVh7CrJDXa/DWAl6N4ZVwAoKIJ39vHEFEBQkm4qQkaGO9wGEtLgZFkBVeZeCaDgOXA4FDTJz7UEZysIIPxcd264PhlZSczhbOncml0Ej6uDPkCqWfly3YhBe0GpbuYWgkNM0KARQYNwzk8/KY7SkN3oaLXE01uPD9jH7YRS88clCc4WJ5q1lnXJN5XX7Xn5uYD1t1sBLCY+x2aA4XSLoo80orvmldeh1TQZIoIsI5Jr8wSZWfldA0V8GhRG6pF0/pFnWqKiXhB8FwVCjzwsvDIuz/127wV/R2hiSqoFF1/wQ9x0bActpxxqCbAvk69mSSuUHuA1eLSF7zgF3Isewl72qGzgUC9VzTKzzX7DBoxybO0uKlY9NNAZMDJgsWJhnkewvidaKIPKIRkGAiTjrCdCEXIti07hayEmSF166I5IjbUZ6poKakCjlShze490TsdmyvycaZlOwUSUBBlBhcwBBAr8ejpFKuAlAsGvy8WToP16Cy/P1yzLopWzv2pOLImwIjU7qc6LXCiVCeKHVupWCq7rheq6iF/Re+A9lHSkBj0ovmJzzcPCRhqw5Wws+wjTEGprkLzUrHNwQHY+7vrRfFgsn7utQYYJgCPOa/8FB6btzv99oaCZtFeSfl+IVg+l13YfHzZFWDut5rHZtXuKUXedM7BM6J7MnEkTXNuol63+I0duSB9DyX4uehczsVpR7VoM810+U4fmPLm7zoO6m0xhQmz85bOFEOE9EYSDARhA9BH8PK6HcaFIViB/7hH0BxpSeXlKZAqLVTPaBRoHKQvLw7xyd0ZHUZkudVgtaqMeEZEqO8K36d3FXhA7+wGv9eNOFQEz4gQ/1GsqZcRbXGqDxRCpNzGMkY/DJRTC7zeXpT8TIjxs9eLsoDs8LxCuFt/oag90vBqg4GQY7d3WD3LoRR2WNo8Gi+y6CUN6T1NjhVXpnB1f1b+rq7V6PUo1Moc189uk8J7OJjlz9noo5SiqLiX2FfQG3BisUEEaWySWrlYjgKjTFkDY7uZG0LNV74VVCtVIFUfV6357xrQRIlUJnz2uTW9eX9XFOVJJ3H8Rob57LZcFxjgcOCq7kC3IQTheQRjYAEE3FSEca7BHiFPbjB7GAItXlhqqm0g+Ly3mFzD5RhpqpF6SGMglIvhrNYA5hA1jR9yz0zqMpT7gawqVa/fQbE4Oyl4b6dacXGx2qoVuccszrHKuTEea5LQ/o0MIxOFUL4+ruTZfvMmxxZw0R7PFYWwlN5FVV+b4b13alzZVfQ83qXz7UZVYW0auwQxvz7tMhQT95A3xLKyk/7GZzKIPQK7VRvKT017h6dGkLyhIDuUwJbDcUrJC3KKnlqkSEiB1Nk4X1hRGmlfLBS4hpD3hTIGTxQiewweIU7l2zlWzLeHffFEu4iqRmzCj/4fKluVVLt/oElg9C5nAcSGoMueKBFG79nfiWUcIqlNN98L4KIChJMxElDWLEEqPyNyrjlNQTtHVaaROtnzPmO1VoVD2MUANKQdAolFdM+qVcev2xUKuRKpMsxCyuUfvuoHFZjiMr7CQxTRqawk5QTPkJM5xw6B3pSMWiMFYtKSAGlc27lOnGkSrwxQVa/TSHzJUqLT/h7mHyKFkTkYqrGp6BEtJch5p8/VB8YrHNijUkl3Ltu6wiT9cw7cxFCXldoteLAq3pj+Vg9wrCqOqo/UfmY6uH9qkShAXCw8SsvTNaMXjB59WAqPra358RLDMvFIHcPU+ntGLPymIoKDpXgLUTKxZzaVn2moM+9Wq8mBiAGDZM5E12paL8ngnDSuIxbgmgi1YglIPzE7jSOgq55aZCTjZr0/foW+cERLElckc6ayOcExqcMJGPM/mPvL4DRrbb2mtjDhEr4TbBRriDKMUthqfbrd7pUxToV0lV6ro6N5zA6ZSCX4xiZ0sve72ecqxGZQlacc3okpffApb9X0X7dP19Ugqmas648hl4jsD0VtQws7JiYLLesSv/7eV+clf6876Py3CSvy7fab8LkKtS10pbueYhRllpWnqyoQj15ZMF9an+VCVoMx0mMacgasldclMjvtnJYqtfz0/OrZe7fUSEEtfA7zfJge1W8A+R84j7G8tLixWXKg+XuBYw49cfxmSdzZtVzPUFUggQTQXgRImbfLTQmqPApGHNOwRR6sI5yrv45TOmsaefo5LlMbHbDt2FmCV59OaISTGHGUglp0Fc2FuztWSFBupRkjCEWkyWI85zD5ALHxnM4NpG3PVGVVlFVL66cYRav9LKC4V6GJaTc9muHn0VgMFeTa6LOl7eILjfe6k3B4Jdjqiwomff5hfv3Ijx8PdUKF3W9VSqBDbh7WGoJd/IiKgkWbd+cYH2/5L0e7nzENGmM54xoXWJB5gYGWanPDdPju/UKUHQ7P+ra8VqM8gsbLI2KEEIgz4Xj+RWsUmelxu5BcPvMJJyIekCCiZjxVO1dQriwOrl94XdeIT2lqJU+tUBniGDvKzq+lQdl+BgFTqEkw8x4UdEGJwaXIWJBwqYYg+UdKadynL5jW6/VVKiVzmiMP2cIYN7kgffrldOiO0LpMoYJsEJY47GJPKYyBvJ5XlZp0B4PVC+m4lwvaQi46x5RtJXb/qLJEhFVGN1+eTVAwZBvZIW80rDPIKFAMrfNaytRZu96BUlVLZgClsCW+ZPlcB6dXHJ7vtVClGMLdI6FfwNg7z3LqzRtmJHGEQa5BzSfhQ8/ocFdvqiC9C59l3cDWxU26HYPOEuLA1b+UtEzmnkWCioMyr8XWlDU89PtPJFwIqKEBBMxo4nmYRn0kS6KQkOCLmiWVqtzNhgMM0TTFgDFL7kJJcfboBrnOskYplVkofJAZCw8d/XWGNzP6Cwavueqv+xHEk2yuROd87KCD37jy3us9jpj9wUKK68qbC9rcNsoUd+FUzwxq2GtPE6JYHIRs7B+7xUypjyWUYRP8YA5fMXHlyu+XsevNuS0doRdjdDk/h4uZaz6ffZSSeq+il/l9yBEKDHvZpvyyL140XViinJslYqMAPLZWCkfzAtNk8+3KIPyzAD3QKF8t9v7Pe59wDUc1mvhL2Z5itxe9wsJLY2KKA0Fl9+J/+ezz2fNF4J/CDBAwomIBhJMxIyl1gekegAHM6hLQmOqWD1Tq4nVrLoVhE/BKPATSvb7bOPaGV4hG4sGNS40K4m+dKVSGfuBQhoZczUMAFVpL3iydlDyJvctZe5EY8yu1FdKqXfNeR7s7VnhO1B/1PeTs/720qZup8XPOPATWmGpJnWjUi+oZpQALowJ9vXu961rzFrG8NyIlRnQbiFwlSodesGF5Z0NdM27NCsV0TUvBvxD/0IT+dgC9P2qoS2B8vRWOgYXAhM5I3ABiqCNxctCgYVPCKJHGK/Xbayea27hxirsz6uSpLxG5c+yqXjhMzFUDguOqkx9mF5cJJyIWiDBRBAeqFX84BRCY4IYZaUYlsejGnGgVha5ALK5ykLJ+T6geDUwa5oweDDvkpOsUTwRyZCOYCvJlTxMzrFGhTpckP2WFn5QCCFD8mLWh9SsUr1qK7tEvMs+bfEkBLImRz7HizxQylPjHpLnfWWq9+nc32AJQvWeAO9eUEFDVaOHgVueL69QI0WMMbTFYz7jLF+VF8L9e/YKF/LDsO7loBN06e7lIaPL+3PuN4p9RDk2OwTV5xxXU/DBuX+5AOG/nW4KpA3TM+/IxnqOVLqvNKsCaa4kx9Tv/HmF8Xp5dRmT97ib99zPE1xUxU/IgjXOhSflNfdbb7GLVvpsE4Yw/k8STkQ1UFlxYkYSxcOwmgAUNVGFLZ2sMTnhmqK68DPGGDJZE0LIRGU/keSGc8UyrctzF2YIMatniSkK4oGLyj2YbJg8d873K+rlkQizV2fhh6Sjcq0M6xN2E1fNCkUxOEdC0yzBI8CYfy+rVEyTMf/Oz5qVeW0jXLdLjaseUGpT97Ac+d9oVkc2rqEzEUcqxqoKfanl1LtWogtoLAbFKy/MDZMLjBs6MpppN2Su1msp91Xcm8stBNcZIhVu8SR4tUslBJ3Up3Q78xUlQYl6bMo49zvHtYSBVgoxdR7D5LKXWtJH6nKoxbRgnm3VPJfZz9XK56/0bJgex2Ng0BjDlG6gPa5Bczyr/fJh1VHUIlJpuCNzfE6vcYaJ4PBDCdpqLk1lJ1A5ciIIJJiIGUdkK0c+RqnXG5TIUn8HfWshXj2MoVQga4mlrGn6TtZeKFGSNzlyBg/VxwmQK/J5LnN12uOxon0GCsmDQ2CVvCGs+AsKr6KQhMxXKkyueolhqzEGA7LhaEIrGDfVLKPqXOaxdCQ1u3mwXXmPC+R0Dt1h9He0FcaVjGkwhUDGMJE1OFKWcGoLIZxUM+Fq7RnX3CsURI7Oaje+w1wbuskBJs+l3ZC5SgGgmxyMaUjG4sibso/ZVN6QotrxuZQhf4znQ4mznGEib3KYmlb0vXpRVuK8LjliERUSqcPYlEff636uJTxV5ZhW2oda8MmaHJ0+26lm2fEAj+mYJivl5UyBtnhhIcp7scRdPPiV705oDHmDY0o30Z0qmISVFzZkaXGdlfePU82fOYenm1SVOq/VxxQmJM8LEk5EEEgwETOKKN3s1Tx/izxMIeYCDYAhVMGA4G+0jU8hkDfCV4GCdSQVapYxzJpWf3NGQTCFmcDsBrguJ80IWK0vDKr0dpiwQwYgVxK64lVhSreElQghGr1wnkdVfS8HgaxpIhHTwKxjpLPu7xeCI5czMQ65ihyPFVswymtV9j71D8ZCeXIAywOjC+j5Us+H/FnnwQsaRAXzyUOrBvW9qO/khHUtOK8ptQjQm4qHutbGc3LxoUPTKp57kwtwXcDUCw2VORcVvWhBhFgpEaUw1VzExXlOVCjyCVMv8pA4yVqhcqZW3fxgcoExU0c65v3+vMmhGxwTuvw+vM67bnJkDdMSGMXblH4nmuWryRom2iyFVbgvy/etDln6NfktfDAwaJrlZUpoiGua1dSb+y69qdLiGivuH1dA+EYHuBW6qZ5oZDgJJ8IPEkwE4UE1D2AVGiOs1bPAXeWtVTLdVI1U/d/nNBh0zq3YdQFNC+9dYozZYRUZnZeFxAUlxhiyJreTq8M0e1RHLDVmlcEZtW3NwGAKjoRPqFwpzsIPyth3q2SmMYacwYFUNJXq3MKg1K+cR67kbcmbJhIxho4SF57yWrkdN6vLa6tiieASDC5ggqE3VjzF5E0hjcVY49NnpRcz/Gdx3RcrLvrgt0uVyxHUBFOJ/hpjgTxobufaTVCX4iWwvTA5x7ihI5evzeOrvKOGBlS7lOA8L+q52ZWKFTXedjKe48hzjkSVadt5kyMZZ577B4CMwZE1ZKuGjkRMhsG6jSVvWnmOGkpnGbfvhAuB0bwOPc/tZ3VON2E4BJdTaJXmPQbxFMc1hpzJMZk30ZdidqSD36KGKi2eAyt7PheKhHgfM6pI60gLklhM5kwSTUQZJJiIGUPkSZxCJYcHfUMhbIOHXD1j1kpiJQO7VCg5aYtX94BnrFAZzxTCDv8Ki6Yx6CaHbsoQsGoM09LPrwRKPISwCUJMY2BMC2WuaVb5dJnHxKCXiKfCdtJ7ZUTkzXDbQzXrqQzuosrLCDQ4kDNltcSw3iAG6eUoxQ45DbW3aJAV67ybLIfFaaBxuIfSMrWUEcLdbAgeuKS/21jkz+r43oQNdc2bHJoGdMdqMxuyQjhChyMQr9bffveaVw5PGCqVyZZ9iOQnypvc9gg5MbgM1/XyhLl9J0oQtsU1dMQ1mIIja/Ki81cQWirvMW/nVaqFj3YfjyIDQ0LTkNZNdDgiBPzCBlUYucHL804VrnmMAV6rhqhTXcnbRJRCgomYEdSj4o2w/x9U9BQM/mof3l6GsJ9QqhUGaVCkLW9CLfsBZJntVFyDwcOH9pU10K0yp6sSDAjtSSst/KCqGpbme2nWKrDOozEJXA3BKnasMZkPETQcSq1UV1UYQeqEMkEZZTnp8ENiEIJHIpjsXBHHv4Fyo1xdM2GOqAo+BL13SscCRLva7jxOJB7TuuRXeT9z7ZyfGvYdxMtqqntFCM9G3qqVQTJEJIAad8Yw0ZGIuX4Hzjkhb3J0JDR7IUQtfLCs/73c3qbBgMCkbliLb/5zn8pTAryFlW9Inucr1VGv64qEE6EgwURMe+pVHjTs41etYAPVrZ4xqxRzqdHlLBFeD1T+kKrsVguFqk7SwxDWSCldxa20qtsMVOEH3cMoUuhmVIKp/HfV7Fc1kzQChiIqI7waS1P6S8t730SVP1QNtnipoZBFYWewisII+/4RPso+zOcOLehKxgJ4992pCRZViGnt+3DD625TxQVqyZljjFXsSWZazzumyQUTg4uyxRQvIVUJVYU0qNe6OFxUXps6F2AehVYSmoZMlkMIgbGcgSnNhME5TM071015T+VCQfnzhFlFIbyQz8+oVsLK+6JFDYXpESSYCMKDapJS1XuqMQqUQavm9Xp6lYqOi0ISdq2eHLnqyJE1VfGIcOMoXcWNIt8kShgKhR9ypncVKcbk6zFW+8q2V7W5sKgKfgaXFfwqESSsywvGGAQvL+IRVThcLUhdU7uh5vQc2efKY7dhLuOw97oUpygSp/XxMEVVVrxJHqZaBJPaD9zvB/s1VqgYqnOOuBYr2iZnVJcjGrP6u+VMHuhaKg4Xrbzw4bzmdJPDEFLsdHoUHSmIKO88XTWfeQzQKhjh/zmC49+HKyrI23RyQ4KJmNa0UvM5e1IVwu6SHgaV5G3khV1yuZ5CyUlcK0/crQZllGcMXrH/UClyFbdEMPmIkmagCj/o1gqy16q1CssTrHbF5BqRV4NxEFS01OIfU2vPbjlpzf4+aw3PAtTnU16lgnjy2m/QMynzVcJ6Q2SoofMY9XhqRBeSVx+8hFihUXENO7fuQy7c83W4S0ims8WC+tkUAokqc0QZk3mmQVo+FF0LISt1xmOaXXHVa/4pLk7BYUCUeaKc82GpqDKEe/5n9Xg3yq4HJJxOTkgwEdOWeoulcNMM7OoJ0lAMH/ajMSCXkz2QGiWUFGESzCvBIIVOWCNFGWTK26XyhcKVZqgvqvBDxjDBhfAMYVSrzBqrrWwu8wg1qdY2YPAuhV52jAgMELectGjKCFdPWM+nG8rbooo5VO7RU/lkGlxgPKe7hnL5j8V5DCskr46r7UFz4Lyo19i88mWiOJ4y/t36xMH5mvW9qdDk3lRhm5xdAbU6YlZRnSBPxOIqeeGOwwBZXTGgR8o6SlmFv1RK8zxnBkdZ76Za8PLE1xsK0zu5IMFETEsa4lkS9v8CoUJjhLCqMoWYC+ywB9Z6YWhh0TTmm+zrhcoBU6u4Jhc15x5EjRJyeSOY8RNFsrlrSF6Vl4j0YgarVBdN/pUo+netxnYUyOurxqqL1nWgzMZK30elc5nWTUzkDehcIKGFq0roVliiLsaj8rJAIFbDVV0PTwBj8MwxikQw+fSJcx5DvaJZ4Wi6lRcqAGSN2nqPaYxBh7vHpmw8KL7vwh8r9FvKRJTISrF03MxD01hRvzcVqhfZ4klE+XXVQKLp5IEEE0F4ELYAsnOlN+jDu1F5So1EeVfCoqqYmUIaZGbJqm0rwQMIISV2vEoIB0aUr+pXWxHKLvxgGea+h40kX6Xwb1PIfTZTAJfmCVa9H+tvdYoqnSkvo9UUAuM5A2ndBAOQqqE/VZE45dGl0ytKwxCrpRrveyWYj5cvKg+T375Kn/cqNDlvynzBvMlhcmGX+q4WtZBUSTA5791mLb8ZQiBvcnQmZX8sZ7+3nGFGan02y8OkoBC9k4PGdw8kiBppVN6ScPw/8HtEwTAM2nxWtxKEZxIaC19SXK2UK+OjsArZWjDIwhaVPp/ytNU0ftt7UHwdVruaqjFmhTpWvt6iMD+cnsZCYnzzvtFqekr5ob6XSuLSzZjjQuB4WsdUXualVJvbYo/FcQiOepxnVqicWAO8RsHlhh3O6/JaNd5uL/wKS7ihwl/zBo+kPUKMMRnW6rOf0lyzKD9/Nahzk4wx+48pBPJ5gXTWdC0qERZnvlQzaaWcaiJ6yMNETCsa+UAKa64rg7/QJd19u3qXCW8FallJVRNsK1RUc0PTZMWqtgqfMcYYoGm1lTMGrFCg4utJoDYhFuTc1rpiy1BcJYu3gACOMYaYR6PeagjiYfIqlqCbMmQrGY8mS680JC9yuWTtMEwTXjd4PfLY5I3iGq5m8ujCQP08haXEGEPOlL3aMiaPZAyMyQblvrsqCU+rpr1DlJSeMy4EsoZ0gXJmNcx1iCavMua+OPKHnZ9VNzl0LtCRaJznh7xNMxcSTMS0oeGrNyFzmNSbvHI1ZmL4XT0oCKbaGunWixhjSMVigQyg2sMJreICJaZArVqyUg+pKI7BWHGYVLNXuuuB+kR+4lKeh/Lfq2dAVNd4UUuD+qQwhW7CW4pANFUKS5H5o+ULC4CVTxrREb2uYbffqwIxacOAYfLIQosrhwKzIk+YWQePXhjKCr9Y7QbiVh5h6VzoLB4RVDw584edn3VKl/2kGimYFJTbNPMgwUQQHoTNE1GTsvIwOQ3qk8GrFBVqgtUDxOo3i0alVRVW9Yt/X8siv8wxq5yhV2uDV2eYFENrCKbDE9nKGwXE5ALjWR3JmIasYUI3RZlRPK+7DYC7oAparTAo3P47fIXKMNQS9mS/N3IHU3HVQoW9eBXRcTw9TC5eLBVxkNU5OIBEg55lSjwq6uLRC0FZbz3uf32qOTKM54nBUfbd+qyqmmlUlfiqgUTTzIIEEzEtaEZssHzOh3/YyjAkOXGTVyk8phB2wYcW1UsNw17VLxVMqL7ClKxGKKwkdO991JxrwhxGjEpWr2I3UYocLULbRYdAMsHQnYxDz3DkBYdWEu53eCJrG9mTOaPwggAmdflzNSGbSog5KW6aXT8juRbdq3KgIk+eVvmPJb+Wgj2aQiOyYIj7a16iRC0UNDxZXBQWVerh0QuK2zkLGmrtnC+d4slPODn3nNF56BL99YBE08yBBBPR8jQrkbK6xp2F8JtMVj7wSSh5U2oMm5ZxnYrlkdZNaCyahrpBcDNCW4XSa7GWVX7VVFfnHHEfBcERQQ8pwe0+LIYAhqdyVRmvUQqdKFH3ulfOkBazRIIAOlMx+7PrJseEIRDTtNDeSm663DdcYDTGcCyeB+cCUwHunWqv91qeZjJsKvqVEK8qdoXw6AgEE9zbJfiVy9eYzHestaBHKFQ+l1XRsJ7exkpoLudMryLUupLXSXrzhC3muRBIG2bTKgSWQqJpZkCCiWhpmll1prqVOVn5x+SiSsE1cwjqGXAaw5wDggmkEhomTQOJCBP0K1GtJ6MRQsstJK/WM1NppTeIKPM7ZwIy4XwyZyCmMUzmDUADaqys3DI4SxlzwNMqLfISWpvoXIVphT+um3g0IKDFNHS3xZEzTUyaBrSYt9x1E11BcIYhlrJ8dmfF96trqlHeL16DYCg9P+q7nsgaRfvjQthl4d2EGQ9YSj+q54gzn8fyOTYvJM/hZVYVOnVevcfPy+vU3qYBYHYYfdbgMDhHvIVCFKgYxPSHBBNBeFCN3MnnOGKahqxpuhoVMxE/wyusZ8AqdtQUr1y1XowoQsYqGUvOazGqVKA9o2m0x70/9GS+cshYpXNmQCCV1JDUGCaNxuV+NQpuhb9VyvcSQhQ1fNUjrgDpLLBhexV8tq/2WpdhiBq6k+Wmw44TU8XbWrFYTu+KyaW4qEdvNTcxp5scWaO6ggtl50jIAgodKa2oCmje5Jg0DCQ0zd3LFFCsRBV6OtiVsgrFROthqwa1qGCKQjPfqHqxOb1Omazsc8XbANgCtnHRCWEgb9P0hQQT0bI0u6dBmMR6tdKVNTmSFbadrnhN6FGGS6mE5agT4utJFJ/fz1gqNQSFkCFXQHX5L4C14hsDutpirqvPXAhMGnIlvVbbVhpMzMplmjmLCFLcC9ccs6LtrJXvwjYCOaNyH69QY4HD21Vnx7aX57G7rWBOcCEwnDZgcJnn1ZWMA2DIGGbdPMfOnDLFZN5AmpuRHE811i73YkVTZCOq5+iRiRy4EJjKGRCAq0BtVPgxY8xqiyAnU1khD5HmFSnhpAEYm9IxwRhMTeYutUKhGTdINE1PSDARLUmzxRIQvNeNswKe03CZzjRCHLnBGIPgsuhDlAZlq+N3XnUIJByGoCkEpkyzNjEjrOIaHknR6gqO4hvgIjqjsrVgRaFPXp/NrnRonVXDvr6jHY1QeSt1DgUOIsiyhgmdy3zEMctw707G695YtHRsUT6L1fdYnicV2SEiQYsDpinQltLABVwFqt8CTZRiqjS3LEjD7GrJmhypuAadC+i6gKExJJKt+8Ah0TT9IMFEtBytIJaAyqFPXqXCm1mVqFrcJtBmJNqrfA8u6lBJaxrjvBZVX6Za2p1qjEHnwqoi5Xa88t5P1cKtioczDbU4UsjL8cbphVKCKRVhMpcKZVV/6kVpyWo3BKQHlEF6EgwOjOeqrwgYZmylHgWzxtL4pbhX4muti9uZM+clUL2e7V65bbWKKHX/Rx2KWorOZVNcBiCmxZDLccTbW1eUkGiaXpBgIlqKVhFLbl3DnXiJJWYltrZq/yBFqwgkL4QQ0GZawkuVlHothfpfBNeYV+EHZXjXeh3bZZXFzPsuGQAIq7BAgMpv9TQanUZyPQ14BlmYxY+cwWVlOEsQOkVTqo55nYzJIiNOTC4i92q6VeJrRdTCUxi85oBaRZTdW8+sb+SAvRgR06BzWVZcywLHzDz6u1szWJ5E0/SBBBNBuCCNj/LZJkgD2qiSWqOk1QVSKQL1XY2ebjgNnyBJ/UFg8L6ObS9CjQdhVqK3NhMrRlpeHbtRdYWTpULl8mb4sspBUF7Bumb/MVYh5E8m3Fub2ijRlKtjbqIsY19UHsXyMEV7tksFUtRerKhQhUaioHSucPNE+QkoJWRMEb2AdWJaYaBO1ALFsYk8ALSkcCLRND0gwUS0DC3jXSqi8PANIpbkinprlE4undBaWSCVMgPN66pxVkADCoZ3rVaa6hHjJr+iE2Vy7AZvQvPOOqPKN9vfjc/JYih4f/JmtAUf5P5Vcr13T6hojuPvUdG5QNZ0r4Ink/DrG66sGtUyqx8er8PxzJKPX21D5nojUNkbWC1hBBSDPEeqQl69Cr/IBSCBlEuMcdLK4cqbAscmWtPbRKKp9SHBRLQErSaW7KR3hqJGeRXLXbPChN0MprNIUsQ1Vtc8jOlGWUheRGJGY9L4M1wKP0R1+uXYAQHe1DDVbUfSke5v9dwO+Q+rZHKl70NAPhdklTBhh6tFhqOwBK+zAS+E9zMuo5vgAkh4hNOWrv5HiTOPizFVaCRab78y/gsor0nrSSZRZ/HsxE9AcSEwr7sNBq9v4Ze4pkGrUKgpGWO2aAJa09tEtC4kmIim02piCSgYpbmsCcZY4L5AKhG/kROoUyRNR4FUSoyx6Vc1o86IQuJSZGJGYwyGFedfuigbVTUzabgCqJziYxO1uAGAnvZopzo1RlMIJGM55E3uKwbkdho0Jptq+m1ri7EQFOUwAXWzSktFiRPT6n9TT1HkOzbIUFLVJJVHlIdXdAxWXKpa1MmLFQUC9Q+B86KoGbkh56hjGoNuCizsba/LMRmD3efMj1b2NpGXqbUhwUQQLggI5HLcN8/DDcaANp9moFEx00QS4Y0yUrmIvvGrgHvhh1rlklP0qBwPqYMrf4CoxU096GmPQwiZj9SRiCGtm66hQIqcydERl+acpnlvO54xqhaMphCYPZRsiFfB7frIGCYMK+G+Gcg+SYV+V/UoZS+LXlgrAI6cqRZ0MDnCM5s7OC0mPdmq7ouauxrVC8oLp7eJRBMRhNafmYgZTSt6l45N5MG5QNaQsfitUnyARNLJjTJSo+xlwwDkXRYE1CFq8fY4RQUAJGNaSxqWtRKkEpkKTTS5f/5SLWIxZ3A8cXACOauoRDWelUreLeXFKa0KKIRAOm9GLuhDYR1bFTqoR/W60sULJUpasSEzt8Rjs2851fCXA2CxQn6vcz5rlnhS3qZWC9Ej0dSakGAimkariiUAiFnPqmavzs2EnCSiNkqN1EpmYBiRw62Qnc5EvOhKz5kcOZNjVkeimiHbzESBpChtSOu7LRhMzuvekLm3PYEpXQoXt8ILfgT1bnEhsD+RLwq907lAxigOx6smtLAWVFgitz1M9TlGcdhfa3qYVK5VPXOGAo+Fqe9FFF2Tai5z5js1Uzi1mreJRFPrMa0E0+9//3t88YtfxKOPPopDhw7hRz/6EV7/+tc3e1hEFbSyWFIPz2ZC3qTK1CPXpVUxHUZq3uTI+uTMhPFSmEIWCejvSCLhCKUay+qYyBs1j9tJsw23ZqOM+dICG1Ei82uqK0IQ5LoRQnok+ztSduidbnKMZHUwDUWhhs24P00hsD+eQ0LTbNEfZb4YYwyCFxoxqxqTrYYqFFNrg+so4QASLt9FqwinVhRNRGsxrQTT1NQUzjrrLFx11VV44xvf2OzhEFXSamJJCSWg4KJXUeqNnmtORqFUrWE1HXJdokCFtfV3JJGKxzCRMzCW031zZoKigcGwyn4nnInarRDLM00IEvmlVtnVv+uF6glV1y9PFMJCdZPjRFaHbnIkS3KXmnF/5gyOvrYEupJxnMjkETNM35yqap49UpTlEdcY8pxXLOJRDTV75yxPdNRFL+pJKwinVhNN5GVqLaaVxfGqV70Kr3rVq5o9DGIG4fQqudGIqWYmi6SgBsnJIn5qwc5hinBNW9lSOudoR+Hi44ju2q+nR6VlqPARGVD/imXOCnZ1PAwgjyHFUh66KVoqP02FyQVpKFvNcydncMxqT6AzEcd4Tsd4zohk8UJRbeEPp8hSn7sVQvKAcE3Imy2cSDQRXpCVQjSUVvIu+YmlRvQBmilCqdLkTmKoNpStocKAor42GUNZCGqUCfNhc2mmG0F7YplcFIU9Ro3K4akn6lrMc47xvNlyYgmw+n4JYTWUrc/A1L1o1mGiqOZ5WSqyVKVEjkLvq0bnlDnx6svlRzOFU6uJJqI1mNGWTC6XQy6Xs38eHx9v4miI6SKWgGhX8UuZrkLJTxiRKKo/ok7VvzSrzxh3FCSQXooWsoJbGBGgdLPGGGIaa0CPosYUIcjoJgzeemIJdsPa+npXVEiiyVvDg1P6/FWtAkwukIprvl6rZgqpIJQKp5NRNJGXqTWY0VbODTfcgOuvv77ZwyAwvcQSgLos1U4noeQ1uZIwah52fxkg0pgrZwPbZEz2suH1Dh9z4fG9Y409YASYXOCsxb0Vt2MMZTk+USPLN9f1EDaGaEGxhELooyypXaeKhEx+74AK+2uxk4BCGXuF13PbS0i1oojSYo33NpFoIpzMaOvn4x//OD784Q/bP4+Pj2NoaKiJIyKazbGJvL9QsojS7mh1oUTiaHogHCF5UZpozNqnFEyOgicViFrgLOxNRbq/RqCbHJv3jgEsXJ6GG2cHEF5+NEq8KOHXamIJkKKRC1nFTnqYoh+kEmXNWlgITuW72O0Z7yaiWkVANcPb1EqiiWguM9oiSqVSSKWm3yQ802gF71Igr5KDqASTEkutJJTcBBKJo9ZHNeSsNlzUT+CYVnhVW1wDF8CUblRsfjodBU7kMIa5PUnErJC7WqhVgKpQzTMW9tS0n0q0rkCQY5MNguvXtJWBWV4sudDQiil6jLGqG1yXzgWlAqoVxFOjvU2tIprIy9RcppWVNDk5ieeee87+edeuXXj88ccxe/ZsLF68uIkjI7yYjmIJQNWTjaLVhFKpSCKBVH+i9MDIggEM7fEYpvKmzDcKaan5CRzd5EjENAx0pGByjiPpPGIReE1mOiqxPgrLvFYBqkLRtuwfj7zQRq3er0ahCl8YdWwoa4syq88RY/UNtawWHpGYK50rWsX71GhvU6uIJqJ5TCuraePGjbjooovsn1W43ZVXXolbb721SaMivJiuYqkWWiX8jgRSgWblxkTpgcmbHO3xGGa3J3FkKht5A1SZxyQNbg6oBi6R7X8mE6ToQyNQoZXzepKR50s14h6KSpSpCnn1QuUHGZw3pIR7NchroT5izjmXOL1PzRROjRZNzYS8TM1jWllRF154Yc0r/8TJQy1iqZqrrNlepZkukqo12mZC6Jg00mR2UT0egapSnqquJUtlt6Ip2FookdIK50oWfRDQ6uDwaMQ9FIUoE0LeJ3FNLgA4PW1RCTIZ7la4V1qVRvRgcs4xzQzba6RoAkBeppOUmWVRES1Ds71LtXqWwhilzRRKM0UkBTWWZoL4qQrGwFG4LqO2gxiTBpbOecFz1XwN0PJojEHTWGs445jMc9PQmiFilYji3hYohJfqJrc9bQfGcpF5yc4a6rWLpACt6YhlDGiLaw0V8mruaZbXqVGiqRVC88jL1Bymp3VFtDTTXSwBwRPrmyWWnEJpOoikSsbKSSuEAqJCbOrdX0bnAjHGAjdjPdlhDEjVuVx4UNT31RqjaQ4qh0mUVK+L8vnyxN4xmEJ6r8wSL1YlGpkL1qz8QzevU6OEk5qHGyWaiJOL1re0iGnFTBBLQGUPUzOE0nQQSX7CqFmiaHJUQ0c3b5kCHNWiwo3qhcYY8iZvGQFAhKctHiOhi/qGlC7sSyFn3Se5EPdLWC/XdCm04Yeap5ohnA5PZNHfWb85Jxlj5GU6yWhNq4sgqiDKAg9+HqZGi6VWFUpek38reYuO7E7gS+9ZjHUXT+CKfzja7OFUDWNKMMlrU7OMwWc2tmP/9jZc9NaRmr1OmtWQ0+AcAPDos8drHfa04dyVc5o9hEggsSRpRDGGsMcI81wMIq6mk6BqhnDSYsDRySwW9LTX9TiUz3Ty0DrWFzHtaaZ3KepqeNxlMmx0BbxWEkpuk3crCSMvDjyXguAM+56ufyKwH7WKDwF5TbbHNWQMExqT6+f3/utZmBxugzn3EGYvmYrgGAJxTYPOOVbP665pf9OJRojDmSLKpgMCou4habKkeJ28WAGerX6CqlXFVE97vKE5TkKT8/ZAR30EDYXmnVyQYCIiYSaJJaC8Sl4jvUpqMmmmSJquAqmU9Lj8wiZHK39x9TSaV87tqun93CqV3NeWwEhWR0JjYIwhN5EAAPSaPVg5t/brvxBq1PyWAI2k1u8nCK3osZupIk5Wxa+fYFKlxZvp0fN6Hnt5p1pFRDW6OIQWA3acmMLy2Z11O0azvEwUltdYSDARM4Ko+ywJR9Z7o8RSM4XSTBFICmWcPrdLepYyEzH8edsJxOLeq4GNMJqrRSWzm44yeYbOoGctQTiSiOw41RXVJyrRitdXK4i4qEWbLWbqqGZk89pwBR8ahddzu9VEVKlwqre3qV6iibxMJw9VW2bPPfccduzYgQsuuADt7e1WVZrWe3gQ9afZ3qV6NKVVScONEEvNEkqlE+h0EUhBjbyVc7vwHC9MwgtSvejpN+o1rLoiH63CzmFiYMhMFC7KiZForh2ZxxTJrohpQCuIuKhEmxJeKt+vnjAwmIIjPo2yxkqf726eqGYIqEaE6XW3xTGRNeoqmiiXaeYTepY9fvw4Lr/8cvz6178GYwzPPvssTjnlFLz73e9GX18fbrrppnqMkyDKUKF49UAIgaOTWdlnpU5iqRk5StNFJFUyooIaek5RMTUWn7aCCQAEmFUlTxpp2cnCZ5uMTDDJhp+t0IiVODmISrSpZ4bSSkGv4Go8XEqUTedF4koCqpHiqRHepnqLpmZBYXmNI/Qse8011yAej2Pv3r1YvXq1/fvLL78c11xzDQmmk4xmeZfqkbek2HFiCpN5A9AArQ4VlhstlFpZJHkJo6iMqLRTMI1O5whkGZQnBZMAoNXls2lWqFGzergQRLVU88x49shkKA+XElcxxtCWmFkl3EvnhWaIJ6e3qZ6iqR6Ql2nmE3qW/cUvfoH77rsPixYtKvr9ypUrsWfPnsgGRrQ+M1UsAQDT6pPJ0ajwu1YUSW6GSb1DgjLjxR6mRvHI00ci36dqkqn+PvJ0v/3akUPRHZNzGV4dVDM977S5kRyXIBpN2OdPUHE1E4ppOOeMRoqnRoimmeZlIhpDaAtiamoKHR3lF/GxY8eQSjXfKCNODuoplrpSMUwaRqSrh43yKjkntmaKpGaIIzfSE4VzHdQLE4XwOLMORkXO4EjFNftv7OyxX+PptrocMwj1EIdOSJARrULQZ1gQYTWdRJWaS5xhe/UUTmqOfGJvBo//ugOvfQ0wa060S5j1EE3N8jJRWF5jCG25XXDBBfjOd76Dz372swBkDC/nHF/84hdx0UUXRT5AojVppnepnmKpuy1uhT0hspqxjfAqNVsotYpAKqU4hykW2LhvlvgIQ2aycD2lx+LgvD4hpJWo97mqhyCbKSKs3mI1KDPlfEZFpWdfpVDAVhVTjfY6bf5VD26/cRZ2bZnAdf+aiWy/MzWfiagvoS24L37xi7jwwguxceNG5PN5XHvttdi6dStOnDiBP/7xj/UYI0EAqF+RB6dYAqINxau3WGqmUCqd8FtBIDkNSDOvwcifYf+8d6+BF1/e+kLIF8fF6Sz6IARDZjyOzr7pW9TCi3oIslYRGrVSzbl58rdz8NQDc/Dav92B9u5oFr7qeT5nohir9KycDmKqEV6n/c/JdgmHdiWw7cjxSEP06pnPRLlMM5PQVtzpp5+OzZs34+abb0YsFsPU1BQuu+wyfOADH8D8+fPrMUaixWiGd6meeUtAQSwBskKeTKuvnpkolFpJIPkZaMqIHD9W3JsoadS3z0fdYcViPjtZfG1NjiZmpGCqB9PBg1gvHrtvEMN7O7BnSw9O2zASyT7rdT6f3DtWlRib7iLL69nq5Zlqpoiqp3A6uk8+40YOy2d5PfKaovYyUV+mmUtV1ty8efNw/fXXRz0WgvClXqF4TrFkI6rvfFhPsdRoodQKIsnLYKpkpGVKBEV6vLlV8h7ecrCm95tW9TpuFX04cLB4gWpqNAEgurAVYmYyOSqNz6nRaJod15OqPGghRNZ0E1Zez99WEFGlwikK0XR0v3xmjw7H0K7FkeHRFoOYSV4mymOqP6EtiN///ve+r19wwQVVD4ZofZrpXYoaFYpXSqGPR3jBVC+x1Eyh1GiR5GbsVGM4KQ8M0wQEZ5gaq81ArFXwrFtemwGT5xwxq09SKqZhJ4pXRZ/cOoXheG1jBIDz1iyoeR9Ea2IaQGbcEkw13g+tStBnRVBhNR1EVekz2s0T1SgBpeanWr1Nhg4cO1QQAMcOxTF/aX16NZGXiQhCaKvuwgsvLPuds3mbaTanGAAxM6lXKF5p3pITIarLY6q3WKq3UGqWSIpKIJWSsSrkzZqbw4lDbciM+xdGCCKIahU9tcAgw0UVuSn5+bpm5TA5ksKc5GysW572eHcwNu04HlgYkrCafqQdIml69yWrnSDPmCCiqhUFVSUB1QjxtLA3VZO36djBOAQvzPvHDsUwf6lhlx2Pinp6mYiZRegn5shIccyzruvYtGkTPvWpT+Hzn/98ZAMjWo9mVcZrpFgCAKHkUojD1kMsNcqr1AyhVGqE1CMHQgmm2QuyOHGoTRZGmIhjy769nu9ppiCqhGxdW7gsM5ZgmrMwjcmRVJExXC1BP38QYUWCqnl4fTcTBwv32cH9vGavaS1Mh+uj0nOpkqBqFTFV+lxvlPepFm+TCsdTHDsQB5ADIOfZqEPz6lExj4o/zCxCW3e9veUX/CWXXIJUKoVrrrkGjz76aCQDI4h6heIB3mLJSVC9VE+xNJOEktOwaETSvRJMk3wU8fYOGJkkHn5sBC86v3VFkT9MepisC1N5mGYvSGPPllmYGmvcxFxJWFUSVNPBWG42fufv6NaFmDzci2Uvfco11dLr+9k5MQuPW/+O6Z1NXSCoVqy10rVT6TnWqmLK+bx3ep/qKZzCepuO7ivOxxk+WD6/1qu5bRRQWN7MIzILb2BgANu3b49qdwQBoD7epSBiKehjbjqKpUYKpUaLJKcRtnvPLADAovlx5I8YOJFJYknvAIAxj3e3NozJkDwNDEZeg5GXBsWcBbLQQyvlpPgZ4iermAorELzOoRDAf//7mchOJfCil09i7lL3XEw30g5R3ezrpRqx1uiQUSGAB++ej8HFGax83mjo93s98/w8U40WUs45oJ5he2FF0xHLw5Rq58hlNBw7WCygVGheVKKpXl6mRkKFH+pLaCtv8+bNRT8LIXDo0CHceOONOOussyIbGNFaNDocrx7eJa8iD9Uy3cRSo4RSI8LtFKXGk9MIOxLrBgC0d+no6NFx4iCQHm+8kbhx07OR7EcIYVfKO33ZGgCyoEXfXCmY0g30MNVCLWIKaC1BFZUICkN6PIHslLyOJ0dSoQSTUyRlJhPgJqBNI/uq0SGjh3d24E93L0DXrHxVgsmLsEKqUSJKzQv18jqFEU2qpPip5+Sw+Y/trh6mqPOZ6gGF5c0cQlt6Z599NhhjRcnHAHD++efjW9/6VmQDI4h6lBEP4l0KQtRiaaYJpWaJJCdZK2StrctAe7cOIFrBFFQIrT91MJLjcQHkTBMJTcMfHzoAYD1iqSx2HnwGwJmYGEngkceeLQvRWr9uZSTHbwS1hvoF4bw1CyLL3WlGSNuJQ+32v6dGwxliRWGbgiEzkUBnnx7V0FqGqEJGTxxsAyCFpuAAq6U5XwDcnptuIqreAqqewsmZ1+QnmpRgOuM8KZiOHXBX9lHnM0XpZaKwvJlFaGtv165dRT9rmoaBgQG0tbVFNiiitZgp3qWoxJJiOomlmSaUzlzcj82/no9lZ50AkHXdPjMhxZH0MMlrqhrB5CeMohJDQZAhefLfywfm4QkA3T0mzj+7C4/dBggzhrWLFyDVUVhx3bj9qP/4IxRTQsjeVx3d9VvxjUKg5DO5li7uUYmRQwXDMGwvpdI8t6nx5IwUTJWo9P2rZ83uzdJLLTjDHzcOI9GhN9zD6fZMdT5zn/jB6ZjcOwfv+fIOdPZGO1fXWzh5iSbTKOQsnXGefL5PjsWQmWJo73QXIFGIJqqYR/gR2uJbsmRJPcZBEEVE6V2qRyheq4ulRniVGiGUnCLJaeRsfWAAD/xwKQ4+242/+KB77qTTw9TRI43CTADB5CYwGimMvGAAUnENGmPIpuXnaOvQEU9wpNp15DIJTI2nigST37jdxFQtAurxX87HH+5chle+dztWPb+8kSYRDSNOD1PIMMzhg7zo5yceG8as4wciGVettJInVD1rDv9qtv27Ff1zsSe939MzFbWQOvRcBzKTcZxy9njZa+p5axoMv9wyCG5quP/nBuafdRRA9B6oUuFUb9F04kgMpsEQTwrMX2ags9fE1FgMxw7GMbSyXOBHHZo33XOZiPoQyOr793//98A7/NCHPlT1YAiiXpXxog7FC4PyCpSGStVbLM1EoaQ4skt+trFhb892dtISFZ0FwZSecBdMZcKhBQSSGzHrIlI5LKkO+bk6enK2YJo9L9gCgdtnrEVAHXy2BwCw+8lZJJjqiFdIXqAQ0fw6AEBbZx7ZqSQW9gzi9FOb72Gq5Al10khhNXqk8HzJTMSxbpW7UPAL8atGSOl5hh/euAp6VsO7v7wFvQPu8+KJgylwU8YJJsYGcObiXFkIX5TiSc0pUXqb3ESTCscbXGRA04CBBVIwDR+IuQomRat6mSiPaWYQyIr88pe/HGhnjDESTDOMZvRealXvUjV5S5wD//K+AQDA33992G6aOt3FUrOEkmJ4n1z9mxxxP3+GzqDnZMx7e7fuyGFyNzBbVSB5kZ2Sn6O9UxpSnT05jBzpwtRYbaHRpechjICaOCG/i6N7Gtf0+GRj46ZncWRvobjS8CFhf0eVrmHBgYfG5Xc0sGgc+7b3Y2rc+/kzcqQTOzbPxVkv2Y1EkntuFwVh7r9KwioqQSUEMHqkIE4zHostgPezyktIVRJR+57qRj4jn1+Hd3Z4CqbhfQVxcGSn/Lfz2RyleBKisOi3cm5X5N4mp2hSFfIGF0rh0r/AwO5tSRxzKfygaNUCEI3OY6JKefUjkOVXmrdEENOJKHOXwobiDR+I4ZlN0igZP6Ghr79geEwnsdRIr1Kl/ALOgeP7pXGQS8eRz2pIthUbdMq7xDSBZLtZ8DCNJ6a1UFKokDzlYerskQ0d0xPRrmI6z0+pF6DUMFWCaeRQO/SchkSqvkZ2I5kaS+Cn/3EaBpdN4qK3NWY+dBMGRj6B/FQhVEjkOgNfw5mpJDiXKzb9C6VgSvsIpj/+ZBV2bp6Hzt4sVj+/eQ1uSwkbZlr03hBiKj2esBddAFlVMCxuzzI3EVUqoHZucnhbdnfg1PNGXfd/bF9B0B3Z3QHOYS/KAd7iKaxwevgns/GHOwbxtut3Y/5ymVPkFE1Abd6m0up5todpSAqggQVy4Xb4YGUhEFUBCArLI0qJNgueIGrg2ES+5b1LYTm4szDJnjgSQ18/x+N7x+oilma6V0kxcrjd7kEEyLCk5Lziwg/ZSSt/qVMHY0BHr25tG4cQwPNOq2xkmgbDvd88B/OXjuJ5r9gR6LM0ChWS195pheT1ys/v5zGoFS/xtH7dShh5zV6BF4JheG8nFqycqNtYGgnnwH3/vQpHdnfj2P5OXPiWXXWplhYkd+7Inl78GUA8YcLQY8hMpmAaDLF45RVsJY7aOvPonlX5ehk5YoW9HmvNxqBuhBFT4wcH0dY7gWRnxlVIOcPxAH8PUxjcnnHOZ6AQwLZHVts/H9ntff6H9xYEk56L4cTBNvQvci+Co57f1Qinpx7oRXYqhl2bO23BBESb2+QUTUf2yf3MtQRTv+VpOnbA32SNystExR8IN6oSTPv378c999yDvXv3Ip8vdhV/6UtfimRgBBEFzfQuAcDBXYVJduRoDI93H4tsPIqZIJbCVC0b3lu86jc5ksKsEsGUcRR8AIBtO7cBOBeCx7B2yQIAlSfDw7v7sHvrIA48N7vlBFOu1MPUbVUBrDEkLyjKMFVGaGa0u+j1mSSY/vyTIex/WiXZa0hPJNDZG03eT9jcuRNH5LU/d8koDu2aBW5qSI+n0D3b3Uh2osRRZ28WHd3KI+kumIQAJk5IY3xydGZUwHWe28N7enHnj16ABctPYOkrf+IqVtsnX1j0c5CCMdXifP4dP9CBB8YKIunADm9RqwRTst1EPhPD4R2dnoJJEVY4CQEc2y/HMHHc/RxEFaKnRNPw/lIPk/zbrReTG1GWGScIRWgL8P7778drX/taLFu2DNu3b8eaNWuwe/duCCFwzjnn1GOMRJNoRv5SVETtXaq2Kt7BnYX3Pfm0jrOXRxuKVy+xVG+hBFQnlgDg2L5iwTRxojwMTYXktXfp2LjpWcTiQCJlQM/FkZ5IItVeWTCNDsvj6Lk4cpl4oPc0ioyVw9Rm5TB1WCF59fQwuaGM0F/9qtjlMlPymPZu7cWff7oIAKDFOLipYeJ4qibBVEuBkROH5XmdPW8S48c7MDHSjsmxtnCCqSdXCOH0uF4yk0kYuvTizhTB5OTgjlkA5KLIG5bPLfPQbdx+FE8/KRtCM41DcA0H9lU+x1Gw6wk5toWnjuHAMz3Qp9rwh4eOI9mVs7c5b80CZCZimByRz4HTNpzA5l8P4PDODqx5SbCCK0GF0+RIHLm0vBbGj3mLxqhEk+DA4f3yeIOLVA6TtEWOHYwV5VK50aq5TFT4YfoTOrDg4x//OD7ykY9gy5YtaGtrw1133YV9+/bhJS95Cd70pjfVY4zESUDU4XhAtN6lajm4uzDBTB5PkFiyqFYsAQUPUywhJ1G3wg8qJC9rjGH9qYNYf+qgLSq8VtVLcYYiTY60ltGoPExtVkheZwNC8vxY0DUfAMA0+Z3sebp+q/GNYnI0gfu+sQoQDGe8+AjmLp0EUMjV8oKb0ugrZeOmZ4sKNKg/YVBhcrPnThWu54Df+dRYQTBVEtjjJwqhXpMN8lo2kmMHZEVHbmo4fqi77PX1pw6izZTFegaHZFnvdtZtf4fOP1Gza7MUTKuedwyz5krRNldbhHXL59jPy4e3HMTvfy/DxHsHclh8uvTmHt4ZLudmeF8b9G0rcMYi+awvbZALFLxLADBxwn9OLa2iVw1dRgfMvIZYTGDOPPk86Z8vBVAuo2FiNJjZWm0YvaK7LR7ZwmvUtg3RHEILpm3btuHKK68EAMTjcWQyGXR1deEzn/kM/uVf/iXyARJEM6nFu8Q5cGhX4b1mQEM9CLVMSH6oCXPlnNnYu7XbLokeJbWIJSEKgmlotaw0qFZZnagE7Xh7YVW4o0t6YzIBCyOMDhcE08RIu8+WjUflMLWVFn1okmBS52fxafK6TI/04uE/72zKWKKAm8B9/7UKmYkE+hdN4SVv2YXuOfIcu3k0FabB8N1/Woc7bzzTvnfchFK1qJC8WfMm0dWrGnoG+87VtdHh8DDpuXhRYQPF+HFn6fKZJ5iGDxRE0vD+HtdtRo/Kcz1/2QgA6XVzCl07LDVCAZWZjOPwDjm2pWeOYGCxNNiHHV51JZxm8XkAgHjfCA4bshDJ8N52mEYw4/zo7nZ8//rT8OvvLMZzj/bZC2SPPH2kSDgddwomj5A8J7WKpuMH5P3VPZhHzJo+Eymgb8DyMh2oXPghqj6JBOEktGDq7OxELicftgsWLMCOHYXY/mPHos/PIIiwRN2otlpOHIkhlyncYmPD0TzE61UNz+lZuv/WIdz5z6uw9Q+zK7wrHLWIJQCYPJFEdioBLcaxZM2o9TtvD9PQgsLkWilvoxQVkgcAEy1kNApRqJJXGpKXyyRg5OtQkaACE5YHbt6SMXmehYb08dl1WYFvBA/fM4QDz/QikTLxqvdvRzzJ0T3bEkzHva+f0SPtGD3SjiM7u5GbikcmlAApxpTXc/bcSXT2hgvDLOQw5ZBImYgnDc/3jx8vLBbkMgnkXUTVdMXQNYwcLjw7neJJITgwap3r+ctGAUjBVEqpgFp/6mBNAmrPlj4IwdC/aArdc/IYGLIE095yz9Gx/fJ3y0/V0daXRrwtD9PQMLyv8uLO6JEk/ucLKwuly3cUSpI7hZM8TuFzT47GwQNE6tcyNx07IJ9tvfOL8+PD5jERRNSEnlnPP/98/PGPfwQAXHrppfjIRz6Cz3/+83jnO9+J888/P/IBEjOfejSrjSIcrxbvEuCokMfkUnMUgqkRYombwI5NfQCALb/tj/Q4QPViCSistM6en0HvoLXC7uJhOrBXhrKoKnIA0KEKIwTwMAnRuiF5Rj4G05CGjvIwpdoNxOLSkpmK0JMZFOVh6pmdweCQ9PzNZksABGyo2gIIIQ3Wu75wBh65dwgAcPGVz9kFRbrnyOvHLyRvbLjw2sMPHgYQXen60eFOCK4hkTLQ2evIQwoYMufMYWLM/36YOFFsdNfLy7Tvmdn4r3+4GM88Nq8u+3fjxOEuu7w64O5hmhxrg6nHoGkccxfL6zkzmQzkca9FQO22wvGWrpVeLdvD5CKYVGuFOYvSOGfFHCxYLrd96A+6ZxNdQFYK/eGNq5AeSyCWkLGjR/cUF0hwiiZnSJ7gDJMjweaxlXO7qvIyHT8o582Fi027XyEgezEB8O3FVMozR2sLy5uuTOf881YmsGAaHh4GIKvgnXfeeQCA6667DpdccgnuuOMOLFmyBN/85jfrM0qi4TT6hpuJMb4HrXC8ucul8T5+LBZJiFu9KuKpSfLwzk575XH/9m6MDUeTqOo3iQdFGQ79Q1PoniUNRjfBpGcLJZQV7SE8TOmJJPRcYWJupZA85V3SYhyJlLxPGXOE5QUM0YoSJSi7ZmXsnI/hfb1FYUutiuDAc4/Oxg8+uxb/+5XTceCZXmgxjvNeuxernl8w+IJ4mMaOFoRFbqIr0j5fI1Y43uy5k/L7DhmSp5oaq+vEL4xzvEQw1avwwzOPzUc2ncTGXyyvy/7dOGZ5lDp7stbPPWU5Zyocr7c/bXtvOdeQy4Rf9PIL4XPCTWDPFimYllmCqd8STGNH25HLFLx8nAPHD0qR079IbqNy7JJTc7Fu+Rw8vOVg2TM3OxXD//zLSowdTaF3MIe/+KAMmx3eW15RTs0Hh3YXh+GNBwjLcxJWNB23PEz9C4oLqwwsLBR+CEIUYXlR5jER05/AgmnhwoX4y7/8S2zfvh1nnnkmAKCjowNf/epXsXnzZtx9991YsmRJ3QZKEI3k2eFMzftQHqbTnycnZkPXkB6vPlyqnkUenAUe9mwpDlHZ9mDtYXnpiRj2P3wKTptbfad5oCCYBhZPoWuWFEPZqQT0XPF5TWny87S5eJiC5DCNDRev6E60kIfJDsfr0IuqRTWrUp4QBUHZPSuLAcvDdHSfXLlv5ebAuXQMP/jcWvzfzadheG8X4kkTZ7/sIK684TGc99r9RdsWcph8BNOxwnUy2BGt1+SEVfBh1jxpGIcJyROiOIfJ+bdrSJ4lmOzCKnUSTMcPymfNsYM9OH6wMZUVVcGHFWcfRixhQs/F7fA7hcpf7B1II57gSKSkd8MtLC8Mft6nQzt6kEvH0dalY+4psohDR7eBTmthSHmUACnMjXwM8aRpe9oHl0rD/sgueR6dBSIe3nIQep7hx19ajuG9Hejo1fGmf3gGS9ZMAExgajSBqdFygbGqfxZy1gLTwJA8TpA8JkU1+UzHLA/TnIU6FvambC9T/zQPyUvGWF2iaYjGEdh6+/a3v43x8XG85jWvwdDQED71qU8V5S8RRCuw48RUZNXxat3Ps09La3bhyhy6+uTDvtqwvHoXeXCyZ6s0KOYvl4bZUw/Mrskzxjnw3c8PYdevz8Af/6e2RZXhvXICHlg8hWS7aXtYSr1MGbuxa2GCCpPDpAyohJXn0UqllVXBB9WDSdHZJMGUnUrYJai7+rK2h+n44a6ifKpW9DJtf7gfw3u7kGw38Py/2Ier/uVRXHDFbnTPLjdslIcpO1ku0BXjw4XrpDSsrVYKHiZpGNuVEQOE5OWzcfs7Uu/zuh+EKAimeUtGAdTn+hcCRRXqtj+6IPJjuKFylgaHxtG/QAqT4X3FFUFV/mLfgDzX7apgTI2CqRSn5+lPv5S/6164F5rj8nLLY1L5S3MWpO1tlYfpxMEO+/p0Vtb7/pcGsP/pbiTbTfzltc+ib24eyTaO2fPkdXDUxct0/IC8DlI9OWh9UriMHw83h4VZ5BOi4GGas7DEw7QgnIdJUWu1PIJQBBZMb3nLW/CLX/wCu3btwnve8x7cfvvtWLVqFS666CLcfvvtyGYb06OAIJrBM5uS+PX/dOK+27vw01u68aOv9+CH/9GDrQ95N348YcV+Dy7R0TsgDe/RGvKY6pm3pMhnNRx8Rk7GF1+1D/EEx4mD7Ti6u3rjb+O9czFudW5/7tE5VRclyE7G7dX9gaEpMAZ0eYTlqaIPzx09bP8uTA6TWmFesOIEAOlBcSsV3QyyVg8mpxgEELrMdFQo71JHdw7xBEdXXxbtXTkIruGY5UFoVS/Tjsfkdfm8S/fj/NfvQ3u3d/+WVIeJpNWLy8vL5MxhitorqXowzZpreZis7zs7lYSh+99TSkQn23QkkvJCtj1UJSF96YkkTD0GxgTmLR0FEDzsLwwTI21FYa/bH51fl6qcToQoeJj6F41jcJEVPlqSxzRiheTNGqyvYFKsP3UQmYNL5TGX7CsK2Rt0yWNy5i8pumbl0dmbhxCsLOdpcfsiHH1S9hM79Q0PY3BpIYJiYIncx/Ce8mf88YPyGp47lENbjwpJra5lQJBFv8mRGPJZDUwTmD23IJge3ztme5iOH4qDB3wWd6ampzeKaE1CWy5DQ0P49Kc/jZ07d+IXv/gFFi5ciPe+972YP38+rr766nqMkSCayvCBGG583wBuu3EWfvDlPtz1n72457978H/f7sG/f3QO8i5rBaPDGvLpGDRNoH9h3hZMY8fCPcAf/N8e/PvHZmHzj4bw+P192Pd0O9Lj0VWsKu21tP/pLnBTQ09/DnOXprH8nFEAwFN/rK5Qw9Hd7Xjgh3LlOBbnyGfi2Gk1ZgzL8D5pJPQMZJHqkKuNXZYnwNmLyTQY8lauQby90OwxTA6TCslbuHwEYALc1OpmLIVFheSVeZhCVk2LCiUMumdZjT5ZoXfN0ZKV+0ZyeGeX3XDTjcxkHPu3y/EtPyeYB9cvj0lwYNwRknf4YHS9qAQvGPHKw9TWqUOLScux0iKAsweTwsvDpCrkdfZl0TtHfqf18DAp71LvwBQSKQMTJzpwaFdf5MdxMjHShlxGVtmcPXcSA5ZgOloimMasBZO+ASkm6i2Yxo61Y+RIF5jGcdFL9aKQvTHzOQDFpcWP7S/OX1IMLpNi+sju4sW1jfcuAsCw/Jzj6FtyvCi3adASTKWFHwDgxAH5vc9ZmMWypTJiYveu8PnNQRf7VIW8vkEDcetUq96FswZNaDEBQ2cYHW5s1UbKYyKAKgSTk4svvhjf/e538Z3vfAeapuHrX/96VOMiThJaMab38YOT6EgWHsjPbU5CcIbeOSbOf2UaL37tFC76y0l09ZnIZzVs31RuPP3+Ifm5+hfpiCeA3v7wIXkHdyTxv/8xgP2PzcG2+xbgp//fQnz746fgS1eehq99aHlRyfKwlOYtKfZskYbDkjXjYAw4/UXSw/L0n2YHKifrxMgz3HvzMnBTw5xVh7Du5QetfQ1UNWY7HG+oMHm5FX7ITlnnmAmcd95ibNx+FBu3H7U9THouXtHLpTxMs+dN2kZmq5QWz9rhhq0RkjdpeZi6ZhVWDkrzmDZuP9rQMR18tht3/vNa/N/Np3pus/Px2RCcoX9oCn2DOc/tnPj1YpocTcI0CtdVbqIzss89MdoGIx+HFuPo7ZcGrrPwQ6WwvNL8JcC76IMKJeyZnUFXn1VYoh6CyfI+zl08huVnSU/w9o3Bw/JymTh+f/dpOLInuChXnqTZ8yYRiwtbMA3v77G9W9wslG9XIXmFHm71ubd2b5Ue2AWnjCDVUfByrj91EOc/XwqVY/sLPZZUSF7/ouJwMxWWd9QhmEaPtOGZP8tqp8+7dH9RbhMADC6Rovioj4dp9oIsumbJ5012POUayh2ESl4mr4IPABCLw25kGzYsrxaiCvEnpj9VW1y7d+/Gpz/9aSxduhSXX345zjnnHNx+++1Rjo04SYiqQl69VoF2b5PG0fNelsb7PncC7/ynEbz9H0ax7gJpTGz5U7kxUQjHkxNtr9V0L4xg+r//6ocQDAMrx7H+Vcex7KxJ9AzI/R3b14b9T1cXJuc32e3dKo2YJWtkbP/SteNo7zIwNZqwXwvKH+5YiOP729HRq2PFqzbjtA3D1jH6kJ4IPwk5Cz4oVOEHZy8mFY7X1mlA04D161YCADbvOWiX3vbzMglRyGHo7U/bRmOrVMqzPUwtE5JX7GEC3D1M6ntoBIes5p/7tvXZnslSdjwqDccVAb1LAOzcJreQPOVdUoVG9Ew7TCMWiWhS4Xh9A1PQYoW4taAi2dmDSeFV9EHlL/XMSaOznoLpkPxMc+ZP4NRzDwEAnt00H6YZbD7Y+MtT8Phvl+Hhn68IfEwVjjewUF6fcxZMgGkc2amk/RnHT7SDcw2xhGnf+8o7XS8P066tchFp2Zrya6Vndgapdh2Cx/DAr4fx0MO77WttTolgGlxa7mHa+LOFEIJh6doTGFwin51O0TSwWO5j5FAb9FzxuT9hCaY5CzL2tS+mqnsOBvEyHT8kn22zSwSTKv5gF344EG7+eHT/eKjtCcKNUIIpm83itttuw0tf+lKsWLECt956K6688ko899xz+OUvf4krrriiXuMkiEDUYzVICaYlq4sf4ms2yMl060MugmmfNELm2oIpXEjeMxvb8czGDmgxjjd/+DBe+d7DeNt1e/Ch/3oWp22Qq/fH9vkbMX/+yWx855NLXUP43LxLU2Nxu7zs4jOkYIrFBU49X3qZwoTl7dnSjUd/LiviveI9u5HsyGP2/AwGl06Cmxqe/XP4/k4qJMVNME0UeZhUU1fHSu26lWAMiLVJoz7tY/hkJq2S4kygtz9tC4FW6cWUs3KY2lqk6IOzQp5C9WI6cagLf97a+IbmI4cLRt3m35RXq8ulY9j7lBWOd24YweQdkqfylwYWT9nFSFYNnQ4AtpezWkZUhby5xYtCXnlIpTh7MCmcVSOd+XnjLh6mzGSqYp5UWFRI3pz5kxhadRzt3Tlkp5LY93TlZ4NpMmx7WObkhFkgUCXF+xfK51s8we0QR+V9Ut7lvv40mPWR6xmSt++Z2dj3jHy2Lj1juOx1xoB+S+ANJJYifbwPAJDsnEJ7V3HO3dwlUjCNHmlHLh3D+LGU7dF/3qXFVR+VaNqyfy86enQIwXBsf+G+MfIMY0fluZ2zMIuu2fJ5MzmSgOD+C29++HmZVEhe/8JyDxMA9FuFH4ZDeJjIQ0REReAn4Hvf+17MmzcP73nPezAwMIB7770Xu3fvxvXXX4+lS5fWcYgE0Tw4B/Zulw/xZauLV/RPf34WjAkc2JnAiSOFB/jje8cweUhOPLaHKURIHjeBe/9LGg0rXnIEs+YVTx79i6TR4+zA7saf/rcfe7d24snf9tm/C+JdGlySRkdPYSJWYXnPPtKHfLbyIyMzGcPPvrYUAHDWxcNYvq6wunfa+dJoDBuWZ+Q12wgeWDxp/75rdnlIXsbyXrV3FZ+39etWos+yxTZv8y4br/IXuvuyiCe4LQRaJiRPlRX3CMnLTKQCJ0UHIZ+LYd8z3pUS3TxM3bOyaOvMg3MN6ROzGupdAmQYkmL7QwPIThUbWLs2zwI3Ncyal8acBcFbCNgheS6CSVXI6x3MFm23ft1K+/NXK5qcPZicBA7JK+nBBBRymDjX7GsKAMaPFwRTW4dulxaPUohzk9leszkLJqDFBFatk16m7Y/Or/j+3VsGbS+x3+JHKcOq4MPCwjNpoKTwQ2mFPKAgmMIcKwhjx9vxs1vWQXANpz3vgC3eSnGOcSC+GADQMWekrPJke7eBnn55TRzd04VHf74Q3NQwtHrUrnrqZN3yOWAMSM4Zsd5T8MaOHG6DEAypDgMdvYYMyWMCpqFh+azqcloreZlU09o5LiF5ADBQRfPaVqKRpcWpeW30BBZMDz30EK6//nocPHgQd9xxB17xileAsZnXbJQ4uSl13R/ZG0c2rSHZxjF/afFqXlevwLLT5YN9i6NanhDAkT1yYi3zMA3HK1aC2nR/Nw7tSCHRbuAvrhwre71/SBo6w/u8DZjMpGZXM3r64eJQOjfvElDIX1q8pvgczF8xhd7BHPRcDM892uc79lxaw4+/tByTI0nMmpfFS95avKq56vnHwTSBI7u7MXI4uAA5tr8DgjO0d+vo7C1MpnZInqPog8phausqr3jW0WPlMWXaPVf97XA8y2CyQ/IiLhNdLbYHrcTD1N6dA2MCQrBIcy3u/96Z+NH/dx6e3eTeV8jNw8QY0DZbrpbPaVsd2ViCosR1st2AkY9h2x+Lq/TZ4XghvEuAw8PkEpI3pgTTQNbebtwhrJRwqsbbdMLLwxQyJM+ZwxSLC7uxs9NLozxM3bMzshJlHcLyRoc7wE0NiaSBHktor7LC8nZungs95+9B2PKnRfa/MxPJQNX1cpm4XdBiwPIwAQ4xYnmfbA/TYLlgitLDpOdiuPe/z0F2KonBoTG89PItnts6BZOqPLl8lfwuS0WTymPauWk2tj4gr/vn/UXxc9jJuuVz0DXXCqF15DEddxR8YExeL2ohbXIkgTMX91btZXJDCODYfn8P01RKfm/TVTAR05vAgmnz5s3427/9W8yeXXsTS4JoZfo7C5PirqescLxTdWguc7hbWF56LIbMRAxMExhYJB/8ysOUz2rITnnfdnqO4b5b5D22+pUH0dFTvko0YHuYUp6GwvDewnj2bevA5GjMd3IToiCYlpYIJsaA018oDcunHvC+/zOTMdx5wyoc2N6NVIeBv/jgTiTbpKvjvDULsGnHcXT06FiyRq5mhvEyFcLxJouataqy4tnJhF3IITNpFUXoKp90O3rk7wZ7Fxat+jsN2FE74VvG9nfPrq5S2LED3XjmsXnY/+xsjBzpRC5dWSwHoeBhKl6p1LSCYReVN2BipA3PPSFDK/e6hEqZJrOP5fQwbdx+FJ0D0jN5dE9n2fvqSS4ds5sTP98yFDf/dp4ddqbnNOzZ2gcAWH7uiVD7Vp6jyZFkmRfPKZh6fJrcel13fihvzOx5pR6mkCF5vcUlPUsFl+COog9Whbyu3ugFkwrHmz1/0g57m7d0FD1z0tDzcezc4l2GfuJEG/ZsKzw7TCNWUWABhSITXbMyRd7ZMg/TUeVhKuQHRS2YhAB+efuZOHawB+3dOVz67scQT3q7hYsEk/KSLZiwy/U7RZPKY3riN/PADQ0LVo5h0an+OTxnnCmPPezwMCnBNHtB4ZpReUyTLkVPgrJybpdrWF56XLM9wbPnlz+7F/am0DtXHn/4QGOr5HW3xalSHlFblbxm8NWvfhXLli1DW1sbzj33XPzhD39o9pCIGcyebdI4XbLa3Y2+5nxLMP05ZVeRU/lLs+frSKSkhZxsE+jorlz44YG7ezF6NIGO2Tm8+oryEAoAmL0gDzCB7GQcU2PuE8fwXocBJRie+bOcZL28SyOHU5g4nkQszrHw1PLjqrC8PU/2YNylD8fUWBx3fG4VjuzsRHuXgTd/4hnMXVYe6rRpx3Gcdr70PDz90EDg3kbHVMGHoeJJK9VhIp4sbl5rF31w8TC1d8uJOD0hP4Na9Xeu/O/aKc9pn1WNrLuKog+5TBx3fvl8/PzWdbj7P87DbZ+/AF//h0vwnx9+BX76jXU1CaesRw4TEH3hh6ceWgTB5TRxZE9f2etTo22AYIjFTduoVCJg7fPlOI/uDlZSOCqUd6mzN481LzmMZLuBsaPt2PNUHwBg95OzYORj6OnPll1Plejsy4Npssx8eqzYaFQ5TD0DOXT5hO4B7tedF5nJhP2dzxr08DBVCMlzy2ECygs/pCdSMA3Zg0l5lurhYXIWfFAwBpy6XlZu86uWt/WhRYBgWLTqGOJWY+kgrQKUB2lgYbF4UD9PnOhAZirhG5KXmQzmzarExl+egucenw8txnHpOzcVeWfdmDV3CrG4CT0Xx+HdfQBkKCOAMtGkPEwQcmXJz7ukUPfB4d1t9jNZVcibs9ApmOQzZ+KEfH5G6WVS4Xi9/QaSbe4nuWdQHn/kaAyGuxPKlXk9bVT4gaiZaSWY7rjjDvzd3/0d/vEf/xGbNm3Ci1/8YrzqVa/C3r17mz00Yoay+2lpqCw9zf3pvGxNHu2dHFNjMezelsDje8fAj0ljQIXjKZxheW5MjWn4zfdlj6IzX7cP8aT7pJFICcyyVtqO7Xc3FI7ukZNdsl2Kie0P+1e4U96lBasmbZHnZNa8HOYvn4QQDN/8yBr85N+XYefjPeCmbGT4g8+eimP7OtDZp+PyT213FUvnrZFG0ClnjyDRZmDieBsOPtdTtp3r53Ep+ABII6u7JI8pO1le9EGhPEzp8fIVUmXAZkbluRrOS+Oty/KcTI2nAlfwOrK3F0Y+jnjSQN/AFJJt8rjc1LBz87yqC0gI4Z3DBDhyWiIQTNxk2OoIfTp+uAv5bLFAV/lLXX1ZPPpswfBfv24lBq0E9OMHOmDojQvfVvlLfXMzSLZxnP5COabNv5YhhTsek17SFeceR9iock0reDWdpcXzWc32avX2OzxMHoLJSalwKhVPquBD96yMXUxC0WXnMHkfx8hryGfkNVMmmEp6MalwvK5ZGcSsanx1EUwHCwUfnJx6rrzn9m7rR2aqfGGGcyniAWDNhv2Fct8BPD/Kg9TvCMcDgFSHgZ45cnHkyJ5e28PmFpLHTQ35bPnz2zQY7rhpA+75+rkVBdWurQP4072rAAAX/uVTWLB8pOLYYzFhnyshGLQYLxLPzr5Ng0snASYHMXfZBBafXh7WXUrfvAziSRNcj2PUKvRw4oA8D7MdOX6FqqTRF79QBR/meITjAUBHn4FkikMIhuOHG+tlIohpJZi+9KUv4V3vehfe/e53Y/Xq1fjKV76CoaEh3Hzzzc0eGjED4Saw52n5EF96uruHKR4HVj9fGh1brLC8I3vke+YuKX7wK8E06iGY7v/ubGSnYliwIoslz/PPrehfpMqLewgmy8P0vEulZ2jnE51Y1e/dMHbvluJy4m687Kq9mLMwA1PXsP3h2bj7iyvxtf+3Frd/+jSMHGpD95wcrvjUdvQv8l4tPW/NAjy5bxgrrdyRpx+qXBGL80Jn+1LBBDgr5cnPnLE9TN4heelx96aiQgD6ZB8AYP35s7Fx+1E8dXA/mGYCglUMfVKo3jDLzhjG2z/1e7z/C7/C1f96H3r75fhV2F9Y9FwM3JSPbTcPU5SV8nY/NYDJ0Xa0dealEBMMR/YWeyiV102k5Oqts8BBT38OqQ4d3NRw4mB1n7caRo/IMc2aJw29My+UPX52PzkLJw62Y9cTUjAFbVZbilulPFXwoa1LR6rD9M118qK0OIQSTiesgg+z5pZ7flVIXjad9Kxip66FWMJEsr14EaG0F5OzQp6iPh4mSzAtKH7ezJ43hf6F4+Bcw9N/Xlj2vj3bCtfkKWuPhAqVU7k/pR4moBDy9tzj8yAEQyJl2FUEASCR5EhY3iy3Yx0/1I0je/qwe+ugXaDDDSOv4Ze3rQUEw5kv3Is1L9xXcdylYwRk8Y9Y3F2Zbd623S4f/vzX7A+0KKBpwJwFUjT+8Q9ZcFNGHQD+HiZFNV4mZ1geN4GNP7dKvi/yLorAGNClWmuELC1OELUybQRTPp/Ho48+ipe//OVFv3/5y1+OBx980PU9uVwO4+PjRX8IIiiH98aRy2hItXPMX1LurVCosLyCYJIT6mCph0lVynMpLW7owMP3yglj5aW77Lh+L1ThBzfBJAQwbHmYTn/BGGYvyEGYGnY94R6Oxzmw9yklmLzvkbnLMnjHvzyFv/rcNpzziiNo79aRHktgciSJvrlZXPGpZzBrXrAGoLElOwAAzz7SX9H7MHK4HUY+hkTKRN9guRgrFH4o9jCVltwFCoIpM+EumLKTceQz8vvpHchi/bqVeN45K9E9R75v4xPZQLknRy1hMXdxYXU3nuR2XsRYlYJJeZdi8UIoohM7xCqgsPNjyx+HAACnn7cf85fJVfDSsLynn5XnONU9VVYJjzHYhlsjw/JUSF7fXHmtzJqXxeIzRgDB8PP/Xgk9F0PnrBzmLXMPea2E3YvJIZjGrL44vVaFMr9cp0qUhutt2yYfBqX5SwCQ6tALvcU8RLIzHK/UeC4N4XRWyFNELZiMvGYvGPTPL1+gOf08GUL2x/89tazQyNYH5TV52vMOIJ7gaLdETXrCXzBxk9lerVIPEwAMWmJkx2aZr9c3MFV2rvzEmSoUAQC7tnrnX+17Zg6y6SS6ZmVwwRuf8h1zKU7BVCo0FSo8b9GLf47LProFy9ZW9l4p+q3FqKmjvRgbTsE0NMQTHD39hXmsy+5DVjgHXmHefpRWy7vvltl4blMHEm0cL7ps1PN9C3tTdljeMBV+IBpMoCtu8+bNgXe4du3aqgfjx7Fjx2CaJubOnVv0+7lz5+Lw4cOu77nhhhtw/fXX12U8xMxH9V9a7FHwQaEE044nk8hNaThaUiFPUQjJK9/ZoZ0p6DkNHd0m5p42XrH8ar+j8EMpEyfiyE7JohNzFuVx2nnjePBHA3j2kT6ctqF8Aj2yqwO5dBypDgNzl6XLXnfCGDBvWRrzlqXxkrfux+7NvTi0swPrXjaMzj5vUenkvDULIE4HnvlpBrlxueK/cr33ar9qWNu/aMpVSKoQKVswTVXvYRo92mbv05mE3T0rh/HhNizsX45T1/Vi46Zni0STMlQUyhMzuLg4HKa3v0bB5Mhfcls5tj0GNVbJGz/Rht1WYv2aF+zDzifn4rnH5+Ow5TlTnz03cQoAYNkK9+PNXzGBfdv6sPUPgzjjgiOhQ+CqYcQKyVMeJgBYe9Fh7N06C8f2yftqxboTFRclvOh2KejgzF8CZK6TFuPgpoap0aQtsiohBJDPxGRYl2A4Y+Vq7Pu19LSM41Ah5NG63hiT3/n4iQ5MjaXsQg1OplxKiitsj6QlOJwV8hRRC6YTh7sAwdDWmbcFj5MzX7wXh/f04ZlHF+Dnt54NI/8kVp93AJNjKbvB65oXSM9MUA/TyNFOmEYMiZSB3jnlzzglRnJpuZ++wXJPdntXHuMnOtwF09GCV2n31gGce/Eu13HsfFLaL6ececTTQ+SFUzC5iT7F+lMHsXH7USw6LdwC8cCQPC+TR3rwpz/tAQDMmp+F5rhP7KIPI+7Pz2rY+mAHfvN96fX9y48cxdyl/slJPSoc/RCF5BGNJZBgOvvss8EYgxCiYilx06xv7ffS4/uN6eMf/zg+/OEP2z+Pj49jaGioruMjZg67rYIPSz0KPigGFpqYu1jHkb0JPPtgDyZH5W01OOTuYRp38TDt2yaNkaHTsoGMSj/BpLxLcxbkEE8InHr+BB780QB2PtELI8/KcqP2PGmVEz9jomhyrEQsDiw/ZwzLz6kcI18K04C1F4zhkZ+2Y+MfOjE56xm7kWIpR3Za/aGWunsEuuxJ3ArJm/Ap+mCVFc9OJmAarMxoGT0qDcbeEk9WqZFc6k1xVqnKT7VhcrQdYMJu4KqoWTBZHqaUS/4S4CwCUJtg2vqnITuxvm8wjblLRwEA+57rwSNPHwVj8hwc/L003FU/rFLWXngYm36xAEd2d2PHY7OxImRVurAIXgjJ65tbMPqXrh1B95wsJo7LeyNMs9pS3ATTuKNCHqBynfIYP9aGieOpQIKJc+B/bjwTh3e65xuue34PFq5aWSbWO3stweThYUq7lBRXdJQUjVBlt53Cq6u34IXiJoMWq63qQaFh7YTrsy4WE3j5Xz+BeMLEUw8N4Ze3r4WejyGXTkBwDQtOOYHZ86SgCZrDVGhYO+4qlJ1iBCiukKfwE2cjDsF0cOcsewHKieDALqv63ylnhu/HNWfBhMxNEgz9Hh4mJxs3PRuq/5kq/JA/3of0MXl/OMPxANjNayeOy+IXtS6AHD8Yxx03ShH5wjeMYt1LK3t9ey0P056no8+jIgg/AplHu3btws6dO7Fr1y7cddddWLZsGb761a9i06ZN2LRpE7761a9i+fLluOuuu+o20P7+fsRisTJv0tGjR8u8TopUKoWenp6iPwQRlD0VCj44WXO+NCoe/6k0+mfN1ZFsLzYsbA+Tm2B6Who1Q6uDhbQpwTQ5kkBmsvg2VvlLg0vkNgeM3Uj15KBnY9iztdgYy0zEsPk3Mo/ILxyvHiw5Qx4vPyxXjTftOG7/cXLIMiDnL3c3EpyJyNyUFeoA95C89k4DzEqIVrlOTsaOFgoGuB1jwiPZ2RlGNXlUns/2vjFs3nOoyLit3cPk3oNJUZqTUg2mo9jDmS/ch43bj2J/5jmAcejpDpy29AzbEFPnw0sQdPTqOPsSmcj/px8vtitJ1ovJ0SSMfAxajKOnv3AvaRpw5oUyz6K9O48FK6u/1t3yk8ZKBJPXdn48+0i/p1iavSBtF9FwXmsAkNOkKN/2rEfvGo+S4gDsPB0V0jbhksPU3p2DpslE+yhy41SFPD+jX9OAi6/YgrNeshsA8NsfnoGNv5LezDNeUMj7abeKVlQWTIVS3G509ubsAhhAcYW8wrG8w/9UZT0AEFzDHpcS/If39CE9kUKyXcfCFeEXDpIpE6vOOYRZcyftEFkvSj3eQZizaApgAlOjKYzvk/OYs6Q4ANm8FjKXMp8pzDvVVMsz8gzfuW4+slMxLDk9g0vfdyzQ+5atnwDTBLb8qQ07t0bn6WoUjWxeS0RLIA/TkiVL7H+/6U1vwr//+7/j1a9+tf27tWvXYmhoCJ/61Kfw+te/PvJBAkAymcS5556LX/7yl3jDG95g//6Xv/wlXve619XlmMTJS5CCD07WbMji/ju7cHyfNJxK85cARw6TS9GHvU8XPEz+QXGSVAdH9xwdE8cTOLY/haHTCgaOqpA3sFgaAEwDVj9/DI//ahDPbZyF5eukscg5cO9Xl2H8WAp9c7NY/YL6rv6XMn+FnKDHjqawZtFiO6Tv4S0HbdF05tAAju2T4mLeKR4eJjskL4VsOm6X03WrIsc0WVo8PZ5EZjyBrr7ibewKawPuHqbJAMZvjyYrYC1dnS8k8VseqPREHsC5OHG03XeFdnh/N7LpBIZWFX8ndkhep4dAcRR9qHYFeNeWQaTH25Boz2AktQUagPOefwp2/CyNY/u6cHhnN7pny+9HiYFuDw8TAJzz8oN48jfzMHKoA0//aRCnvyj86npQlHeppz9X5j1ce9EhjB5pw9IzR0J5UkvpdqmApwRTj1MwzSlvXusF58CffyJF6vmv24tzX3VACnvr+2PM/btcv24lpralcGIHMLtrITZuf7r49VMHPUuKO3+XSydh5LVC0QdH2JqmSUExMdKOydG2shLY+VwMe5/ux9DK42VeFTcKHiZ/bwLTgAsu24ZkysAjv1gBPRdHsl3HirMLi6bK61MpBNUuKb7IWygPLBq3+zuF9TCpHKYlq4exZ9sAdm8dxKpzihd3dz4pRczS04ftCoRheeWVT1T1viAk2zj6BrMYPdKOkV3yPMxZmCnbpq3TQHYqjokTSaQ6/MuheyEE8Oj3l+HQjhQ6+wy87Z8OIx5Q+8xamMeGV6Xx4L2duPvmXnz0/wsmtADZmP7cRbRwTlRH6Ky5J598EsuWLSv7/bJly/DUU+GSGMPy4Q9/GH/913+N9evXY8OGDfiv//ov7N27F+9///vrelzi5OPw3jjyWVnwYd7iykbAaedKA800pFVTmr8EFDxMmckYchmGVLvydGgY3mflS52WxdMB7cn+RTlXwTRse5gKk9nK541KwfRYLy7h0gj6093zsXtzL+JJjtf+7U6kOkJmp9dIqoOjf1EGx/Z14OCzXVj5vFEAhfLjAPCLn2XBTQ2JziyeGz2Ic/rLw/aU9yczkcDUaNLat+GZd9bRIwWTLC1ebBgpD1NZSJ5LKWkvjlgFDpwhhEo4GXkNj/8AMPNJPLR5DIm2ciP23JWD+N+bn4fMVAJ//Y9/KDLeculgHibTiCGXiaMtgAELoMgLtvUXZwEA1l54HM9fv9z+/bxTJnFsXxeO7OrCyvXHkUvH7AIZXiF5gOyVtf7VB/DAD5fi4XuGsOq8YcQTETSzcWHkcLmH0OmxnPPiYUwA2LSj+mMYuRiAdcil48hlZDESJYp6BwrnwRbZAQTTcxvnYORwB1IdBs66+FCo/JbOPks0jCXxQkcIlgrdO3RIPpPcBFOqQ7dzrYYP9ICbGpjG7TA8RVdfFhMj7a6hnn/88Wl48o+L0d6Vw/mXPoszNuzzFaTHDhZC8irBGLDhL55FImXiTz9dhbNevAcJR25h0Bym4QPuJcWdFAkmjxwmt2NlphJ27tNZL9ktBdNTA+DWc1bhzF9qVfqHpjB6pN3uvVbqYQKklyk7FcfkiYRvRVQ/nn6oG7v/NADGBN72ySPoGwjnen7de8bx8M87sPWhNmx/LIlTz6m8qDmvpw2Hx6sbL1BoXrt8dmMbcROtQ2jBtHr1anzuc5/DN7/5TbS1yckpl8vhc5/7HFavXh35AJ1cfvnlOH78OD7zmc/g0KFDWLNmDf7v//6vyANGEFGw1wrHW3Kaf8EHRVuHwMqzcnj6UXlPuAmmtk6BVAdHLq1h7Fgcg0PS6FXheLPn6+js5UBAwTQwlMOuJ7qKKuVxs5DXpDxMALDotAm0dRrIjCdwYHsX8pkY/vQjKUxe/q49GFxSnizeCBaunMKxfR048GynLZic9Jny3l66OgPGUBaut275HLR1GognTRj5GI7tl5OZm3dJ0e5T+GHUDskrjd1XYX/+xq8QBcE01yXnKp7k6OzLYWo0hWVzT3f1mj3wu4P2ivkDv09i3prd9mu79y+W48y5543FkxzJdh35TALp8ZQtmCpV9QOkqBs9msKD+xYATGDNBcWG3bxlk9jyO+DwTvn5VM5YW6eOZJu/2F570WFs+tV8TJxI4cnfzsO6Sw5VHE81KA+T3jZSdK04RXgUbLJW2R95Io14ygA3pNB47sRBnDNHinrldavkYRIc+PNPZW7t2ZccRKojnPGoBNPkaLEhr0T6M//bBwA4MH4E6ZJCJYxJr+TkSLvdELW7L1uWp6TC+UoLPwgB7LTycjKTKfzmjjV48g+L8eLLtpV5RwEgm47b+VKzK3iYij7LJTtx5ov2ItlWvAAQJIdpajyJzEQKjAlfkaa8T20debS7PD+8BJMq+NA1K4OhU48j2a4jO5XEkT19mL9sFAAwcrQDI0e6oMU4lqwO7hFpNAOLpvDcRhlOyJhwrXraNTuPY/vbAy0eefHcRimaV1x0GCvWhZ97BheZuOD1U/jNXV2466u9+Ph/DzekoAxxchNaMH3ta1/Da17zGgwNDeGss+RK5BNPPAHGGH76059GPsBSrr76alx99dV1Pw5xcrNnmzRylp4WPNZ4zYaCYHILyQNkWN7RvUmMDTsE03b5nsWrw61+zXEp/DByWIbWxJPcbm77vNPm4pGnj+CUdWN46oE5eOzng3YZ8bMvOYrTX9TYUDwnC1ZN4olfD+DgM+5VAQ89K42R+Sun8PwSo9cZupfozMDId+GpJ60eRd3enpWObvfS4pnJuO3B6S0NybOM3+xUAnpOQyLlLhDGj6WQnUxAi3H0D5WvUqt9T42mMDbc5iqYFvadgcesf8fSK7F+XcF4Hdk0gEMA4m05TxGU6BxHPjMHP/3uKTj1lb9FLCEN8CAJ4Ft/L8s4Lz59tMhbAgBzT5HG5tE9XVbDYmkw+XmXFPEkx3mv2Ydff2cFHrl3Ec548ZGKIisM6jrYs1N6xE4/M46zIhZJTrrn5JGdimPprEWIJzn+DKB3II/z1y7Aw1tkztZIngFYgeHD/tPss4/OwYmDHUi2Gzj74vBCsrNX3udTo+4G7NSY/P3Z5w5gYEjeT0WFIxKTwP/f3pvHS1KV9/+fc05VL3efmTv7xgADDIusiiAqqDFoXIhxIUrUGElINEr8fhXQb4QsytfEGBOIRBNFvxqNSjDG5KeRBAXBKMuAIrIMzMBszD5z99tL1fn9cepUV1dXVVd1V3dX3/u8fY3M3NtdfbrW8znP83weeATT0sYJbJhT3rEDg5iZKEAYFi54zZO4//sn4NDeEXzr5vNx/PP24WVvebSun9ERJx1veMkc8sV40U9N0Ot1XdHcdLgJga5fGlsxUxed8rPh5ENYunoKx205GPj7UMHkpOONLZ+BEBIbTzmEbQ+txjOPLncFk44urdt8OPH37ibjG2rR7LGVpcBIcBpOee6i3gnTcPNOE/La35nEPf8+iG0P5/GL/8njjAvj1f8SRKskFkwveMELsGPHDnzlK1/B448/Dikl3vKWt+Ctb30rBgcpVEkkp2xJ5ES2lod2OvVLG7c0N3zQnPbCedx2s7aTDn7f6PKaYHI/y+OQl4TlAb2YtOHD8g2lBjeozecdwy/vWYZtD6gGtqtPnMYlV+xO9Jlps2azEhX7dww0OPhJCex9ash5XaOw8EYNnlltY9dRZYkLAGU2606i/e57YdbiOh1vcKzUIIjyAxbMQhWVeQPTR3NYsir4WOno0vi62dC0s9HlJezdVqt78XN4T80QYs8TI3UTQW1UceLmUZweIoBWFvbhOzeN4djOddh55+vwuvc9FitqMT8j8MhdamKnm716WbpqDrliFeU5A4f3DNTql5bFW1Q49UUHsPU/1+LY/iIe+v4anP+69s69oAjSI19Q19/S1a2n3sRhZLyMgzsHMHko56bPja0s1Y3lyLI8fvHPQGVqAFufOtwwmT/7hGUquvQdJ7r0iucSR5eAWoRp5ljjBNaqMndhYHC0dk/yiufn7hWYPgA8u02JmbJxFA88caDOOCBMMO16Ul1bqzcdwzkvewZbzt+Dn373RDxyzwZs//kqzM/k8Ib33udGrJKk48VBixjb4ijPNTrTATWr9CAjBy/5gSquuO6epp8VFmFa4qTOHnfaAWx7aDV2PLoCF7xG1S7q+qVW3PG6yXLPIk9QOh7gccprMcIkJXDQeWaNrJ4D0JoBzpIVNl72xmn85z8N4/ZbRnH6BQcoykR0lJY6fw0MDOB3f/d30x4LkSGG8gLTpQ5bWgEYH85lzjHGsoBdT6qHwaYYhg+ajSdXcN4bDmLFMobiUPBKpt8pT0pglxPN2nBKshUy7ZQ3cTCH8jxDriBxcKcT4drQ+LA77nkTMHI2qmWO4kgFr3vf9sS9QNJmbGUJxZEK5iZN7H9mAGtPqj2wJw/lMHPMBBeyaX8o3YG+dNgRg6sNd+KqV/w1R6tjANY0CCY3HS+gOa76jDKO7DUwdTgfKpgORKTjaXR9lBZofryCaXYyhyPPFbFsjVr1L+keU4Phq9Trt0zgsj/6Jb5z0xY899QI/uUvT8frr/5l3YQ5iIf/aw3KcwaWrZ3B8Wc2unAxrr7XrsfGsG/HcE0wLYl33nIBvPCynfjeZ0/G1v9cizMu2YeBiEhgEP6UTK9orlYYJg6oMYUdn7TQzTynDufcSdroivr9oIVkpSRw5qb1KA7V7qc6Onrw8dU4sncAIl/BWa+oP0/jogVTadZEtcLqhLo+x7mwUQzoSwYAg47VfnlanbvHn6Tufd4I5qHZIoAtoYJp/UnquBQHK7j4jY/htBfuxm1/80LsfXop/uc/NuNFr3sSQM0hr5nhQ1wM04aZr6JSMjA7nQsUTNNHnd5qY+2dE970P+8ihrYUH3UE2cYthwAmcWjPCKaOFiAMG8/tUPelTadnWzANjpVRGKpgftpsMHzQDAc0r03C5GED5TkBxm289EWtiSXNq985hbu+NYhnHsth6w8LOPeSxmPcaWdOYvHQklfQl7/8ZVx00UVYs2YNnn1WNTj767/+a3z7299OdXAE0Qv27nAMHwZsrIxh+KBhDHjRFQdw8eXHQl/jd8o7dsDA9DEDXEisOTGZYBoYsTAworZ3eI+aKB58trF+SfP4/mM44+JDyBUsvPa92zG8LH70rFMwBqw9SU2e9m6rT8vb66Tjrdg4CzMXLez05HTeicAUPRPx809fU/fnlM3qIb1/X72Vua5/8Rs+uJ+hbaKPhtek7N/hGD5sihBMTrqfbnbq5/BeNT6dSrf78VH3d/MxBBMArNk8hd/44C8wMFLGoV2DuO3/nh76eQBQmhV4+L9WAwCe/5rdoU1dVzrfa//2IY+lePzzdvO5h7F8wzQqJYH//NxJKM3Faz7ptZv3HksvEwfykJIhV7BiN1FuFX2+TR7K4Zgj0sZW1C+umDnpRjMnD9VPLs8/fQ1ecOoaHH7wVADA8199EI/tO1B3PvrFYRj5Acs9V/xpebNOOl5xpBJ6TAd8QnpkvFRnXX7e2Ztx5jlKGB0+ZOKBJw7ggScO4P7HDmL3NtVwdN1J9WNdvm4Kr3jrIwCAB//rBLfhrOuQF6OPUFy0HfhciFPelCPy/O5+SdERJqsqUCnVzlttKb7EMYoYGC5j1cZjAIBnf7lc9V6SDMvXTbQ9hrg88MSBRD2YNIypZtMAQhep9OLU9JHagtMjO+P34jvkLOoNr5yHaGnJvsbIEhu/8pvqnvStW0ZhW8DEYY777ijiy58Yw/WXr8KXblRidd/kfFsOeVPzVTJ8WOQkFky33HILPvCBD+BVr3oVjh496jaqXbJkCT796U+nPT6CSMTUfPsTpad/qe7iG0+utGU/HIQbYXIEk07HW31CCWY+ebRHR5l0isMBHWHaWP9gfv4pKtXq5e/Yhfd89mFsOC2dFd400Gl5e5+sfxhpARWUjufH3wcoqAeTxu3btHcZxstb3In3ju1qyXjWOBI4YdW1OtMhK6u2rep7gCYRJlcwNUaYbAs4+pwSbiefr4rDdz/hFUyOS14TwQQA4+tn8cZrH8HI+DwmDhZx2yfCRdPP/ns1ynMGlq6ZxeaIpq6rnDqmugjTsviCiXHg4rdth5m3sOuxMfzLJ07HdEAqGaAibbf/4wrc+9NaqluUecOR55zo0up4zZ/bQUeYJg/XBJM/wlT3ukON58xTD47h4M4B5AoWzr30QIOwBxBLQDFWS7fzC6aZicZ0PD8DI/XXjrd/lWbQuWYqs4M490wlojYuOxOl2RxErozd89tcIaXZfPY+nPmSZwAAd3z5eZg6UvBEmNITTM2c8qaPquup3QiTmbdgOMJUf5aUwISuYfI46206TdVB7Xh0edfT8eIYvESx/EUP4uTXPYiTXnAs8Pc1A5z6/a2fMc3Qz6rR1ekYDV16xRQGhm3s2W7iQ69fhat/dQ1uuW4Z7vzmEJ7bYeKJB9vvHUYQQAuC6aabbsI//MM/4CMf+QgMo7Y8cN555+GRRx5JdXAEkYS0Vn+e/qXTf2lL+qmC/pQ87ZDnTcc7d/MybNsfT9CMr68ZP1TLDEeeUw+xoAgToFYC213VS5u1jiDas20I0qMZ9z6ljqcWVFHoVU9NMSLVa/2pU1h3yhQqJYFv/dWJ+J9vrcILTl0DY34MAPC8M3OBE9ZpeQxAeCPSo/uKqJQEjJyFpavDUwh1BGvmWB7Vcv0teOJgAVaVw8hZ2HKhmvjseWIE0laTMzfCFCEIvYytKOGN1z6CpWtmMXMsj3+/+RSU5+s/szQn8NAdKrr0gtfsCo1EAMopDwCOPFfEEScSFta0NozVJ0zXol+7B/GNjz8Ph/cW3d/PTJj4xs1r8U83nIndPzkRT337Qpx94rqm2z36nHZf6/wq/ognwjRxQF1zY5GCqf6ckRL4n2+pfX7Orx6oS9fT+AXU+aevaRBQWkS5dUwTwREmbQwRhF9MjSxr3H+Do2WASdhVjrlpdX/c9ZgS8hu2TOP5557oRqO0cHrgiQMonvojDK04hPnZHL792fNQms0p97WVza/puLi9mEIEUy3C1P4E3S/OZibzqJQNMG5jZFlt+8edpq7dXU8uw64nlOvc8c/rvJ24FkutRJc0+ZF5vPYt4T3c9L12btpApZx8ZaK+fql9BoYlXv0OJcAP7zPAmMT6k8r4ld+cwu//xSH8n1uznQZJ9A+Jp047duzA2Wef3fDzfD6PmZn0boIE0QvOXTeCjz/iRJgSOORpztowiod3TmDtaPCkemw8OMKU1PBBoyNMh3blcWh3HtJmKA5XMbSkcUKt3fKyxspNs+DCxuyEiYmDOYytKKNSZjj4rJqQrz6x+X1lyDdpjxIUwgDedN02/ODL6/Dwf63Avbetxf5nBjw9fOqL9zWDR/J49kfA3t080N78gE7H2zgTaUVfGKy65gkTB/N1tQK6fmnZmlmsOn4aRs7C/LSJw3sGMLysBGkzdxtxGRqr4LI/+iX++c+fh8N7BnHHFzbj1Vc94Qqjn9+5CqVZE0tWzeLE86LTwAZGKxheNo+pwwXMOxPnOC55flYcN4M3XfcIvv3pU3FsfxG3/d8zsPm1D2DquTHs/smJsMrq+jDyFiYO5HHvbWuaGpQccQRTkBVy2rg1TEdybqNkv6ugep1jLe6LMO19chAHnh2Akbdw7qviX5P+c1LXQlWMaQAjeOKpCqaXHHaNTmoRpvB72YDnd1zYrvjyIgyVXjg7kcP00RwGRirY5aSKrjulPh3LP1k/5bhn8eXrh12HvMLoJB7erkxFvMYSrTIwHB5hkrJmVDGUQjpccaiMqaNF97O04cPIsrm6ZrTja6cwODrvWqgPL53FeIppiEGkIZbipIHmBywYeQvVksDMURO7SsGugmEcqhNMyQTXnonga/vSK6YwNGZheMzGSWeXMDSqjkXFkjB4tpwgypbE+HDrluxE70gcYdq0aRMefvjhhp9/97vfxamnnprGmAiiZ1SrwO5tOsKUfo2PjjDNTKjmtXu2qYdHy4LJE2Gqc8iLeEYkyTfvBkauZuqg7cX3bx+EbTEMjpXdyWkUfqe2qAgToCaAr/jtXfjVK5+BMGw89cASN3qjBZOfEafmi5eHAlOnfvEz9X625GDkxIOx8LQ8VzCtnYUwJNZsVr1hdj8x6o5PmBaMCHvkIIaWlPFrf/A4uGHj6a3LcN9/qIhNeZ7joe+r7/D81+yOlYK6ylOfxbgMnGDHYXR5CW+69hEMrz2C0qyBX3z9hXj27lNglQ2sOmEGl3/0cbzufdsBAA9+b4Vb0xbG0X21lLxOMziqGr5qsVQcrgQ2fvZGorz87AeqpueUFx5Fcbj1qnR9Dm7YqBT6eFFFM3T06dldakyTdvg1740wDS0ph4p9N5X1aA7VCsPebaoeZP2W6PvJyHgJr7pyu/vvtSdU3Em9NxrlT+mLixv1mWqchM5N52BVBMAkhkbTEUwA3D5pXktxL4zVokyASsfrZJpoGmJJ06xnGWO1KJOuY4ybjud1yLvggtZS5c7aMNrwM2EAL71sFudcPO+KJYJIm8QRpg9+8IN4z3veg/n5eUgpcd999+FrX/sabrzxRvzjP/5jJ8ZIEF3jmac4yvMchYSGD3EpDtsw8zYqJY4n7x9ApcRRGLSwfH2jONu2fxqbVwb3J9LoCNPRfTnse1qlNfnrl7zoKNMjOydwRsCDp1es2TyD554awp5tgzj1oiPu5HjN5plYE43ikAVh2rAq3Pl3vGN3xsWHMb5uDt/+9AmYPprD4Fg5tD+QW+h/uN4lS08wtn1DrZaf/QKGCQSv1uqV/9EV8zi4c6jBKU8LpqVrlYBcd/Ikdj66BLsfH8HqE53GmjG/m5/VJ0zjkiu247+/eCJ++u0NGF87i6P7i5ifMTG2cg4nPT9eQ82Vx09hm9Pccmis3FKdn3ffnPGbB3HghxfiqQeWYGS8hBe/ZQ9OeeFRNwJ26osP45c/WobvfW4j3v6xx+qs570c6WJKHuPA8LKK68o3uiJYNHprnTTzMwJP/lQVoj/vknSamA4ucQrxj5p4iWfCu/c/xwAAuaFS6PmojSnUeMOjc0NLSjjwzBCmj+awb/swqmWB4nAZy9ZGO1gCwPFnHcV5r96NB/6/ddhwqhJYYZP7Bx7aFvjzsGhUVEqeji4NDJdScQQtaoMJX4RJW4p72XTaQTz6Y9Vo+vgzOhPZ9wrMdsXSQ08fjt3geWhJGUefK+CXT1axpjHhKBSvQ9742my54xJEMxILpt/+7d9GtVrFhz70IczOzuKtb30r1q5di7/5m7/B5Zdf3okxEouArPRiKpUYTjpnHvmiTN3wAXCiC+NVHNqTwyP3KDG07uRSw2edu3kZHtzWPD1ieGkV+QELpVmBx3+iUl7C6pc0WRRNa0+axoPfXelGmJLULwF61bOMY/vVBKlZhMnL6hNn8Vt//hh+9I21WL8lPG1Gp/1VSwLzM6Ku7sSqMhx8VgnWVcfP4JSVwRMPbXE+bx4FMI6nngJwQi2FyhthAmrpTnueHMHpTgpcIcA6OS6nXXQAh3YO4md3rsb3P78ZwlDi8Pm/tjsyjdCLN8KUxPAhyhJcnrkd+58ZwPi6uQZBdMkVu/DMz0dwZG8R//Ot1XjxWxrtt+dnBOYcC+1upOQBKno04TrkhUQlA0wfHrt3KapljvF1c7HSTeMwNKZNH2oGGpOHTOzbrs6n008dwIkRjZ9FvgKrZKKSC48WDY3pCFMes5Pq+6zfMhE7cnLhG3bizJc/VyfQgkgqpA5ODwLYEpiSN+VYig+3afigcaNZjvmKthT3Gj5o1p90GMNL5iBMC2tOaLTpb4c0hRIQLxXPi9vGYTJfF13at72An35nGS55236MjDfep3Q63vCKEozW+94mpl2HPIIAWuzDdOWVV+LKK6/EoUOHYNs2VqxoPw+ZWLxkqRfTaWda+MDfHXFSq1tXTHsmSqF1TKPLlWB6/CdqMrMhIh2vWZSJMRVl2vPkgDspi4owafRDTtc09Vo4aWF0aFcRpVlec8g7Mb6b3/DSikcwJUtzGhyr4tLffTbyNWZOuj2jpg7nUByq1R4d3FWEVeUoDFVDow1ATSQUD5rY/T9AvqpsmR96+jDsKsdRZ/zPVfbiyNPzOPM4wCxUUZo1scepGWk1wqS56M3P4PDeInY/PoZKSWB0+RxOPj9+HYKq0bJhWzzSUjxoEha2gs04sOr44EhFccjCr/z2Tnz70yfgvn9fhZNecBQrN9UXjOt0vKElZeSKydIVW2XYkyoaKpiWOxPsSROVsuqR9PMfqOjc8y45mFqa1pAnwgQAR/bm8c3/exJmjuUwvKyEDac2LgR4j8WjSy0cec7EiSeJ0Mnz0JK1zmfk3FRSf/1SM5r1AosiTBj81y7HiOSQaEjpM4+pCE8a9UuA6jMFeCJMjqV4UFNcM2/hbR/+ERhQV9/UKv7vloZQAmrXadzoElAzepmfyANQ536lxHDbX6zHsf05FIcsvPJ3Gptf6z6BGzcnT0PdM1EKTMfrBmQpTgAtCKaXvexluP322zE2Nobx8XH355OTk7jssstw5513pjpAond0q3ltmpywdBBPH5nBcKF1K7iz1gzhx89OIFdsTTBp44cwdB3T/Ixa0l8f0rA2bpRJCybN8vXxV9izEm0aWlLByPISJg/m8cRPlmJ2wgQXNlY0aVjrRT/EzYLVsYa8I0vLrmBasbE2ad/3tNr/qzbFSyHUE+yJA3m80ZmoHHi2iHslR36gihe/cCkYU1GAobWHcfTplXj0J2MAgHnMupMcHZlKgjAkXnXVk/j6nz8Pk4cKqnYpZnQJAIycjWVrZ3Fw55Br+BA2yU4yCYti8/OP4eTzj+CJny7F9z53HK74s8frjvGRvd0zfNB409eCLMUBVSBvFixU5gWmDuVQmhM4uHMAwrSx5aIjqY1lcKwmmPbvKOK2T2zG3JSJpWvm8MZrtzUVkcPLyjjyXAFjK0vYEnDMfvqLvThcOQxgI/Y8Y2J6v1rQmBp8BkB7zUfb5cyzV+CX/wbIymCDiLjt79Q5MosjgfVRSU0nvC55tg1MHGq0FPeSy7f3/OyUSNK0IpYAYBKTAFajaI8CUKnCP/7WOI7tV0Jyx8+DxcXT29QzdeVx2VggJYgkJJ5V/vCHP0S53Hiyz8/P40c/+lEqgyKIhcyoL1WhmeFDsyiTrmMC1Ip2YTDZCrs/2gT0JuK0dvM0Jg/m8cB31SRmxca5pg1rveiUuSTpeEkZHi9j/zODdTUpALBvu5oghEVJ/GhjiYmDauLFOXBot0rpG18/V1cfxZ+t4K6ngflj6jPWrjHcCY5O8WuFN133CA48O4TjzghOF4pK0ylu2APsPBlzg3tbnnQl5WXv2IWdj47g4M4B3PONNXjpW/e4v9MOh92oX9KMeIxGwgQTYyot7/DuIiYP5fCEU7t08guOBlqJt4qOMJVmDXz9z09GeV5g5aYZ/MaHnnKbW0fxkst346kHx7D5vGOBvz//9DXYyQfxxHeAqefUdxhdXkJhbA4PPR1sD92KmG+F4rD67vPTJqSNOlv8IVPd2044uYhzfGLjgYe2xTaZ0MLKK5imjhZhWxzCsNpO+QsbR9oCSdPONfvIzgkURlUkc+qImkIe2ZvDj2+vLaAf3FnA9FGjzq112/5pTO5VEb8VG5MJpjB3vDhMzVfxkk1LWn5/mpBDXn8TWzD9/Oc/d//+y1/+Evv21cKtlmXhe9/7HtauXZvu6AiijwlLy9MRJgAYW1HByLLwiVOcKNO4J6K0okn9UhRe4aSd9LopnNacNIPHfrwMR5yePHEa1nrRefVxDR9awXWHOlyfgL/vaS2Y4tWkDC2tQBg2rCrH1OEcRpeXcXi3mvSPr6uffK33pVMVPBPtdkTKT3+xFxgEHt4e/Puobb/gtGnM/ubPMDgmAHRWKGkGR6t4+Tt34t9vPh73/8cq5IoWLvh19RzyNq3tFl7BFOasCNQE06HdRTz+PyoF84yUzB40+QHlnFgtc5TnBdZtmcKvf+CpQOe+IFZummtIc/Tj73W24bTJyHMkSsynKab09S4lw/yMUbdg4jZXDugVFleMeIXV1BG1P48dMXDfVrU/ciOTeHBbe71+OiWM/HgXQVoVSwBwzpmDeOjL6j4oJfC9f1wFq8Jx/FnTmJ0U2Le9iB0/H8QZL61lWkgJzBxwIvEtRJh6mY7XjwzlE6QNELGILZjOOussMMbAGMPLXvayht8Xi0XcdNNNqQ6OIPqVqLQ8r2AKS8fzExVlqhdM7U8YvUW8QX2bOiWi1voEUlzDB/f1J00DTGLVCZ3rB6ed8qacCNPEwRwevmM5Du9RYmfVCfEiTJwDo8tVGtSx/XmMLi/XIkzr6ieuKzbOIj9QRWnWaVqboAdTFO2ILcZU3Ve3OeWCo5g6sgt3fXU97r1tLbiQOP91+92mtd1MydO1aoZpuxGeIHTq3oPfW4lKSWDp6nmsOyXZYkAzlFV9CYf3FHHCOcfwmj/cnig6Gwd/r7ONp0f3FQo7v7xmE0EkFVPCkMgPVFCaNTE3ZdYJpukjurat9fPCK2YmDubxyL8AdrmIFcMn4DEAazbaXRM8rdKuUAJqYun5p6zE9DEnBfSYgV/eM4LtDw1DGDYuvfI5PPRfS7BvexHPeATTtv3TmDuWw/yMAOcykUNeO7VLM6UqeAqFglS/RAAJBNOOHTsgpcTxxx+P++67D8uXL3d/l8vlsGLFCghBipZonTSd8qbmq23VMW1eXsT2Q/MYKba+jTBGx2sRgjj9l3SUKUw0jS2vuKvLzRzykuLvr+GNPgXRjpgaXz/n1nsA8RrWell53Bz+4JafoTjYubo7HVXYt2MQ//qpE/D01lFIpxfPulOmIifOfkZXlpRgOpDHRkzh0K5aSp4XzoF1p0zj6a1jADqbctgPPP/XDsC2GH709XX40dfXgXFPSt6a7kWYlqwq4UVv3IPhZdHW6iM+kX1GimYPXi793Wewb8cgnnfJQYj0b1swcxKFoSrmp9XG/ZHPuDSLSrUiporDyhhldsrEUqjrx7aB6WNqnwdFmFpBp/9VywIHdzqGDyu7d84lJQ2hBNSLJQAYHLHADRt2leO7n1XbvfANh7B0TRmbnjeN//nWOHb8fBBSAk8dUIsDK7lKaxxfV4ERMyutnVQ8zZaVva2x05Qt6g/V78S+rW7cuBEAYNvdcSAiFhdpOuVp44deo6NM/rS8MU+EacOWeA/bqNQ8xoHjzpjBjp8PYv2p8U0SWiGqQWEzMRWH4bUTOPL0UuSHS3h29iDYzhY20oKDb1yhpyNMR58ruFGNjadP4uxXHsDxZyf77tr44dj+PMrzHBMH1XmybF1jatSGU6dcwVTooCDsF85/3X7YFsO9t63F3V9TTXi5kJF9hDqBTgmMwtt4mQsbp704PbMHL6tPnMXqEzt7/Q8vLWN+2sD4+lkMjqYv3FsVU7Y5C6CIualaquzsRA7SZuDCxsBoOs8WM2+7qbTPPaXaOIytjE5l7DZR9v1J8d7Pvfd+xoHhJVVMHFRRo7GVZVz4BpVmun7LLIRhY/JQDg89UsXwSvX8uvs27eKa7Fi0Gl2anGv//EzbHY/ql/qbxOtQN954I1auXIl3vetddT//whe+gIMHD+Kaa65JbXAEsRAZGLWwdHUFpTmGdZvjT/C0aAqKMr35up0ozYrEdtppErfbexSz51Xxo6eB40+fxwu2tL+9OCQReiet4xgYraAyz3Haiw/j7FcexLK1ra0w67qXY/vzbkrfwGgFAwHH0Lua366t+ELhgl/fB6vK8ZN/XQ1ACdBORFbaxSuYNj//WCwThqwytLSCgzuBjae1Fl1qh6iJ/y8H1D5+cnsJ00uUYJjcMwYAMAfn8bMdh1Opm2JMRZmmj+ZxdJ/jkJeBCFOaIknjjyr5GV5WwcRBJQAuvfI5mHkVQTHzEutOmcWzvxjC/sdHcPFFSnAceFa9dmVMwZSGjfhJK7IRXeo2VL/UGRI/Xj772c/iq1/9asPPTzvtNFx++eUkmBYY/WgtnhZbVg7gsf2zbaXlBUWZOAfe//e7IG0gV0wWpg8TTVwk7z2URc5/7WFUyxxn/0q6jR6jSCL07n98Py78X/cCAIRpY68F7PVEwZKkJHqtxd10vIDoEgAsXz+HwbEKZo6ZbpSLAF70xr2wLeC+76zG6oQmIZ1GTzjnS7VjOnzas21HYdMkaQrtmZccxNykgbN+JX7frm6wbp2Bw08CK4bGcf7pKm3uiZkx/AzA+CqVFdOsOWtcQaUFk6YXEaYkPc6SEhZV8jO2ooLdjwOnvHASJ55bf+2NHH8U+MUQSruXA1BR2P3PxBdM7abiTc5VsWXlACp262lwaUaXKB1vYZB4Jrhv3z6sXr264efLly/Hc889l8qgCCIN2q1jShO/Y15xqPXU1qhIU79TGLTx8rc3Gk1khWbiKsgkw4t3guqNMIXVL2kYB97wwW2YOpTDWERj3MUGY8BLLt+LLRceiXSq6xRR4kefK1ICRy4+BtsGfvXVOTDenchpHJqdrw2smMAVf5YdwacpOg1x5yZr93tdMza8rBxLTMS16K+IWQDq3mvmLQyMtN6MN4pmAq8TNv7NokpeLnrTQYyMV/DC19ePc9v+aazcIvHIv63H0w8VYVvq/rVfR5iaOORpsdTLVLxOQOl4/U/i2eT69etx7733YtOmTXU/v/fee7FmTXfsZYmFS1rGD2nWMU3OVVOJMqWJt6ZpIQqnfiWJoLIqUwCTKM8LPPkzlToSFmEClKnFyuOyVS+RFZan4A7ZjCBxFGdiyRjw+vfvafq6XtBKGm1SkdWN1gQDjhHK7GSthskVTDENH+IKkMNrBI7tUH/PL5nCw9ubNxdvlU73NgPiR5T8jK8r42W/VW+nvm2/ijS9/OUF3HOzhblpgT1P5TGytOo65C1fF3482hVLmnaNHvo5ukTpeJ0j8Szw3e9+N66++mpUKhXXXvy///u/8aEPfQj/63/9r9QHSCwe0jR+SAudlpcGYX2ZWqWZex6RPfwTkp8urWLqsImp51QB+YR5CI/snAx9fy8aCi82wqJGadToLQSSprDGTUFs59zWdWGzngjTpCfClCZFTw3auk12V0RNJ2hVKAWhhRKgnksAcMKZc3j0x0N4amsRa51a3WVrmzvktSOW0jJ6SBuKLi0MEgumD33oQzhy5Aj+4A/+AOWyuhEVCgVcc801uO6661IfIEEsBDoRZQJINPU7S1aV65rgvuSiQeQHioGvjTP5JEGVDBJHnSXufowrrMLO7yDBNHVETVJHUhZMAx5b/7FVvTd8SEqaQgmoiSUtlDQnnqsE07atAzCcnmBR9UvtmjxosZSGjXi/RpeIzpJYMDHG8IlPfAJ//Md/jMceewzFYhGbN29GPp/eyjmRLfrV+EGn5bVbx5SG+QMQbjPeLvpBRSl6/ceSVWXsfFQ9nEeWl5EfCK9tizO5iZsutZiEVZw6I6K3JBFWQUzNqMny1DGBR3ZO4IwNo3U1TGlS9NQsLe1io+R2SFskacLEEgBsPkdlZjzzSAEjS9XxCatfyopY6vfoEqXjdZaWZ4BDQ0N4/vOfn+ZYCAJAug1ss0jaqXkab7QJIOHUDyxZVZtArEih6XC7E89mZEloxU31IlG0cAg7ljOrBH4MoDJnwrYYfrZ9EjMTanqze+4wDuxsNGZo9Vz2RpiWZDTC5L820r4GooSSZvn6CkaWVTF52MAjP1LPoqAeTGnYhwPpNail6BIRRizB9IY3vAFf/OIXMTIygje84Q2Rr7399ttTGRixOMliHZOmXfMHoBZl6qRoAkDCqU/wCqblKQimuLQ6gWpVaHUCEkKEpjhsAUwCkuG0tatRKXHcIRmMnI0Lz10K5lt/a6e2ylvDNJaBCFM300qDapXCYExFmR68YwSVEgcArPIJpjTEkrYQb5e0m9QCVLu00Ig1+xsdHQVz7jijo9lZYSSIZqSdlpcGnapn8hIknAAST1mjXjBlc7XaC4kUIotwAQwMW5idNDA7YWBuWqUmDS+rNIgloL3aqlJlDozbKIyW8NSRI8CR+vd0IgrbTNx147qME1Xyc+K5c3jwjhEAAOMS4+tVpC8tN7y0LMTTTsXrRXSJ0vE6T6xZ5K233hr4d4JYTKRVywR0rp7Jj/fhRuIpe9QJpvW9X60miH5lYKSK2UkDMxMGpo+qe/TIsvZ6JIUJkeM+/gwGRiwsXd34+05EYXu5UJEkquTnxLNri4zL1lRg5mTqYilrqXgaii4tPLLR1ZPIPN00ftBpeWnWMaXZxDaN1Dyge6JJEyWeABJQvaA4ZOP4s6cwc8xIpYaJIBYrA6MWsBuYnRCYPKScJ0fGO9PEdN3J4f3QFkoUth2hpBkdt7BiQxkHduawcmM5k2Ip7VQ8ii4tXGLN+s4++2w3Ja8ZW7dubWtABJE2aTaxTTM1D+i+aNL4H4BBAkrTbSEVNo6s0u7++c0/3gkAgalDBEHEY3C0Zi1eE0ztRZgWI2kIJS9bXjiDAztzGNuknsFZE0udgKJLC5NYgumyyy5z/z4/P4/PfOYzOPXUU3HBBRcAAH7yk5/g0UcfxR/8wR90ZJAEkQZZjDIB9TVN3RZOmqgHo7Yr7xZpPKS7RZTQjMIrskgoEd0mq4sS7Sw+DIyoDIiZCQOTh52UPBJMsUhbJHl55TuPYHDDNDY9fyoVNzwgvTQ8IN1UvLIluy6WKLrUPWLN+K6//nr37+9+97vxvve9D3/2Z3/W8Jpdu3alOzpiUZOmvXiWo0xA593z2qGfBEy3aWXfJBFZlCZJNKMV8ZPVa7rVxZnNK4cwOKaiBTOelLxREkyRdFIoaQ7Mz2PzhfOpiKW0HPGAhZGKR3SXxEvk3/zmN/HAAw80/PyKK67Aeeedhy984QupDIxY3HTKXjytKFOaBhCaLIsmIj2STEziTiBJWC084gqhrIqfVmj1uzy47TCmoSbSBw4ARw+o+/JRNoFt++vrjZJeK7aUKFs2CgYH0P/hYP951anzJ616JU1ajnjAwknFo+hSd0k82ysWi7jnnnuwefPmup/fc889KBQKqQ2MyB7dNH7oBGlGmTRppuYBJJqIeuJOZpKszJO46i2LUQh1mnM3L4O5t4CtAOT0AMozKsJ04XlDKA7VIhJxo7vea8SWEhKAlP2ZPtstgeSlU2Ipzbolii4RSUk807v66qvx+7//+3jwwQfxwhe+EICqYfrCF76Aj370o6kPkFi8dMItD0g/ytQJ0QSg53VNRP/QiaiVFxJZ0SRJiyMh1BmGlqjFvP3PqPtlfsBGcciue00rCxCWBKSUEJw1xJeydl2EnYfdPOeyLJY0aVuIAxRdWgwknuVde+21OP744/E3f/M3+OpXvwoA2LJlC774xS/izW9+c+oDJIg0STvK1CnRBNRHmwASTkQ6JJ08tWps4Sdrk0s/7X5HEkK9ZXBUCSarqmTN2PLW65e8x7Ji25ASEJxB+EJM3V58iHOO9uo8TFsoAemLpU6k4vXC6IHoDS3N8N785jeTOFqk9CItL03zB02ajnmdFk0ASDgRPSOtCVi33RaTQoKnvxkaq38uja5IZ3LspuJJNJQwdXvxIavnaD+JpYWQikfRpd7Q0uzu2LFjuO2227B9+3b87//9v7F06VJs3boVK1euxNq1a9MeI7GI6YT5QydqmTopmgASTkT/k9XJHrEwKA7b4FzCtnWEKb1oAgdDGlPjhXYNdEIoAZ1JwwMWRioe0TsSz+x+/vOf4xWveAVGR0fxzDPP4N3vfjeWLl2Kb33rW3j22Wfx//7f/+vEOIlFTtajTEDnRRMQLJwAEk8EQSxuOAcGRi1MH1X33tGUBJOEijDZPQgmBAS1MkM/iaW0LcQBii4tRnjSN3zgAx/AO9/5Tmzbtq3OFe9Vr3oV7r777lQHR2STbl+wnVjB0TfPtHOa9U0+TQvUIM7aMOr+AdTDyyugCIIgFhvetLyxlFLyAICBqdy8LiIBzFUs2F3+3GboZ433+ZMWnRBLdgcrCCi6tLhIvAx+//3347Of/WzDz9euXYt9+/alMiiCCCLtKFMnUvOA7kSavHgfWtpZT0ORJ4IgFgt1gimlCBNz/q/bskVKCe5EtngGwkzeBbm0hRLQGbHEbAAs/VQ8ii4tThLP5gqFAiYnJxt+/sQTT2D58uWpDIog/HSqka0WTWmm5gHdF00av3gKijotVBGVhQjbQt23BNEPDHoEU2qmD1CiqeuCCQBnDFK2lphXtSUEY233juq0UAI6V7MEAKuG0+0PqsUSRZcWH4lncq9//evxp3/6p/jGN74BAGCMYefOnbj22mvxG7/xG6kPkMgmvWpi24laJiD9eiagXjQB6KpwAoIfbmEiyks3J/1pipxOPcyT4I/wtQKJLiIL9GoBop3zvxMRpp4hlWBqNSWvYtuQnMNsUTF1QygBnRNLCy0Vj6JLvSfxDO6Tn/wkXv3qV2PFihWYm5vDS1/6Uuzbtw8XXHABPvaxj3VijAQBoPNRpk6JJgA9iTYF0ezBF0dQpUkWRE6apPF9WhVdJLQWL524Znt1bbaz6KAF08CwhVwhvZgQbzdM0wLabKIVvWTL1qJT3RJJmk6LpRVDnYkuEYuTxLO3kZER3HPPPbjzzjuxdetW2LaNc845B694xSs6MT6CaKATUSavaMqZ6T8cex1tistCEzD9SKvHoN3oFgmu7pOW0FlI12073+WRvNqfA8vKkfs27rmu5UYvaogkWnDlct+r0vHiRKf8+6lb51KnxdKq4QKqHbA2pOjS4iXRrK1araJQKODhhx/Gy172MrzsZS/r1LiIPqAXaXk6ytRJ0TRXslPdriZr0SZiYWBLCQbW1kSnm5HFLAuzbqehLSShkwVe+hKBu/5R4pwLq5H7Ns7iwtrRvFu4JHoQYYKUYIy59VNJRiBldN1Vr0SSppM1S0D6dUsARZeIhILJMAxs3LgRltX92pWPfexj+I//+A88/PDDyOVyOHbsWNfHQGSDTqXmAUo0PXloGtxmQIcWdbzCCchutInIPlIC81UbOcFhtDGp6+aEKY06r05BAqa/2XBSBTffuRf5YvTkNm5qspQStgSOGVXMV20lnDyXWSfFv0rJY2BMQjriKcl7uaOYghYBenmed1IsdbJuCSCjh8UOkzJZhuytt96Kb37zm/jKV76CpUuXdmpcDVx//fUYGxvD7t278fnPf74lwTQ5OYnR0VFMTExgZGQk/UEuUnph/qAFUycMIEqWjccOTEFwBt7hSLgWTQAJJyI5li1RtSU4YzA7cC0QxGLGspVgWlIwcWS+DINzNz0vifBvRViVLBuDpsB81QYDICLyAv2iyHIc8iyp/nvWxt4vBHQ6quRNxdNUbQmDMywfaE/olC3ZM7FE6XidJ642SDxD+9u//Vs89dRTWLNmDTZu3IjBwXp/+61btyYfbQz+5E/+BADwxS9+sSPbJ/qLTqbmAcDyoTyOzJZhW+ioaPKn6WlIPBFxsKWaSNktWg8HYdlqNTsLvV8Iopdo4wXBndQ4KaF9upNEaVqJqlq2RF5w5XYnAd7kgvSOp1S1UTA4SpYNg7daCZUevRBLaUGpeISmJVvxJKHhXlIqlVAq1VZegvpHEe3TK4vxTqbmAermu29qvuOiCah/kPSDOQSRDWwpkeMcVorFzWVLQnCJnOj9RIsgsoCqYepuymupamOsYKJk2ZivWomvR5NzlC1ZJ/K6jXcRsB/FkoaiSwTQgmC64YYbOjCMznDjjTe6kSli4dKpKBPQXdGkoahTuthSrQxHpbT0IzqZOs25kJ5b0ZoqQajrQTBVD9SL64IxwGCsJWtxQzCwau+u5U5HlYDOiyWKLhFeYi9ZzM7O4j3veQ/Wrl2LFStW4K1vfSsOHTrU1offcMMNTlFj+J8HHnig5e1fd911mJiYcP/s2rWrrfES4fRqJUSv/HTyxqZvxrbV+aJSL1tWDrh/APUA8v4h4mHZEiXLbmnSkWXcdKEUFZO3WJwgCLhzEY7WeiK1AwdLvNCjxygYg4ghttSCUosDDEA/n7zPrk7QjcgSQNElokbsJevrr78eX/ziF/G2t70NhUIBX/va1/D7v//7+OY3v9nyh7/3ve/F5ZdfHvma4447ruXt5/N55PPZtbAl0qHT9UxA7abc7WiTxv/g8UefAIpAhSEhe5WR0lFsqcwe8oJjtpKOkpeORbkkxUQQkJDgTK0rc85QtWykVSsY+bme6LFwPi9uZp13IUVwhoodPmYpVeqfwds3jelG+p2fToqlXho9ENkk9gzr9ttvx+c//3lX4FxxxRV40YteBMuyIERrs8fx8XGMj4+39F4ie/SqlgnojmgCepOiF0QcAQWQiNJwsMS9TLKOLSXyQrgr0GmUKujJVpp6qROpgwTRDdyIKwDexRNYX4ecqftWkhuXXvTgjMVK52MMsNu4O3ZbKHUjstTrVDyKLmWT2LOpXbt24cUvfrH77xe84AUwDAN79+7F+vXrOzI4Lzt37sSRI0ewc+dOWJaFhx9+GABw4oknYmhoqOOfT2SfboomQEWbgN4KJ03QgypMRGkWi5iaKVlgAOaZBZZwUpDlfSSlstXnjLn1Fe2e9VIiNXc8KQFLattzkIkE0X/ImlDirJspeeqDGADO1YKP7ViEx3knd+qumjnr6W3aCb9YL6JJQPfS8ADquUQ0Ens2YFkWcrn6E8gwDFSr3aml+OhHP4ovfelL7r/PPvtsAMAPfvADXHzxxV0ZA9GcXkaZgHSd85pNQL3RJiAbwslL1IOsmZhaSGxeXnSbuiatB/D2yeoGcQWant/ovjAMLBU3rFoKkmwrYuXtD1U0OOardlvjIoheoW8ZadYKNkNKdU1re/8khhO2lDAFB3NqmCI/B/Ejyv7nRTeFEtA9sUSpeEQYsQWTlBLvfOc762qC5ufncdVVV9X1Yrr99tvTHaHDF7/4RerBRMRCi6ZWo0wcjlCKsWTf69qmVun2w66XlCxbpZ20sDp8yooBVG0bZpeiI3EFmnQEzVFZBmcMM+UqGNB2ywdLShjMRlVKlFhrIsdy1JzJGXKCY9ayMV+1UaqQaFosZDkymxR9TXWznUotJU9FuARjqMa8gUnAXSDSYi9s8cOWqrFr2BJnr0WSpptiqddQOl52iX1Xe8c73tHwsyuuuCLVwRALg15HmYD2RJN+MErI2ClcWUzTa5eFVPPjNp1M+I10SpkhurMv4k5IqrYyslg5mAcDsH+mBFsCRpv5dCXLxqApMFexIDhLXLdRtmzkBMdwzkDBUEsPs5UqjsxXkO+zlDwrZgoU0UgakdmsiC59BnT77PV2fjI4QznCvKEOWYukiybpujqSpSPKU/ONWQe9XFzzutJ2SyxRdIkII/Yd6dZbb+3kOIgFRpZEE4BEwqmdlfqFJJxKVRuCM5gLoH8RY607vzGm0t2y1LDblhJFIVxBzxmDJdNx8DI4B2N2y74PRUOgYNRO/G4Wy6dF1Zao2DYKhlgwiwbdpN1Jdqspw50QWfr219UIkyN69GcaPFkTKMFq94WwdN3JuSosKVHhNqq2dGs8s5J90M16payIJYouZZtsLOEQRIdoxQiCMSci0cbn+oUT0F/iSa9IthKVySqtHE9V05O9tkQS9SYKgjOUU1qfcKNULRx6r6uYxns99cuZJCGdHjbZEsqLhVYn7a1GtoKEluvu6C5K1H7e6VNCtUKofUjSRQf9+oPTJcxWqo6ZS+M2Ni8vYknBxGSpmnpPt1bpZlTJS6/FEpF9SDARHSMLUSYguWhyH1QpzPD8NU5AfwgnW0pwntw9Kau0ehjdyVGGZvt6KN70O6Hth9vAlirtyNBpPC1u0C8w1Cp3dyaaaaEnmHaKroFE52lFaEVFsywpAbus6nykxGzFiqztSyvCJVEvXnSKXZyomyUlIMuYdN5/6spBVGwbJq9PKpQS7s/d673H53o3o0qarJg8UHQp+5BgIhYFSUQTc/4vTa3Qb8JJSkC0aJSQRQRnCK1sboLu4ZQVdMNar2BKI+1Nr2pzrorMKy1eAP6RcGgRlYEZWUz0hDWq6SexMAgTWRJAxbKxfCCPnOCo2DYOzpQia/vSctW0pES1KlF2jFK0WDtt5WDkooMtJSxbYvlg3hVIR+fLgdFnG+o+ItzrvXfnei+EEpANkweifyDBRHSUrESZgGSiSdWEpH8z9T4Qspyup9yTsiYVkqOn6K2mmmi3KjsLy68OtgQMBp9gan+7qgC85swlE06g9B7yTyZdE5Xs7MJYJLFyJhYe+nrQpzMHa5qemVb9T8myMZo3MJwzASjBdGCmBBsSUVV16n5VbyceFn3WPdeEcy9JK6U3Cb1KvwOyU7cEUHSpXyDBRHScrIomINwMggOodnhFPMviya1havH9ttNtvucpWM6kR3DWch2NWzSdEaSUyBkC3m+SVoRJiWTWkgDzTzBrY0NbKX69oh/NKog0UTmk+izwZmp3A1Z3fSNW2pxOe/Vev2HNa20pkRPqPpJGSm8SeimUgGyJJaJ/IMFEdIWsiSYAkdGmuM380iJMPAG9EVCqRoYDVmu9cyq2BIOsMyboBdJRTK69bgtF/FmLNEigoS8UT8FYQTtzAa3WRNVPMGuoFKZqnygmLfxygiHAZZkIoGLZYL400X7HHzF1r7EuRUq9u5IhXtqchITBeN1rwqLrEnAdUMNEVZr0WiRpslKzpKHoUv9AgolYtESl6PEur7h58Ysn74OmG+LJlqrHjykYWKX1SXgWpsdq7MyJMPV7gmGw4QPgNVZo3dWtvuFl8m2EpeQB6HmNRBJ0bYfJORhqNWNZo2LbMBjvfRQXgA0AUsLog+MbGx0xdX+g6vviNpBtF/91bHCGZmuOMqAXW9RiineBpBPYvvH2WigB2YoqkVjqL0gwEV0jS1EmjTfaBNRS9LKyUOp/wHQj+mRL9QDVE8akismWEtx5W1bKVoTHqa2bA0r74/Tk3e94xRlzek21hxYGrcyfwlLy1HbbG1c30WlNOcGdWi5k4yT2ICVg2RLgNkyWjYbA+vrKgoBLA12/6P0+HOjaTcT/CQbnaOZc43fXA6IXU4Q/ehbwuUnJkkjSZFEsEf0HCSaiq2RRNAGN0aYsrigDzQUU0L6IsqVE3hBqkus0fA1KtAp/fy1CZ0vZ094e3kl8q6vDrY7flsB81ULREKlNIm0pYXLeIEDSShfSK86tnv+651LDdnsYsU2KTmvSDmIV244stO8FEhKCs0y4WOoFEu5YbxsZvXcmpSY+POltnEF2+PEVFqmN23vdn14nAhZTdAsB7/XeToQ6iyJJo9MOsyaWKLrUf5BgIrpOlkUToKJNSQRCLwkSUP6HF5BMRKncdl57iCYcky0l8kLAlhJVKWM/6DuFmsQnt851Jy4thkd009tmzlZJsCWQF/U1CgAco4bW64RqkzS9vda2wX0TTE1WFyCC8KY1mT1yD2uGlNruXvY8iquiSgx5wTFTsRZQWp4E932XbqRqSylDzFPi7dfGCJP6Y3tOFN1CQL82SFSFEfR8yZJA0picQzCKLBHpQYKJ6AlZFU2Aurk+d2weBSHcFeZ+IezBFRSJAsKFlMGZGy1IGrWQUKmNlgQqlc7VrVi2hCWjjSW0zS7grA4n+QDnxYK15rCnJ5Jpz2gNHvx9OWdAtbX9rSdptQL35M1mpZTgIelhfaSXVC2XI5gMziFbbeDVQWyo85IDsG3pRgriUrZsGBH9hJKOxeQMBUNgppK9fdUqunmxl26lljLGGsSa4M7xDmmm7F/08GwNgjFYnp5iqjVBzQ0zzIUvSBwB2RRIXnTKcj7PM2lEQtGl/oQEE0EEMDpowp6vwKqoFKh+Ek1BxBVSUqpoSLlio1pVEZJWevsZnINL2dHJZqxoiqytEidNrVOpiDXB1Irw0bVcaaDTC8MmAIK1/ln+/i21moZk6Zhhc5N+ijABtfEmFSLdQkoJU3BIMMxXrcQRTEtKsABB0OpYDM6RE1xNzHuchpsm/sPfjcwDfQ37d2EtChR8I/IvetS915dKKKWEYdQi1VPzFpjNYEvZkOapnx0Vy3bTVLOKt7ZzoCAy+dwmsdS/kGAiekaWo0zqkSAxUFA3t1lHV2TxBtwOfiFl2WpWvnIwj+1HZiBt1YMoqlbCG6XyTuqdTfWUWppY8tVhV0RwtFTLpdNeUhNMzvbCvkfiCJp3277+LaxJik7QyjOzGayqxFSAF7dlS3CboR+uHm4zlCsSg2a9WUiWNICEOt6CMcxVk99DVW+x9MZicCWWcoIrAdfrPNwU8EanNd3QCt4G0v7P9qfW1b0PjU1rNbalrk99/TFbCSjvtbputIjZihUasbelUzvX87t6MFos6Wc2QaQNCSaip2RVNOkHpZ4kDxQEZuct96a80ISTxpYSBaFiMicsHcSR+TLmKnZk2ps3SmU7EZ35sqXEilST6KhC4lZMKuIGe5Rgcj6nxRmvNyUvCaqvERyjifYmGbYFV4DOlWyANZ5/Fat1UaLTj6bmnWtRArCd/wQMPShiWbZsjOQNDOcaHytly8ah2bJqjJvN+RYAtR+qto3xgRx2TcypNEPJYFnpW4u3a86iBUri1EmkL/70JD1v8JYEXFbxH/NWLfuTEGQ24Xw6BOewqhYA1rBooQXwTMDzlAFYPpR37+Nly8aSgokBs3YSTpbDm47pNMAMeIw00E9CiaJL/Q0JJqLnZFE0Mc//a2rRpoUrnCTqm6LGSa3xTp4rtg2TcywfyEEC2D9TCuwN4iWsvioKLcykVCmDYcPkNkPViXokjXLoCchc2Y4UD2Ewmym5baPtyMqq4QKqtkp1WjEYXMA8W7FwdL7SUrPgsmVjwBRYUjDdn+2fKalahwTL6mGvVLbnyVP8uo2ti+E5wwlLBwEAB2ZKsBLuhzi0ct5ruM1QqdiQFhILOinVewAAbc7f9FKAPuVynDt1NtnsXZUU/zdo1347rCaoDglIhsBIrbQk4NzD/IsW3nuvn7mqhSNzFb15AI3pplH3eukcTytDzaf7SSgBJJYWAiSYiEyQNdHktWn2P0eaCSc9se3X+YJ3Yph00iNlrZcVA5DjDPNNjAhaKSCu2k59lVPwHjZOb9SjYtk4mCDKoT9j5WAeB2bLsGyZaNJctlRkTv+3XaSUkalO7U5Q/RMoNUFKZiIRtgKvNt0H1uJuOlTtexiCdcS8pNXCeQlVTzI+kENecBydr0SmUvnRdSq2lDgyW25pDO5Y3IiyjbLjSMalE/3I+P1PpxqH1eSo1EwbU3ZNuFi2dGp9WovSxTnmZctG0eRYWmgUPtPlKiZK1cBjHbUw5Y2SK/ET7KYXhi3Vva+Veta08dcpEUS3IMFEZIYsiaY4z8Ig4TRvWZBSouKsxKXlRNUNbKdo2OvC1srIve83BcdcNf0onO2446m8+mj0d6g1d40X5VC24Oq7cGiTid4dS697WxBRIj8OgROohBOksOGxNowzuokNWWvY7GByjrkMVV/5i/vzgmM2gTud95C263bmrXnU+2yyVMFUOb6A6xUVy4YlJQpG8KS7bNlYWjRR9Py+akscnC2Bs87e18O23ewzQ8WfjvBK6dRINdY66W0HXaK1eq7eKKZ+F0kUXVoYZPuORiw6snJjYW4KUXMGCsK9iec4R9EQWFo0kTc4LFuibNmwY6QySABzFSvWazuBlMqa2tt4MsmkQI/aO6nvpKWrrt9odpB01MNrlR0Lj31vO4YKaRKVNuNNe2sF/6FqpdlsmBDVRexZ2IdRBK3SZ83xTRuZ6GCjKbhjBhBz76ZoxmI7jWq928sJ4Y4zy+haoaj95j+fWZcipWHnnBZEYZ8f9j5171MpzLbT9DjIhY87oioIo8lndwKT87rUOxJLRC+hCBOROfQNppfRJt2DKAnaxtTgDMxiGDEZqgYwW62iVLVhBjykvOg88bA+G51GNZytT1dLMlfUdQt1gsmZTKX5nfQDOyc4ZpjVXDDp/zL1J8rxz/85rTrsadI2C4sSsCrClHwyp1/f0HMmwZeubSP8NZwxVO3O9eVKC79g8k4UszByKbVjmhqNyZUZQNW2Yy1wuKYPKcx8Vc1j/WfmhIpetNIfqtuEOUGGWXtzdCdSGrZpr6gJSn8Nt/Wv3fvCUvfC7h/atc8UDKyCjn9309dnrh9FkobE0sKCIkxEZunlzUY/D8JW28LQOfHjwzmMj+RhcIZh00DRELBjzFCiVvg6jQQa0mgSRZhkzepYY3AOzliq38krzHiMKIj3Kwi3j0k82nbYS3nCGC2YdE5esm2G1jQk2oj66KjdJHj2ow5A4z4WTvpVryK/fmRAn6OCSGYTnuZZGZTapRpXZ2N/BSE952vgMHUtm+/HetGl098srBZQ92LyL/qELXrUvZfX7sPBgokF7g8b6n6b49zTBypddCTJH00isURkCRJMRKbp1U1HPUxbSb2QdSlt48M5LBtWxbs5zwMh+J2IJQA6if9BylCri2mGLSVy/vcz3ZMpvW8lpZo4CMZUY9gm2/ZWpAieICUP3ghTsimm60SVNA0wbHvOBK5ZxKqVNDq1YNzY3ylZOqZ0orJNBF2PkUDTibx/H+v0pazM/4Nq2ZKkwekaqLQqUoIWBfKGyLQ41osuImQxxz2fA6M4nT+Pw2sBgUFTwJb1siWqaa3G8KQVGxGCzL8/bKkihQZvrb1CGAtRJGlILC1MKCWPyDw9MYNwUh/ipm95aUhtAlDIq4eCwbnbBBfw2ZL3cIahe/z4H6RJ7aDNgEJvUzCkefhsKVE01OcIjroO9l6C0mqSTnb0qxM3vdUChyfbf2Fou+tmaXK1CGWyyKA3xUuTZFepfR3eVFeNrfeCqWrbsGyAG41Ho9YwtHGcJmcoNXF77CZ+kWImSIOTgJuT105D3pqIb9xATmTbXlybe5icoRxw/9Dnc9DQW7nGkhJ1rxg0BeaqNqqW7d5v/XVtQSgxpI532DkiOGu4n0qpzq+6CHYLX30hpdoRixOKMBF9wVBedH3VppV6EDVp9D1NWH3qmHcVzbvCpiYyqP29i+j6KcP3UItb5By1chkVVWsVPVGInIwFpIklLeDXK8zJxY7Tz4eptfy2j2fEZN5LK+YUQSleiPFZQeOLbFCcgYmzrt+wA1ZCZN0xq8fskumHBDBfbW784h+jYAymiB/JFW70pPVvpUV8UHqXyRkMwTOblqfbH0SJSx2F89PJLIC4tYDDOfX80Mdb67fIlDwnnY6HnONAuEmPvocniWB7I0gLMYoUBkWXFi4UYSL6im5Gm5LaKqskieAVVc6YY0tdw29LLphKq5iXdmhRb6fQNt2tFjm7KS4BD1yvs1O738gVZrx5qlxQmljSSbuWekktu/V3FTydInGdhtVsE604ukkErzh70zGbbVatcEd/xd7LJYVwzCeEb0RuhCnwHOYAOn/fse14xi9B53FecKfnWXMEZ2BWe9UoYZFJTdHgmCzZmTHL8GP47OPrcHZM0HdLwzXRCokE1mqroj+jaAjMGRbmqjZyQgkhk0UvTGkrdMbCDV3837fxfhscXQtaFFvIoigMEksLGxJMRN/RLdGUdCVR97cIehZFiS/9YClbNqyKREHwWLUWaaIMHwImzSyes5yePAWtUGpzBjskkpEEvxNf1NaC0mqSptZ5LcnVNmOm1jn7SzcwbiW104uuI2hGq1GcyCLwmN+52Wf3OsKkJ6OGYKgE6IooUWq4x7+zk39LqlSxSoibYC1tsPG92mY/jsB1r8M2vpCUMjAFVxOUOpYFvCIg7BarFwCCCNu3EojV3NqypTq+jAfcD53U28gtKIZzBkpWBZYtXcOdKPSCht8G3v8aL+791hlnjnMgIDKXBXGkGjLLhiyJbkFiaeGTnbsYQSSgGyl63A0NxENCPUyDBVO8tLahAYGhAUPljfvSGTpN2IOGx3BG0hGqILRBQxr6z2v4oMcWhT+txtucMfJz9PtZ7b9JTEB0TYH+zDScpcIKtb20asoXHBUF4qYTqohos89Iz2igFfTkb8AQgUYcarIV/F7Bo3vUpEnU5a7T4ILTBnlsN7+aGG6dIPMJ/2f4U8c6QdJNexddBIfb9sBP0uaxli3VnyYDsh1RHPQyrV/jrC2YgmPQVGmPzY6FHjdzUjfDEIyhIARMzmByjhznKAjdT1BiZNBELs/rUuuyIJYA1VS46oimbkNiaXFAgonoazp5o0qaEqedioLrQYA403TOGEzOkMuz0FqnThE+QUCsmZUZ8cBOUl8RhRJmtc+JPERSv8b7eu1a1yxkVi+26lITY6BqBdTfRUoqIU6EptUoTtCh0/sqztglmjv46ePQK9t8JYgY8oKD82DbaxFyjanUykbRL6WaqKWB5UzkC1HRmIi0QZ1qFWc0KkrVvpAP21+aoiFQMAWqVmeOecW2UbbipSFqvIsu2qbbvx+01X4QYae5vjdZTc4HnQIbeD+MSAUMYjBnOJGy5uYauoeTwTjKlgz8Y0ugUODI59Wzx8xxjA6aGB/JY3w4l+kJo4SKgNUZKXWYXtRWE72DUvKIvqdTjW6TTj3VpDE43YExf6wjGM5YQ22Fv9ZJk9aDQa9qhk0Q4hb6RqVCRImppHjTe6JSxYLqanjMSJGeQOlJSNzURO+H690RdxLbjFgpeWix1irgxXqlO+53bp6S16pVfzrotFPGVL3PbMWC/5oMSxllUCv4ZatW+2RJiaotwQFYdvs9t2xbIm9w5A0BVqoGOsw1q2XjgFMr2STyyuIvhEQRJ8V2OGegXLVRjZGulpRWzOpsKVEwaqYxjDVuxxsh9tOs11El4oKxHSEW5c6XJG1ZMIbhnIGJUhWcAeUmwrRoCCwdyiEfEkq1pcSBmVLdaeE9Zt2sq02OdBo4q8WQNGrNoiChtPggwUQsGNKubWKhPknBSAkIwQJnqh4fvCaf6TVJqK8d8aY+eMVTu8JJp1O1MkEAapOAqMlQGnnl/gJkNbZop9sGi3cW34SBMX/9E4Ml41lLeydc7T649feOG2HSK+Zx6o6aHXuR4Ds3FUwxDUQ6iT4Pa4Kpnqj5vOGxx684UY2RnIAlgdmK1bDQkRQJIG9wGE5xfpAYaFbLFmWz74UjXtPnMGwdTY8hgEzOMJgTmChVIdoy1w+mle1509IMxlAOqBlrVsPkPTw6OjiUM1C2KqETdstWdV8Fg2Mm4PzTLnZ+ooSQwRiGTLVnx52ef63CAacxroR0huG9dyeu5UyBim3DluqabUZeqLTUmUoVvIN1cySWFickmIgFRZrRpqTz3KjVwbgPFw6VV6+dssLSnOrFU+3nrYgnbY4QNkFoNieypXrIRk2eDK77WrXel8VfgAx407waj5dKkaz/oU5nipM245fLggGVBDNMfS60O62I05RSowVh3JV3bVQSdt4miUI0+7jEUboUcQ0fnHPUdAwS9DkV1VNIoxt/li0bgjOM5g0UDYH5qo3ZitVWTyMtQPJcOVUagqFcbXTyA6Jr2ZqdI94amXaCPcrkhcWqqwOAQdPAXNVGxbJDax1bJWlEFVBpaRqDB/eJi0pR9n+mGx0UXPWdq9pq8Szg84sGh+DcvR/mRe1ezsGcSGbjRdKuGIqFc0xLtnSdGr3BqJQDhLFIksrNGcOQyTFftZre41uFxNLihQQTsSBJI9qk19KSECYa4s0r1JNYuCvM8WYBbafs6bqIMLEXI8JUFBEWvdANXJvbJUcO0xGQ3n2sV0TDwhZBnyVYjLSlgPqnpKl1+p3tusPpaFWzGiEguShx0xbDxHKC7xwnXSdJlC5NtDDS14fJVc8xy4mORvVg0hhMuZflBMdowXTTTPMGhyl4W25wtlQr+fr9Oc5QCnltVPPipoLJc163c17qOpy4m+AMGMkZODJXTr2ZbdKIqtdlE4i4Z4d9HljDPUeiFgEpGgKlqu2cH7WtSCnBhYBgHNKWKAgBifrFr5JlYygnMJo3m36XTqGb17qtIrwLVEgmUNOhS27bOgAARHhJREFU+aqNdJf91GLIgCkwVao2bfSdFBJLixsSTMSCpd1okxu9iJ1+IBEmG5ptq1Yzo16rV/mSEJayB0SLJz35CSPOM6fZRJFBTQLnqq1PllXtQf0Di7Hwx2lYHUKcmqyg+qeWm962+cxu1u/GT5I0OikljIhjl+Q7xzlPkkbp0iKoz1jeYJguq/0U1YNJo4VS0eB1x4IBGDA5JhKaD/jHN2h6ox7hfZ+ijknzc0S6Zh7tnJa2lCgkTLMtGBxFU2C2YgW2MEiK27MI8SOqtaiJRzAlXCjirCaO9MKWFkJlS0KAoWgISAkMFmv3q4ptQzCG5QM5dQzmyig19M1KV0y2gn4WqDQ4Vr9opGu+UvgcHTmK+32bP4driwCDpsBcxUbFtlOpnyWhRAAkmIhFQKvCiXn+vxlewdP6tmoPBFMwzLfhLJVEPMkmBbJxxGKcibUpuCOYWsdvies+bEMmTEHDiluc73+QJ33s6o9pP8IkIZo0pfQSt45FbTt6fyQZedxeTb0wfVCGD/X7UP3bcn/vNhkOgTOGQTN44lQUAlPMCm1I2mxsajy1bWtjB+9KfpxatuZ3mJrBS7vnZSsGDgUjuHasFbTFOlh8a3FbygbDA/9+MDlXC18ypHbI+bBCnsNwXNm8QghS4tB8BWXfvc6SEoOmcAVIjnPMo/F+2Fu5BCcNVH1H/0JYLR2x/RCTfg55UxLD0A6VYR/p709mcI7BnMCx+faNkUgsERoSTMSiIWmanhu9iP1sCE9zCcp796JrSfTvkkyQm9FMPMWJMNUnoHjG7fw3XvF3zfoi6aNWf05QN3uV5hU8Ywo6HrFqHQLShpJOMPX0O6lzXeNYkjmwJY2EtRexqB2bOB/brpNcO/jFds7pW2Q5vVvybYxNcOaKgaTmD7YjsrxRF7fZM6S7PW113dbx8qTktRvIaMXMxNsrqu1IiqfurBIzoloQHDku6oWQBApCuNF9QCKXZxgrmCiGCGR7puTec2yfEAJjKAqB+arlRkVs579ecSCcAkF/5CQ6ubnzqK+hxuavUdOpnOk1VY/+rm6qXZOolkRjXd6gITAnWhfnJJQIPySYiEVFkmhTEsniX+Hyo2tLmqFfEuaU1y5B4omD1RVBN4yJ1SZs/jSVOJM4jSmYO1lKOtnyNpv0w1l4TVLQp8SZkASl88WdT3tX8YHa5LSdY5lkNT/pRDQyuhhnU03O/brtxR5VemhDBf8+FJw59s5qFTqugUEYA6bAXMVKXKdnSYkBQ9QdN86YY1Ftu8dHL6pEbbtJwLUu1bTVczHJIokf1SyWoWrbqdT2GZzB4EDZQow+dRKWDSwZrBdCli1hzZbceh0JibIVPT7OGKpSOhN6VhcdBJR9vWA14x7LsVT3i+KgyEmPM/I8kdaw+y1ru/dY0v5fesEp7JR10zO91xBnGDINlFowQiKxRARBgolYlMQRTrWJbnP0Clczl7ywbdVWyNTrDNbcKa9dtHgqWTaYVZ9+4n2wR/XPaeay5kU4gqdiBTtIRRFk+OAdX9iODapDiDtR839UrQ4teuKvG7Pq13NnxbadKQZHsHNWEAyq+WmzpqJSSghnoh66bam3pabYGm9apzJMiJ+S122kVJOnoEWBvMFRcgRTs/3VjJxQpg0Vy05saRxkmWyK+l49WuxET+SbRzPrz8vo87lqN9qH6+hrq3b5BcEwlXDhP0gMcUiYQp11eh3IuyDkR0cSG4Qzq9UiwbnPeaP9QegSM8uWEAwNNVkmVwYjZedeZzui2Hs/UvbxgA21OFeLpvRWMWkTmKBFBiBZym8Y+rkhEb2Q5BVCdoRi0nbs/rNkwOQoJlj6JKFEREGCiVjURKXp6YdGHPQkIsqaO2qVTP/YTclzaxi6YUckMTaYq1t1PTRVrv3WWaEPmlnZkDA5jz3EvODuin4SbClD02Oi6mICI0wxJpV6u628T4nf2rmgi+z1/mu+El6/NQ6OscHw9CA/81ULh+ecJq0RZ3DJslQjy4IZ+oUqlg1rVropYhqvlb2UaqpnOVbEXvwTyV7MBZV1c/A56q1rajdbkEFFmY4lOL91/54gq23TZ/wgpYRoaq7S6ODmRcqaMU2clGMd2S1btnud69e3ml5pivrvFed6CBJCJcvCSM4EY8BEqdK0FibIIQ8A4Ii/sk4z02mLEdvSkShLMgyYolHEMoaiwVGyLE8UqrEeSEXbvAcgOoLYDXRrAnW8AwSTe361ju7d12wNSC8kxvlE7n2Aalj8OCqJJaIZJJiIRU9YtEnfaOOIFhuAGZF3p9bnmfvwbEBHJfTrmbI9bkVcJKFmVlE/prqeH1KqPjO+11VsG1ImSxfz15HEwXZWGYtGuGAKI+hXNaen6BQ5/294k8kooCYZwjmWVUvCcl6WF7xu/0WthHuxIVG1khkJxEs5VN+haIjIc1uf0v7Jinf8VSfaND6Ya5hgeYW3+mCGghBQc0fWdtPlOAQZPmhMrlOnkqeJBlEwuHIpjGn+YNsSOYMHXkP6Z/psk2h+rXnrDYOQcKIjaC6uNEM5ZZM9b9kwnH2V4/EqbYIil9w573TkIO610Ahzr+U42FJFt4JEgLcXkztJj7WYIkMbquaEatVcsXQUyvc6xpDjHGWrqrakoynxvk7H4FDfL+xenUaUWN8LmZSxzBwEZ6hWwyWTykBobVwklIi4kGAiCAe/cNIPdJ1iFYUSDhEvcB7sYanfEuqG732Ym4Kh1IZTns7FNzgPfZjEqYsAYxgoClRt6a4G1+qf4KSeqHE2sws2PYX2cR9wlm3DEDx00hs19qBpnZpUNk+R80+sqrassxMOYqAgULVtMKZcs9yZwCxQtm3kEqZ96clEklXnOJGDqlNT4XcM86NXmyPHGPE6f7NNb8RqvmSHRhfSFlJhQkNFd9RkOY2JoGDK/GEmpvmDhDIiCEKlbNWLuWbXTDPXSO9rvCl5YWNjUGJ/yDQwXa5iumKhKiUGnes8TppoQ8NVKcHmKii30cRWOslc3sPabAFEQoa2P9AGDF6iJCGD7p3FkAs5t0yuokqzFQvDOREooA3P+R9kXNATnHPYX5elScOUwpbqWWHL6GomnWpncIb5iFfq52cSSCgRSSHBRBA+vMJJGQrEeVdzAaALhcPwT9CjjBjijUhNmqPESZzVVMCT4+9Qq39SblIDpsChqXLkBConWF3Rd9wHnA1gwAh/TAetGEv3d8HfBayWHhlcH6HCKt7vs3w4B3u2rHoXRQgf9fCu//BW8/7dFdYEk4FmvVJUKpFy9momEuJGWQPTYYK254lYRUUWvCl/XpIKqZrhQ/jxyhsCVbuaSoQJAIqmwFzVQsVSQj9oqxJA1TEWCBMNgjs1Lh7xE2eMnKsIV+jv3ZS8+lTRhjE6fc9sCVRsibwhYHBV82UwVffWIIbiwBjyQqWrtYc3TTR6v+hpeZixh3e/6hTkOBEmkwdHB9WQlPAoWTbyIdFxr7lPLS2714oJGIlonFvT5O0YEqkoZcWyY9xb9HGO+iwZu0ktCSWiVUgwEUQIQ3mBQ7MMcR19mk0+o8wJdHNSL7rQvtUHk7ajjjI0qrn7RW8/qNmr3i96shE1efKKqaLgKIPFSlmatyxn1T78IceBBpMDVe8hYNtAOWCnF4SoE5LeybuKzEksKZoNnxtHQEvZuArLW8z7l44QT3L0m/VKsZ3xRe1TTRwbYXXuxhuhjkQ12xNhYiqpkHINHyLOtYLBwZmRWn1VXnCMFUxMlqpOhLfeIMGSEpYtYXKG4bwRGWXREQo9WYyznznCXSOB2imho0f+VFuNLSUKeY7xwVz97/W50MYOU5Ge8HubJWXkwoR2IhS8dg9rntoVfh7o76eFS7PIqr5nFgweuR/yTmQ8LPJu8Jq5j96v6TWU6Axp9JUD9IJA83uLYPp+GnXXaDR88ENCiWgXEkwEEUFZWjhWqmBFsdDkleE9mDRR5gTqIV3/MxEjtSoKXbBty/BV+TB3IT/cXYr2br82aWmGV0zNVSwcmS+7Of5RWLM2TIPDluHpPxIMuTyv2552xFo6YAZOuo7MlzFfiUoJCp7I+SNtwe+s1Yl439dKdYKUUI6CCU4AxhiKpsBUuQoR8D0sW6pJXMwV2WaR0aBzN3RbcNIhWzypkwopDgnGZNMC/rD6uFYpGgI5wTFVrmK2bMGCSkPUrnNDOYHhnNH0nmHqCIQbaWz+2TqaGRY59Tou+lNtvejU0obfpKAsVe2YKvo3fJuTkKjYtooMhrzfu9Cjo+RRV6U2GQgTTOpey1wt2CxiqtPEmhlWmIJjWdEMPc7etEs1jmTXei/gnn3V+lDVIkKce4t6XYwtBgyGRBKRJiSYCCICHVmZdQpzB0TjJVPLp48RYYqQTP73G25KTmtNHu2AyUjjp8Z7SAd9vk5dSZrKZHLmrqpGTQBtSOTyysUtyiGuVLVxaK4c+LswQWaw8MihXo0O+lpBkbaALTQ67DV9T9iWGm2Q4zCcM1CxbJScOpGarb2EDWVxHHe20zydMMH5yRg4B6opez2ECamSZYFZvGmqaCcQjGEsb6IoBCbLVbdmZyRvhBoF+NHH3obqgabTjqK+j8F4qM12ybIx6qTQAsDhuXLoAkAzI5t2EJzBFBylqt1wE6jaqmGqJRubump05JUDkE0iqvq75EJc34D6NFZ9/UdhcGW3H+fcibw2mOoFNleVdW0lsow3rbYVvAttse4tHofOoPOhZlxU+xkJJaIT9IVgeuaZZ/Bnf/ZnuPPOO7Fv3z6sWbMGV1xxBT7ykY8gl2shh5ogYmLy+ohCkHCq9SKK3hZrEmXwPywZYxCct1UAzyIeNIBO24uxnQD/Jhvh1rNR6BSlZsYPOm2p0NSYoDESV6sHCHtP8zEHvSJeal1jtLGduoRWams4YxjJmzg8V3YiCE7kzZmMNjN7aPz8JukwCcYYJ0qXBroqxN+o1E+Dk19M4gqtvMGxTJiqlkUId2IXq6+W4yoIqKil5TgvRqW/TpWrmCxVG0SZXtjxjjoy6h3z3tAqecExX62fLUtI2LbEYM7AXNUKXVTxRl51pKlZalfUwkNdLyY0j5gKzjBaCK/zSYIpOOaqFiB7bykeh7hptWF4+3jFurdAG9lER7VyBiOhRHSUvhBMjz/+OGzbxmc/+1mceOKJ+MUvfoErr7wSMzMz+OQnP9nr4RELmLA6G69wiutu1GzuEfT2HI/fsNSLnhzlBEPZinrQxHOrC3qJlLWUoUQ4E/bpcjX0JdqYYMg0moqNwBVPn027nyinp9rxDErJixyKZ/vB70tej5ZMjHjJCY6RnIljpYorTpXZg5HIpryZ0PdPwpsRL0rXPnolu9k52pJxAZILLcG46rmT4HOllJCzZZQtG0VDYHyg+XuauZh5zyfRJOodZpKQBiqdrb6OqWpLGIJjOGegFGEI4I+8Csbq9m0jTSK1rNaLKaymq1PofSxj3ot7jRIwrafV2hLIc+bWRzZD97QLimrNWlVUbYlS1cJ63ixtniDaoy8E06WXXopLL73U/ffxxx+PJ554ArfccgsJJqKjNLuhz1pV5BiPZZxQ63kS8vuAiY7Bm01Wg9FyQUWArMgJaqxC8sBIVWvpYkCtviJMQKiV5ebRJcDpj+T7mU41DBNbtUhUUIpHeHQqnqWubPjclkw7YqZ6RjFocpRtgZlyFcwptI9j9uAlzndOYjUcnZqaHjqVtdUGq81oVWglgTm1MvPV+L24wk4XdV7Xp5omjXqniSmcOibH4l4vkgznlKA3ne8dhldcCM6apHY1n5zXejG1d80lxeCqwbTVYup113EETDz32EYkJAwnbBi9cFVb9PJGtfRipabT1zlBaPpCMAUxMTGBpUuXRr6mVCqhVCq5/56cnOz0sIgFhrpRR9+Ij5UryAsGxqJXuJrIqXALbCSPTGjXvZzgDb1cGj4jxnYbBYlOXWlVMLHIFAvLlsgbPFYEyxU/vo1FDU1EfX5EdKrZ1/U+5L0EpQ02I1aPrGYwhhFPPVNecOQT1uzEGW+S06Bbk8JmorlfyDm9y+IuToRGM7W5nfe13l8Ebqtz+05bqs9VbRiAaz4x4Ah6k3PMISwdmfkiZeGLUXEXHrwT7m7OvbV9vNWWiUJ3EYyh0nJaLXOjalELVxrOGIbzAtsnqsq50bfgI6Wq/+pkNJQggOw7WAby9NNP46abbsJVV10V+bobb7wRo6Oj7p/169d3aYTEQoEHpAH4saVETggM5UVkDrW3nshLUG2BRq0+1px846IFkmBOClTA+93JfYznjHfCX4O1nEKi+zEF1R1I53/FmMYEOrXDu6Uga28vaiIdfGxdW+HAlLzgYxj2utoYkxdK69TAdtN0BGcYzZswuXLPSyogor5z7RxKEGFqIdrWEjIDTUBTQDg1f3H3W9jEMyh1OPy1MuK36aHqrNT1bktgyBSusYVuJht2v/ReY1HHOW6NqXBjGJ3/3l6UGHYaYnf1k1un1bRa/0JbmIidtaqYqlQxWS6jkFP3YjOkRYbORlgI1zqRbXoqmG644QbVPC/izwMPPFD3nr179+LSSy/Fm970Jrz73e+O3P51112HiYkJ98+uXbs6+XWIBUjzolQnJ9tTHR0mnJjn/4MIenjUmlcmezzpLvRwVqajEgHj5ZHXT/iTWIoHb081rwz6XlVbQnCOQoKNBxWvR0aYHCEStl+jUvm89sN+whz2WimU1i6EaUwE8gbHkkIOgxHmB2HEiT8mGWK3FoK7XYvSKfTiQuz6ucDFDQVD/bndbPd0uqbG5CqhtmxJV9BrdKqa/3sECaCo1EIb+l4V/V24m/7cmFLbaXKCRZrUZI24TWL9aDt4HS3VFuXTlSpmrdof9Vp1HHTkyAx5XtiQMEVy8yGCSEpPU/Le+9734vLLL498zXHHHef+fe/evbjkkktwwQUX4HOf+1zT7efzeeTz+XaHSSxi3NV1Gf0QNQMm91o0TavE+NC0rCgba3/aSnykOyYjpGNurZdJ8635J/ytWop7yXGOGdTSMSQkqrZaaR7xrDTHwf8Vm06WHSFZDUjED2oi7P2cWBG5sH8nyMmTcCaNKU0EkjjjeYlKJ0xyDmmaOTemh1wQq87aVTJuSl5YNFM7wLG61wYfC30NdHr/mUKJwYplY9Cs71dkhESBg0xZIm2nZc2CPArd986WrVSNtofBuEoT7pNJf+ttEtQ5NZQXMAXHfBWYnKiovly+vV5blFM/z4UIppbNhwgiIT0VTOPj4xgfH4/12j179uCSSy7Bueeei1tvvRW8ScM4gkgDt0kfoh6iMvKGrYXTsTk7Mi0rbAt5ITBXtWJPMN1O6nVpD43vi3KD8+Of8LdqKe7FEJ4VZCZRtmwIxrGkYGAg4eS+McLUfLKsC8396Id64OeAua8JQu/Thv3C1MQw2snLty3Z+RX+OIQ5VAHe75twexH1a+nRPxPQKDhjWFY0Y3+XsGim9PzOfS2AsHuD3lYnYYw50RWOoll/zXMGt9mv9zoIiry6oh4B9ZZS3WuanWy6F5M/CtcNhNNrqF9mNUn2j9ekYa5iISdq4t/tNRjwPt1UXR97M8QAyZYycMGSINKmL0wf9u7di4svvhgbNmzAJz/5SRw8eND93apVq3o4MmKh4zY0DFFMetU2zurvQE4AswHbQGNtgRfTIyziPKd0xKqW9qCmEo2ryAlSvpw6IV1zlMaqnslrIsKGRF5wjOZN5Fp4+DX2R2o+WTZY2OeEF4jrCVWo3XFExIUjWf+hVpvWpg2LkU6Y1CWvO/PRZHbnWSZZjZhDwDmq5py1n9XOZ3/UW4K3azgSk0HTgDQCxBlTLp9lq97+Lmixxj2nAu7Tca8jLbq6XcME1KKI/bIOHBXR87vYealKiRGj1ipCMN3EPCDVTjqpikyLq7CdwyjCRHSFvhBM3//+9/HUU0/hqaeewrp16+p+140GiMTiRbiTxWDFpEuE4zyQBWOYqlTAwLAkX29JHLWqaXK1/bi2s36zABGyop/URYwzb4Sk/cm8Xl2etW0MmQZGckbLufGNb5NNV2v1ZwU99MMFU71wbPxU2bCK7/28aOvjRjIRYYI+fxon4Fp0Jxmm3jvduHP3SxF9qoScoyrNjvlfGpr2JnTH0A4TtUASlE6smtDWvy468hvPnEZZuHPYlt31VE7Bk0URe43ePzPVaqIopJTAgKdOTZs5zAWkRttSIucRSUbDoliNcDFFEOnRF2fZO9/5TtXAL+APQXQS7ZYWdqqpHhC1vkLR29KpY7KhuBUIT8ljTDV6jWv84HXIq32HoJqGZBNyweH4U9U7HbXDgGFgSSGHsXzrYgnQk3AW8LNwvEKycXvhBBlM1P8egRPN6CahwWRiAuWsfIen5CVbka/VRHX6/s2iD+QChgfcs4JSTcMEZVbSQXUfuvrUWdkQHQ47p5L2MlM1g70xX8jEtR6CNjLSfwomx2S5nNiMCJANAjnUzEHWZ27oWqag+0YWzlVi4dMXESaC6BWcR1uL21LdyONEW7xNKDWzVhVzFQtj+Vzk3C7XpNGrf0x5o/bUF45Q8/diUqvISVKpvDkvrVuKe2nViMBP41CaT5bd/PmAyF2kJTlHaKQoaBXf3WaSlVhfHVqvURPw4KsgTCCG0SxKlwZRVv2LgbBzNDDChMYUU4n4jXI7iRvhrxtegLNnZI1g/HuV4HrppfffvVdEtcbQGFyn0sXfru1Eo/2CKcd5yHbqxZX3M/VioLonZeNcJRY+JJgIIoLaAzv4yaAn23HT0wRrNBqQAOatKoYKA66jnh9TND4swpH1ES+ncNZqeCqFN7MNQptHtGsp3gn07q/t2+aTZRY6yYoWW431UjWi3PmComBhpNK0NkVynGMejedmlECMgjOGahcyBBaCrXgrBLdDaFwY0KnAQSv8WRDr/kWNWsSo8bVBzVT1vSpuxpZwxFgGvnrHiSOMwvAel7hYUgmbxghT1OJUfYRJf6Z21NMR7izUehILHxJMBBFB1IQCUA+BghG/GajBg/qKqL5DQKMVufs+twDahoh4wIRFJgzOEKTFkjxn9GMuDUvxtKnZEtTGFGey7C8qr6Ubhr8nzHVQbyHs8CTZ1/46tF6jJjWs0TgErVlPR0Xp0kDXFmZk93WdsL5EjYFYPQlt3EYW6r+Yc98rWV4fteDecUHNVJPeq3ifudXFpR1xFIReJCxbCQST43aY86nXqOiQVwjpCJP3E22palWzcp8kFjYkmAgigqA0Oi+qaW38m3WQYFKuT/U/G8qLetHEVKPXkhU9y/Q75Hk/t3HFOZntsn6tDRVxyFLOfaNVdbzJcvB+iU57jJ5Ihu9T5qz6x0urVCvqWVk4NTl3J9b1p3v8+hAvUVG6VHA2nZHd13XC/cQa94g/3VIvGmTl8jYFw7wzMY+KbgfVQEok62VWEAxmwczOl09I2sIoCoNzzFfDHfH8WFJi0DQaBFKQW6k+H71CyGAMHPWLl7asiTeC6DQkmAiiCUFpdBopG4tYozA4b0zJ80SYvPijTepzGlf567aF4MiEPyrSinGDToKQMnsPKG+htrb2jjNCvz1uVBNh72dFbjP0sxBzVE7Rfff8t5siGEIjnK0IJoNx10CkE/Ui+jrIyO7rOsECIaw5dpB0DY7i9ALvhLpm2x8g/ALOI2UckCBe5DHLyTrdFEdB5AQL7J8UhmUDxYCaVeEsWnmbw+tcAa+4YozBEPWLl9p0KWvPI2JhQoKJIJogAqJCNVgshzx3WyGTkKgbvn4wKtMGldoQ9nq/Q57G34tJP5ASpeR5xEXWHlB+q+q4k2WD6VSzeikT9daoHiTqs0MiTNAF9s3HplfGM0NEhLOVUeaEXi2OU5PXOou1eN9b08dQq/0J2hv+aF9UL7FeIDxOedKpuwy646rxNt6oM3UdtUivxVEQJucJnS5V+rofb6qdPlLqHsmc+3ONHOeY9eTySsdJr/+PMNEPkGAiiCYE5cZ7SbKCqV4anH/fjJGCgQNz87AsFnrh2hIoGI1qoaEXk/PfJHMJ5m6jtTSsTuK1FdaCJc5jVGgXROdprSMTUd+vVstVv5ubObOF2bsHkz3nJzMkwtlKrYvJGUzBULFkZE1eq2Rt0t9tws79wMhMQ/S5+TXQTWoGA07kVQSvhrDAhYyaQUC/kEVxFISRILNCC6ugbAzDMVbyupXqv/vvgTlR76hnQ8IU8WuICaIdSDARRBNU3VHjNFdbmiZZwQx2r4o/ORnJmdh+bAbDOQODhhnwChko4PyTdf3fJJNdnSHGUrIUTxMGjzmHTsmLMUTdaV7bKrum6RHvNYSK4AXZkQNRtuK1CFOc3Z61fWxy9b0tCRieobU0TMZQNARKViW18dWjJs3Z2oPdw3uuMYbIVNP62GzNKCErYlMwdS1YUkZGt/11jLrZeDv93TpJvwijMPzRnyh0rVGQYBIBFuU2EJhq53fUs2W0yx5BpAkJJoJoQnj6m3oImIkFk5/4AmTQFO7kQTe+HRDqMo7q3ePvxdTKpEhPP7NmKQ7A5/blFK3HfJ/BGUo6L75JE2FA7ce8wTFbsetuoM2swLWok00UkzvRy5hgEpzBFBylqg2IWl1fq6u7OcHdIu60v6vr3pexfdgtdEpqgGF+A/5Fk6RGCR2HOdHISvj9Dagt6LiLQs7CSRbm0/0ujoLQz0VvVD8My3nuBEaYAizKpZTgAc9Ff8RJStngukcQnYIEE0E0IWwypx8CiVLyWP1DRkep4gqXoimQNzjKloSun9XCqcBFoEMeACUMGEPJWcZza2QSTIr0qjWQvegH4HH7clak4074TM4wj9p+ifPePBeYhV2X/tPUaMARdSGGiy5Zmuj5yQuO+aq3jqn1KI7pNHy2OiaYMrgDuwRnNaN9wJtm1/ha/26SMnvXt6oTtRC1kBD+nbv3XRaiMApDN/mNg9uDKeAEDLIotyWQMxrvw0GOeolMPQiiDehMI4gmqAdx443esiVMzpBLMLPVk3HvnJkhuheFfyxjeRNVu9GfaLJSwVSlEmks4V19TTopYtAPt2xZimu8PTqSDE/4HsJxvptqJBzcvyZqGqGie9HbzloNiRc1cXUK8NusE2KMoWDwRM0vYyOzk1LWC9wz2rNvdYTTj7f2R/83a/VztXtVuLjm8EZwPXUwHfgqQ3kR+GcxYTjPsqB7oB/LlihG9Cs0OffZhQenlus2EN4U+aydq8TChSJMBNGEYNtdoGpLLCmYicQD5+rBrrOybKiHfBLxMpQzAMd8wfvZVVsiJxhGCgIz5UZBpe1b4fx/4geNU++TVdcpNTFStudJarOEY8ShRUCcr6ejIxWnGSMQr/bD33gxiKzVkHgxnfoty1bnXmRELQY5IQBYsCFTbZSqRGcGd2C3cK5Vy5lY6glmcEKw/zfZSwdVTmhqTKECyLmP1r5z8ii6ZrGJn1ao1R5FG2tIKWFJiYEAS3GNKXidRbmUCIxGGbxW76TPgyS1VATRDiSYCKIJYUYNEhKDuWSXkHAmmfohE9VXJIxBUyAnGKbLFoomd1fiLCkxYBpgjDX0cIL7Gcz372QYPLuCiXm+X7IIE3ML5N3al+YfhoIQKHtMC3QaWNTbw84lL6qRcXajeDnBMVe1XeOHdqwVckKdT7YtUy7Oj5/mulDhjKHqScENOzf9BhFZdJYTTp1Ls1RLbx9qCQkjRF2RIGoft/aoyevKtoTJOZYUc6GvyfmMlSSk48pZT+08kG7wlCJMRLeglDyCaIK37kijV9iDGvFFIZz0vlpqnHQiTPG3kRMcG0cGMJw3MF+1MVmqYr5qQdoSRaNewHlTRby9mNDiiv5IzsCgmc3Jhmv3jWRiUNQ9+OPX0+gHurcRMW8ScomzabUyHmsIPSEvONxGk2gvEsaZ6u9kdSAtL2tRkm4jeL00DzPB8BpE1Iw8ujLE2CiLaR55vg3lBcAkjpRKmLWqOFoqg/Pg9DmifeocRkOQUmK+amF8IOdkRgTjtyhnCDZbMpznpy1rpktZXcAjFh4UYSKIJrh2tajFZ6pO/VIxoXjgTuG/fsjobSZZXWeMYdlADkuLJqbKVRyZr+DIXBmcMxRC7OuG8gKcS+yYqGBZIe9+r6Rk1aIX8KZgJYsucKAufSnuRDsnnBQgp5GwlM2NGuKJ1OD8/axgcK4mLahF59ohLzhmKo39ndolu2dqd/A2pJUy/Lxu3OfdT8mLI2IOzUuULRvDhYiJt++6SdJUnEgGY8ohdi7CxaZk2cgLjpWD+cht+VPSZcDPgHpHPc60Y+tiv9KJbkGCiSCa4PYw8iimqm1jKGckfiCrlHrmFrjqG38rrlSMMYzkTYzkTaweLGCqXMVIxGTC5BycMUyUyyhbNsaL0Q+xfkOXrgMJLZFZvW1x3Hcqe3GB2YoFA/EiW3GHlWY9T9qYQvW2qVg2zIAmyUnJCe7WRaW3WryYuzApvCm4Uamm3qbPWrJGRnF6xEjOaNrCQZ8/tlTfJIkhD5GcnOCYKlchZWMKsZQSJcvG+uEiikb0eeO1KPf/zAtjqrXBfNWG7bRxoBomoluQYCKIJtTsamuKyZLAcML6JUDd8A3OMF/12Vi3Oca8wZE3wnPEgVr9UdmylUOZyTCYE3V1Tv2MmzoJmTjXWK1Mq6S8JGJFRUeqtTTHJm/1OpIFHXWdEpXlRVOVRqd6V6Uh7ARXaXmzVTvVB9Jin0fpa2DWqmKyVEHBLAQKHiklnp6oum0SLFviuHwxsGdOL1kaUQOj0ZNsZWONwDoYIj2WD+QxWapipmJh0Kx3wZur2hgwBFY0iS4BNYtyt3E4wiNHJueYlZaTkkcRJqJ7kGAiiCa4VuBub1M1OR5osZZHsFrTTykBIbrTJJI59SIzFUut6jsPmiCDiH6E6dRJmTy1qxbhY4lyuUyu0vK0tW6zCJOb3imDJ/ROfCzzk4AcF+DMQloZT3lDYLZqpZiWJxdEfKmdiM68U8czkleP+bBzSi/iVKtSuRWy8GbdWUdPvC1bOk3FSTB1krGCiU1jA9hxbLZONNlSomrbWD8yGEt4a/c7bbwT5RybE7UaprzInqMjsXAhwUQQTeAcdQ0Rq07qUKFJmkEYut4FUOKrmykFBUOgapdRMBrz/b2Ts34UTyz0H80R3uhUQsGk7cXjpIGpXjHhv9dCKuvzVdOp30prspITNbtgziRsqSa9WkAliXbUjAt6txOzYCwgPGlODNFpv4ZTvG9DLar06yRUT7wrtsSAITLZ/HmhoSN/XtE0W7EwlDOwLEZUEPD2dKpF2MNEu+mazgAm7/11RiweSDARRBOEz6ih6tikFlq0MlNN+tTfbSDU+rYT5AQHc2qmoj62H8WTrjWDTF7wLzjcRrSJIhx19uKsaRqYXgHXTTX9xJncZgGTM7cPSxoYjl35bMVyirmZGwWdrbRy/rHYaZlZEDedwLXLR/P6OkMoEw8mZeZS8ZJgMCX2ypaFgpGsRx7ROl7RNF1W1+uqwULsSKXgvHb/da7/0AbsTm2eDbVwQxDdggQTQTSBod6oQTesbXWyqLuVA9pCunsTFB0ZMEX8Pj/9Ip4Y08cquaW0nlyyGKLHj5pgqmPa3PRB7ftSNbh7iVvTlvGJnrbUb0fY+YVKWdqQTGLYNDCYE8g7BeV7p+cwmBOxj6llKyvjdSN5DOYWphiKQ22hBwCim2MbnLumD/l+FkyOi5ply5YXtIjW8IqmAVNgadGM/V7hLOJVpQST0TVMXoMISrkkugkJJoJoQqNRQ/KGtV7qJ37dTckznZW8Vt2jsiyeVLobUxGmhF9PHWOuDDESfq4pVLTFsuNFtnKCY74avO+k7EzEsRNRlMFcus11lxZzDYX9Ksrk1KTE3C82pBLNWc9r7DCC15pkA9Fpnt5IQD+v2mvHUcEYcmLxiuVesbSYg8l54ugzYwyG4KhULEggMi1UeESSv38TQXQSEkwEEQNt1KDtapM2rK3bFtc+QIpuTux076BcCitz/kl4zwWUs6Jev3fjYwqGip08OsWZ6n81a1uxao+0QA4yOJBotNbOaspYN6JgynJc9ciKu14tnbTKrKc1dho9aVX3LBlpJOLdV1nuAdYMHcHlnDW1ICc6w3C+tWlljjPMOCnJUcdORxGrNshSnOgqJJgIIgbCMWqo2BKmYE37SkRR/yzo7sTO5FzZi3dgZS5oYt9tEaVS6mRLltLaxKCV9+YER8mym75XNRAGnp2qwLR5Q0rJZKmC0YKRWZHUbXSvq5lKNfZ7pGwtLXOhodNMLRntOqZfq0izF1ZvcBeFKPrQV5iCK3HviN4wDDd9mizFie5CgokgYqAiTEDVsjGYM9rq7yG0M4H77/bHFxeDq4lEt1bmwib+nRJSggMVO6Fxg36vJ0IVB+93yxkMM9UKhvNG04d4wVBCSZmHNP6e8vLrGTAFpkqV2K+X0MYZnRtTP8B1mmnVAke0gNT3N47+tRTX5LiKStJ11F+YTuaFqk2KOFedyCln3U1nJwgSTAQRA2UFLmGBYbjNQnK3warUzU67d9NnjGH1UAGDLfaQSoskEZQk4ko3GY6zS/1jKJoc+QprKaUkJzg2jQ3GHuNgTuDwXL0IsJ10lG66JvYDecE9ywvNUUYq2TfO6AYGV41oDRFt0MEd90bu1Gv2M4bgMAXv61qsxYjBuevqGJUWqlPyGMt+vzpiYUGCiSBiULsxSwyY7V02tdoC599dntj5C+uzThJxNVEuY7paxQn5gcQTZsEZRvLxnZ3aYdA0cGi2UTBRs81GtGubdNJ1miFRXxi+mDGFqv9iTEVfwxBMRWU5YzBYf++7vOAYNOO7KhLZQEc5gegop46cWtLqe3FP9BckmAgiBoIxVG2JvOBt1S+pbcGpLVAT5MXu5pUmeoU869GFoiFcBzM9sbOkEm20Ml5PznHMsmW8NDspow0OFhOq55t0o0dhCKd2L6phaL+wpGBirNCdhQ8iPbztNppdv6bgqNg2XedEV+nvpSSC6BI61SsnWm9YW7ct170q+01K+wmD90eEpmioOrKqXUs2s20JwRjl5fvwOuXFwQYCa8MWIwZn4I6xTJRg4k6ak8H7P82JNfmuRDYxPFbkzZ6JOSeFlO6VRDehCBNBxEDnTA/ljLYfxjX3Kuk83NMZI6FWlwfbTJnsBjnBXWc9XRJnS4m8MDIfHes2JldRw6otgRjBXSkpJU+jezE12x/qnsRgcnJnJHqD4PpZ2LyOLufUqdG9kugm9FQhiBgIJ9UrDbME/WCwnUanFGFKD4NzDPTY0CIOSnwLWLbt/sySEgUKjTTAmLLxjxth6nYz6CyjI0vNJqA6Ja/VhtYE0S6GI9o5a56SZwjWdqYHQSSFzjiCiIEqxmcopjAZ1/UEqoaJekksVgZMo8H9LY2GwguRoqlqceJCKVkKLYSazS05U6/N0ySU6BF6IZGheVryeDGHdcPFLo2MIBR0dySIGAinf1G7hg9AzQ5VF/zT1G5xUjQ4GLy1OWT4EEZeJLnuGEh3KnQNU5RNM6DuSTnBafGG6Bna/S5WhIlzFFJ4FhNEErKf7E8QGWDIFDh+bDC17vGGdv3qA0c3ojMUDQFTqNocNZ+VfWFY0QtyiazFJaW5OuhmzHGc75YVcxhss8ccQbSDagjf3d6EBBEXEkwEEQPG0knH0xiCQVKtxaLG4Ax5Q2C2UoXBBIST9kk04nXKi3PN0IRLIRzXuzj7Y8VgvgsjIohwcpxBSlo0IrIJnZkE0QN0ioxBKViLFsYYhk0By5ZuTy4zpQjmQkOni1l29Oukk95IESaF4MpSnPYH0Q9o91CCyCIUYSKIHmA4tUvNaguIhY129LOdZqsUYQrGcGoI56vRikkCrtMWoYRj3AgTQfSapUUTVnxvF4LoKjRbI4gewJ1JDKXkLW4KhgBnDGVLIkd9RSIZMFQ0LgopAcYoJU/DGcNo3kSR7OqJPmDANDCco3V8IpvQmUkQPUD3R+G0FL6oKRoCJmeYKlsoUCpKJAVDQDYYsdcjIV2LbEKxfoTslwmCINqFntAE0QME039oYreYEZxhwFTrVtQDJxqvU14YUuqUPLquCIIgiPSgJzRB9ADuRJjI84EYygkYnJGleBNygoGBRcaYbKiUPArWEQRBEGlCjxWC6AFUjE1oioZAXvBYvXIWMzWnvKgIkwQD1TARBEEQ6UKCiSB6AHfsfmliRxQcwUR2utHkHFFpNUnJ444DJUEQBEGkBT2hCaIHaLEkKKqw6CkaHOtGihhMsTHyQoQzhrzg0REmqLowchskCIIg0oQEE0H0AIOr+iVKwyIYYxgrmDTJj8GAKZpEmCRZ9RMEQRCp0zeC6XWvex02bNiAQqGA1atX47d+67ewd+/eXg+LIFoiJzhOWDKIokFRBYKIS15wICLhTgIQ5KRCEARBpEzfCKZLLrkE3/jGN/DEE0/gX/7lX/D000/jjW98Y6+HRRAtkyexRBCJUHVeMtRa3JagCBNBEASROn3TuPaP/uiP3L9v3LgR1157LS677DJUKhWYptnDkREEQRDdICc4OGOwJUIs+SUMsmcnCIIgUqZvBJOXI0eO4J/+6Z9w4YUXRoqlUqmEUqnk/ntycrIbwyMIgiA6QF5wCKac8kRgah45TxIEQRDp01dLcddccw0GBwexbNky7Ny5E9/+9rcjX3/jjTdidHTU/bN+/foujZQgCIJIG4MzmCK6FxOVMBEEQRBp01PBdMMNN4AxFvnngQcecF//wQ9+EA899BC+//3vQwiBt7/97aG57ABw3XXXYWJiwv2za9eubnwtgiAIogMwxlA0opzyJEWYCIIgiNRhMkpxdJhDhw7h0KFDka857rjjUCgUGn6+e/durF+/Hj/+8Y9xwQUXxPq8yclJjI6OYmJiAiMjIy2NmSAIgugduyfnsHtqDiP5xnTsyVIFm5cMYdlArgcjIwiCIPqNuNqgpzVM4+PjGB8fb+m9Wud5a5QIgiCIhU3eCLYWV88EBk69zQiCIIiU6QvTh/vuuw/33XcfLrroIixZsgTbt2/HRz/6UZxwwgmxo0sEQRBE/5MXHIxBGT940u+UXJIgvUQQBEGkTV+YPhSLRdx+++14+ctfjpNPPhnvete7cPrpp+Ouu+5CPp/v9fAIgiCILlEwBAzWaPwgpapxElTDRBAEQaRMX0SYzjjjDNx55529HgZBEATRY0zOkDc45qs2cp7ezxISDCDTB4IgCCJ1+iLCRBAEQRCAiiINmgKWbdf9vBZh6tHACIIgiAULCSaCIAiiryiaAn57VwmAM4owEQRBEOlDgokgCILoKwpC5eLZnq4YtqSUPIIgCKIzkGAiCIIg+oqCwWFwXmf8oCJMjFzyCIIgiNQhwUQQBEH0FXnBkeMMVa9gkoDgDIwiTARBEETKkGAiCIIg+grGGAZyAlXpjTBJshQnCIIgOgIJJoIgCKLvGDANSFkfYTIoH48gCILoACSYCIIgiL6jIDgA5oomKUERJoIgCKIjkGAiCIIg+o6CISAYYGnBBEkRJoIgCKIjkGAiCIIg+o6CwWEK7jF+YBAkmAiCIIgOQIKJIAiC6Ds4YygawiOYJPVgIgiCIDoCCSaCIAiiLxk0BTzO4lTDRBAEQXQEEkwEQRBEX1IwBADpGD8wijARBEEQHYEEE0EQBNGXFAwOzpgbZaISJoIgCKITkGAiCIIg+pKCwWFwhoptg0GS6QNBEATREUgwEQRBEH2JwTkKhkDFlmCMUvIIgiCIzkCCiSAIguhbhkyBqmWDARCklwiCIIgOQIKJIAiC6FsKhgAYKMJEEARBdAwSTARBEETfUjA4DMbBABJMBEEQREcgwUQQBEH0LQVDwOAMjFEfJoIgCKIzkGAiCIIg+haTM+SEshcnkzyCIAiiE5BgIgiCIPoWxhgGTQHh1DERBEEQRNoYvR4AQRAEQbTDQE6gqrvXEgRBEETKkGAiCIIg+prxYg6jebPXwyAIgiAWKCSYCIIgiL7G4BwGJZgTBEEQHYIeMQRBEARBEARBECGQYCIIgiAIgiAIggiBBBNBEARBEARBEEQIJJgIgiAIgiAIgiBCIMFEEARBEARBEAQRAgkmgiAIgiAIgiCIEEgwEQRBEARBEARBhECCiSAIgiAIgiAIIgQSTARBEARBEARBECGQYCIIgiAIgiAIggiBBBNBEARBEARBEEQIJJgIgiAIgiAIgiBCIMFEEARBEARBEAQRAgkmgiAIgiAIgiCIEEgwEQRBEARBEARBhECCiSAIgiAIgiAIIgQSTARBEARBEARBECGQYCIIgiAIgiAIggiBBBNBEARBEARBEEQIJJgIgiAIgiAIgiBC6DvBVCqVcNZZZ4ExhocffrjXwyEIgiAIgiAIYgHTd4LpQx/6ENasWdPrYRAEQRAEQRAEsQjoK8H03e9+F9///vfxyU9+stdDIQiCIAiCIAhiEWD0egBx2b9/P6688kr867/+KwYGBmK9p1QqoVQquf+enJzs1PAIgiAIgiAIgliA9EWESUqJd77znbjqqqtw3nnnxX7fjTfeiNHRUffP+vXrOzhKgiAIgiAIgiAWGj0VTDfccAMYY5F/HnjgAdx0002YnJzEddddl2j71113HSYmJtw/u3bt6tA3IQiCIAiCIAhiIcKklLJXH37o0CEcOnQo8jXHHXccLr/8cnznO98BY8z9uWVZEELgbW97G770pS/F+rzJyUmMjo5iYmICIyMjbY2dIAiCIAiCIIj+Ja426KlgisvOnTvr6o/27t2LX/3VX8Vtt92G888/H+vWrYu1HRJMBEEQBEEQBEEA8bVBX5g+bNiwoe7fQ0NDAIATTjghtlgiCIIgCIIgCIJISl+YPhAEQRAEQRAEQfSCvogw+TnuuOPQB5mEBEEQBEEQBEH0ORRhIgiCIAiCIAiCCIEEE0EQBEEQBEEQRAgkmAiCIAiCIAiCIEIgwUQQBEEQBEEQBBECCSaCIAiCIAiCIIgQSDARBEEQBEEQBEGEQIKJIAiCIAiCIAgiBBJMBEEQBEEQBEEQIZBgIgiCIAiCIAiCCMHo9QC6iZQSADA5OdnjkRAEQRAEQRAE0Uu0JtAaIYxFJZimpqYAAOvXr+/xSAiCIAiCIAiCyAJTU1MYHR0N/T2TzSTVAsK2bezduxfDw8NgjPV6OC6Tk5NYv349du3ahZGRkV4PZ9FDxyNb0PHIDnQssgUdj2xBxyNb0PHIDlk+FlJKTE1NYc2aNeA8vFJpUUWYOOdYt25dr4cRysjISOZOpMUMHY9sQccjO9CxyBZ0PLIFHY9sQccjO2T1WERFljRk+kAQBEEQBEEQBBECCSaCIAiCIAiCIIgQSDBlgHw+j+uvvx75fL7XQyFAxyNr0PHIDnQssgUdj2xBxyNb0PHIDgvhWCwq0weCIAiCIAiCIIgkUISJIAiCIAiCIAgiBBJMBEEQBEEQBEEQIZBgIgiCIAiCIAiCCIEEE0EQBEEQBEEQRAgkmDLEM888g9/5nd/Bpk2bUCwWccIJJ+D6669HuVzu9dAWDZ/5zGewadMmFAoFnHvuufjRj37U6yEtSm688UY8//nPx/DwMFasWIHLLrsMTzzxRK+HRTjceOONYIzh6quv7vVQFi179uzBFVdcgWXLlmFgYABnnXUWHnzwwV4Pa1FSrVbxf/7P/3Gf3ccffzz+9E//FLZt93poC567774br33ta7FmzRowxvCv//qvdb+XUuKGG27AmjVrUCwWcfHFF+PRRx/tzWAXAVHHo1Kp4JprrsEZZ5yBwcFBrFmzBm9/+9uxd+/e3g04ASSYMsTjjz8O27bx2c9+Fo8++ij++q//Gn//93+PD3/4w70e2qLg61//Oq6++mp85CMfwUMPPYQXv/jFeNWrXoWdO3f2emiLjrvuugvvec978JOf/AR33HEHqtUqXvnKV2JmZqbXQ1v03H///fjc5z6H5z3veb0eyqLl6NGjeNGLXgTTNPHd734Xv/zlL/FXf/VXGBsb6/XQFiWf+MQn8Pd///e4+eab8dhjj+Ev/uIv8Jd/+Ze46aabej20Bc/MzAzOPPNM3HzzzYG//4u/+At86lOfws0334z7778fq1atwq/8yq9gamqqyyNdHEQdj9nZWWzduhV//Md/jK1bt+L222/Hk08+ide97nU9GGlyyFY84/zlX/4lbrnlFmzfvr3XQ1nwnH/++TjnnHNwyy23uD/bsmULLrvsMtx44409HBlx8OBBrFixAnfddRde8pKX9Ho4i5bp6Wmcc845+MxnPoM///M/x1lnnYVPf/rTvR7WouPaa6/FvffeSxHwjPCa17wGK1euxOc//3n3Z7/xG7+BgYEBfPnLX+7hyBYXjDF861vfwmWXXQZARZfWrFmDq6++Gtdccw0AoFQqYeXKlfjEJz6B3/u93+vhaBc+/uMRxP33348XvOAFePbZZ7Fhw4buDa4FKMKUcSYmJrB06dJeD2PBUy6X8eCDD+KVr3xl3c9f+cpX4sc//nGPRkVoJiYmAICuhR7znve8B7/2a7+GV7ziFb0eyqLm3/7t33DeeefhTW96E1asWIGzzz4b//AP/9DrYS1aLrroIvz3f/83nnzySQDAz372M9xzzz149atf3eORLW527NiBffv21T3X8/k8XvrSl9JzPSNMTEyAMdYX0XGj1wMgwnn66adx00034a/+6q96PZQFz6FDh2BZFlauXFn385UrV2Lfvn09GhUBqFXCD3zgA7joootw+umn93o4i5Z//ud/xtatW3H//ff3eiiLnu3bt+OWW27BBz7wAXz4wx/Gfffdh/e9733I5/N4+9vf3uvhLTquueYaTExM4JRTToEQApZl4WMf+xh+8zd/s9dDW9ToZ3fQc/3ZZ5/txZAID/Pz87j22mvx1re+FSMjI70eTlMowtQFbrjhBjDGIv888MADde/Zu3cvLr30UrzpTW/Cu9/97h6NfPHBGKv7t5Sy4WdEd3nve9+Ln//85/ja177W66EsWnbt2oX3v//9+MpXvoJCodDr4Sx6bNvGOeecg49//OM4++yz8Xu/93u48sor69KJie7x9a9/HV/5ylfw1a9+FVu3bsWXvvQlfPKTn8SXvvSlXg+NAD3Xs0ilUsHll18O27bxmc98ptfDiQVFmLrAe9/7Xlx++eWRrznuuOPcv+/duxeXXHIJLrjgAnzuc5/r8OgIABgfH4cQoiGadODAgYbVKaJ7/OEf/iH+7d/+DXfffTfWrVvX6+EsWh588EEcOHAA5557rvszy7Jw99134+abb0apVIIQoocjXFysXr0ap556at3PtmzZgn/5l3/p0YgWNx/84Adx7bXXus/5M844A88++yxuvPFGvOMd7+jx6BYvq1atAqAiTatXr3Z/Ts/13lKpVPDmN78ZO3bswJ133tkX0SWABFNXGB8fx/j4eKzX7tmzB5dccgnOPfdc3HrrreCcgoDdIJfL4dxzz8Udd9yBX//1X3d/fscdd+D1r399D0e2OJFS4g//8A/xrW99Cz/84Q+xadOmXg9pUfPyl78cjzzySN3Pfvu3fxunnHIKrrnmGhJLXeZFL3pRg83+k08+iY0bN/ZoRIub2dnZhme1EIJsxXvMpk2bsGrVKtxxxx04++yzAah65bvuuguf+MQnejy6xYkWS9u2bcMPfvADLFu2rNdDig0Jpgyxd+9eXHzxxdiwYQM++clP4uDBg+7v9EoJ0Tk+8IEP4Ld+67dw3nnnudG9nTt34qqrrur10BYd73nPe/DVr34V3/72tzE8POxG/kZHR1EsFns8usXH8PBwQ/3Y4OAgli1bRnVlPeCP/uiPcOGFF+LjH/843vzmN+O+++7D5z73OcpI6BGvfe1r8bGPfQwbNmzAaaedhoceegif+tSn8K53vavXQ1vwTE9P46mnnnL/vWPHDjz88MNYunQpNmzYgKuvvhof//jHsXnzZmzevBkf//jHMTAwgLe+9a09HPXCJep4rFmzBm984xuxdetW/Pu//zssy3Kf7UuXLkUul+vVsOMhicxw6623SgCBf4ju8Hd/93dy48aNMpfLyXPOOUfeddddvR7SoiTsOrj11lt7PTTC4aUvfal8//vf3+thLFq+853vyNNPP13m83l5yimnyM997nO9HtKiZXJyUr7//e+XGzZskIVCQR5//PHyIx/5iCyVSr0e2oLnBz/4QeCz4h3veIeUUkrbtuX1118vV61aJfP5vHzJS14iH3nkkd4OegETdTx27NgR+mz/wQ9+0OuhN4X6MBEEQRAEQRAEQYRABTIEQRAEQRAEQRAhkGAiCIIgCIIgCIIIgQQTQRAEQRAEQRBECCSYCIIgCIIgCIIgQiDBRBAEQRAEQRAEEQIJJoIgCIIgCIIgiBBIMBEEQRAEQRAEQYRAgokgCIJYcNxwww0466yzej0MgiAIYgFAjWsJgiCIvoIxFvn7d7zjHbj55ptRKpWwbNmyLo2KIAiCWKiQYCIIgiD6in379rl///rXv46PfvSjeOKJJ9yfFYtFjI6O9mJoBEEQxAKEUvIIgiCIvmLVqlXun9HRUTDGGn7mT8l75zvficsuuwwf//jHsXLlSoyNjeFP/uRPUK1W8cEPfhBLly7FunXr8IUvfKHus/bs2YO3vOUtWLJkCZYtW4bXv/71eOaZZ7r7hQmCIIieQoKJIAiCWBTceeed2Lt3L+6++2586lOfwg033IDXvOY1WLJkCX7605/iqquuwlVXXYVdu3YBAGZnZ3HJJZdgaGgId999N+655x4MDQ3h0ksvRblc7vG3IQiCILoFCSaCIAhiUbB06VL87d/+LU4++WS8613vwsknn4zZ2Vl8+MMfxubNm3Hdddchl8vh3nvvBQD88z//Mzjn+Md//EecccYZ2LJlC2699Vbs3LkTP/zhD3v7ZQiCIIiuYfR6AARBEATRDU477TRwXlsnXLlyJU4//XT330IILFu2DAcOHAAAPPjgg3jqqacwPDxct535+Xk8/fTT3Rk0QRAE0XNIMBEEQRCLAtM06/7NGAv8mW3bAADbtnHuuefin/7pnxq2tXz58s4NlCAIgsgUJJgIgiAIIoBzzjkHX//617FixQqMjIz0ejgEQRBEj6AaJoIgCIII4G1vexvGx8fx+te/Hj/60Y+wY8cO3HXXXXj/+9+P3bt393p4BEEQRJcgwUQQBEEQAQwMDODuu+/Ghg0b8IY3vAFbtmzBu971LszNzVHEiSAIYhFBjWsJgiAIgiAIgiBCoAgTQRAEQRAEQRBECCSYCIIgCIIgCIIgQiDBRBAEQRAEQRAEEQIJJoIgCIIgCIIgiBBIMBEEQRAEQRAEQYRAgokgCIIgCIIgCCIEEkwEQRAEQRAEQRAhkGAiCIIgCIIgCIIIgQQTQRAEQRAEQRBECCSYCIIgCIIgCIIgQiDBRBAEQRAEQRAEEQIJJoIgCIIgCIIgiBD+f5bAloiN6H8VAAAAAElFTkSuQmCC", + "text/plain": [ + "
" ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Example data (use your own predictions and x)\n", + "x = np.linspace(0, 10, 100) # Time or x-axis\n", + "predictions = np.random.normal(0, 1, (100, 10)) # Mock predictions over time\n", + "\n", + "# Flatten predictions and repeat x-values\n", + "x_repeated = np.tile(x, predictions.shape[1])\n", + "predictions_flattened = predictions.flatten()\n", + "\n", + "# Create the plot\n", + "fig, ax = plt.subplots(figsize=(10, 6))\n", + "\n", + "# Plot mean predictions over time\n", + "mean_predictions = predictions.mean(axis=1)\n", + "plt.plot(x, mean_predictions, color='blue', label='Mean Prediction')\n", + "\n", + "# Confidence interval (95%)\n", + "std_predictions = predictions.std(axis=1)\n", + "lower_bound = mean_predictions - 1.96 * std_predictions\n", + "upper_bound = mean_predictions + 1.96 * std_predictions\n", + "plt.fill_between(x, lower_bound, upper_bound, color='lightblue', alpha=0.5, label=\"95% Confidence Interval\")\n", + "\n", + "# Create a 2D density plot using KDE for each time step\n", + "sns.kdeplot(x=x_repeated, y=predictions_flattened, fill=True, cmap=\"Blues\", ax=ax, alpha=0.5)\n", + "\n", + "plt.xlabel(\"Time\")\n", + "plt.ylabel(\"Predicted Value\")\n", + "plt.legend()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "vINNjRbwnFOa", + "outputId": "cb1c6076-ba6f-4e11-9b29-f16ceb46122b" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "2ZH6ZK2ypExq" - }, - "outputs": [], - "source": [ - "%pip install datasets" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: transformers in /usr/local/lib/python3.10/dist-packages (4.38.2)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers) (3.13.4)\n", + "Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.20.3)\n", + "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (1.25.2)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers) (24.0)\n", + "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (6.0.1)\n", + "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (2023.12.25)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers) (2.31.0)\n", + "Requirement already satisfied: tokenizers<0.19,>=0.14 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.15.2)\n", + "Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.4.2)\n", + "Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.66.2)\n", + "Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.19.3->transformers) (2023.6.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.19.3->transformers) (4.11.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.6)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.0.7)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2024.2.2)\n" + ] + } + ], + "source": [ + "%pip install transformers" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3yDIICSsnFOb" + }, + "source": [ + "## Download Data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "QkZQTpFxnexd", + "outputId": "7b935131-d364-405b-d429-377e61772a56" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 49, - "referenced_widgets": [ - "b52837dbe3f6464e89319ae13c7f571d", - "1717a23099834c109ab6c2cd746dc196", - "ed4e23d565d94444b645a5d6344d6676", - "c8a24f0cd406418d830e16592770a533", - "1360d09087064fe1808dd612b84f8235", - "6e9ad313f8d84d5bb455992f6fbdb6e0", - "1696865a399b4cf19b2e29f2e387a8c1", - "ed6ff113bf17461e91e5533bb4b1a016", - "3a0248bb4cd041e28a5924c13ebbdaa3", - "2960c6f37441492e96aaff9cc128390c", - "e6fae880577e4d82bf1afdc13d86fd30" - ] - }, - "id": "BF26H2PapAjj", - "outputId": "9d9781a6-e8ff-4bcc-bddb-9ed59d8ea5ed" - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "b52837dbe3f6464e89319ae13c7f571d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Generating train split: 0 examples [00:00, ? examples/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from datasets import load_dataset\n", - "\n", - "dataset = load_dataset(\"text\", data_files=[\"dataset/enwik8\"])" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting requests_cache\n", + " Downloading requests_cache-1.2.0-py3-none-any.whl (61 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m61.4/61.4 kB\u001b[0m \u001b[31m1.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: attrs>=21.2 in /usr/local/lib/python3.10/dist-packages (from requests_cache) (23.2.0)\n", + "Collecting cattrs>=22.2 (from requests_cache)\n", + " Downloading cattrs-23.2.3-py3-none-any.whl (57 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.5/57.5 kB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests_cache) (4.2.0)\n", + "Requirement already satisfied: requests>=2.22 in /usr/local/lib/python3.10/dist-packages (from requests_cache) (2.31.0)\n", + "Collecting url-normalize>=1.4 (from requests_cache)\n", + " Downloading url_normalize-1.4.3-py2.py3-none-any.whl (6.8 kB)\n", + "Requirement already satisfied: urllib3>=1.25.5 in /usr/local/lib/python3.10/dist-packages (from requests_cache) (2.0.7)\n", + "Requirement already satisfied: exceptiongroup>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from cattrs>=22.2->requests_cache) (1.2.0)\n", + "Requirement already satisfied: typing-extensions!=4.6.3,>=4.1.0 in /usr/local/lib/python3.10/dist-packages (from cattrs>=22.2->requests_cache) (4.11.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.22->requests_cache) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.22->requests_cache) (3.6)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.22->requests_cache) (2024.2.2)\n", + "Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from url-normalize>=1.4->requests_cache) (1.16.0)\n", + "Installing collected packages: url-normalize, cattrs, requests_cache\n", + "Successfully installed cattrs-23.2.3 requests_cache-1.2.0 url-normalize-1.4.3\n" + ] + } + ], + "source": [ + "%pip install requests_cache" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "JQb9wuBJnFOc", + "outputId": "ac13c900-127f-4648-9a20-4644311c3392" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "4PLbqxdcpDmD" - }, - "outputs": [], - "source": [ - "dataset = dataset[\"train\"]" - ] + "name": "stderr", + "output_type": "stream", + "text": [ + "Downloading: 100%|██████████| 36.4M/36.4M [00:00<00:00, 301MB/s]\n", + "File downloaded and decompressed successfully.\n" + ] + } + ], + "source": [ + "%run download_dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wrDpshHUnFOd" + }, + "source": [ + "## Model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 49, + "referenced_widgets": [ + "94494955b6a94cf2a46a27d1d7016226", + "a5d8febd3dbb4cf0b6627d69c193d5e9", + "fc0529982c3541d3b828ecd22d393cb2", + "68f7078a7fe14149a1f0bfaeed27af3d", + "492d7a3140b74aa285c2d601ab05310d", + "53c9e0bce43241da9a24c5727b08a33f", + "91157c29d648453e8f634255a867f853", + "6e97b634bff64e7c8dc288df99b583e4", + "4ab291df191942a2af948edc15e83174", + "442f227cd54a449ca76b191d151b64b2", + "47c7b76960c842b7b46d6a121e01842c" + ] }, + "id": "IKm2VnUKnFOe", + "outputId": "0ca1d7ea-1720-4687-8383-cd2252dd3087" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Secss3QypgJP" + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "94494955b6a94cf2a46a27d1d7016226", + "version_major": 2, + "version_minor": 0 }, - "outputs": [], - "source": [ - "import random\n", - "\n", - "sample = random.choice(dataset)\n", - "input_ids = tokenizer.encode(text=sample[\"text\"], return_tensors=\"pt\")" + "text/plain": [ + "generation_config.json: 0%| | 0.00/147 [00:00)" ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_output.loss" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "1360d09087064fe1808dd612b84f8235": { + "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 + } }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "BQ9YgNO7xuD0" - }, - "outputs": [], - "source": [ - "assert model.decoder.config.d_model == COMP_EMBED_DIM, \\\n", - " \"Giving the embeddings directly to the decoder\"\n", - "\n", - "encoder_hidden_states = pooled.unsqueeze(-2)\n", - "\n", - "decoder_output = model.decoder(\n", - " input_ids=input_ids,\n", - " encoder_hidden_states=encoder_hidden_states,\n", - ")" - ] + "1696865a399b4cf19b2e29f2e387a8c1": { + "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": "" + } }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "2aHhKPJp1NtI" - }, - "outputs": [], - "source": [ - "model_output = model.forward(\n", - " decoder_input_ids=input_ids,\n", - " labels=input_ids,\n", - " encoder_outputs=(encoder_hidden_states,),\n", - ")" - ] + "1717a23099834c109ab6c2cd746dc196": { + "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_6e9ad313f8d84d5bb455992f6fbdb6e0", + "placeholder": "​", + "style": "IPY_MODEL_1696865a399b4cf19b2e29f2e387a8c1", + "value": "Generating train split: " + } }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "vV46EoAO4drs", - "outputId": "a6568bd1-8460-4517-df59-26bdafcfefc9" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor(6.1232, grad_fn=)" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } + "2960c6f37441492e96aaff9cc128390c": { + "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 + } + }, + "3a0248bb4cd041e28a5924c13ebbdaa3": { + "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": "" + } + }, + "442f227cd54a449ca76b191d151b64b2": { + "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 + } + }, + "47c7b76960c842b7b46d6a121e01842c": { + "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": "" + } + }, + "492d7a3140b74aa285c2d601ab05310d": { + "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 + } + }, + "4ab291df191942a2af948edc15e83174": { + "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": "" + } + }, + "53c9e0bce43241da9a24c5727b08a33f": { + "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 + } + }, + "68f7078a7fe14149a1f0bfaeed27af3d": { + "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_442f227cd54a449ca76b191d151b64b2", + "placeholder": "​", + "style": "IPY_MODEL_47c7b76960c842b7b46d6a121e01842c", + "value": " 147/147 [00:00<00:00, 8.84kB/s]" + } + }, + "6e97b634bff64e7c8dc288df99b583e4": { + "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 + } + }, + "6e9ad313f8d84d5bb455992f6fbdb6e0": { + "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 + } + }, + "91157c29d648453e8f634255a867f853": { + "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": "" + } + }, + "94494955b6a94cf2a46a27d1d7016226": { + "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_a5d8febd3dbb4cf0b6627d69c193d5e9", + "IPY_MODEL_fc0529982c3541d3b828ecd22d393cb2", + "IPY_MODEL_68f7078a7fe14149a1f0bfaeed27af3d" ], - "source": [ - "model_output.loss" - ] - } - ], - "metadata": { - "colab": { - "provenance": [] + "layout": "IPY_MODEL_492d7a3140b74aa285c2d601ab05310d" + } }, - "kernelspec": { - "display_name": "ai", - "language": "python", - "name": "python3" + "a5d8febd3dbb4cf0b6627d69c193d5e9": { + "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_53c9e0bce43241da9a24c5727b08a33f", + "placeholder": "​", + "style": "IPY_MODEL_91157c29d648453e8f634255a867f853", + "value": "generation_config.json: 100%" + } }, - "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.18" + "b52837dbe3f6464e89319ae13c7f571d": { + "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_1717a23099834c109ab6c2cd746dc196", + "IPY_MODEL_ed4e23d565d94444b645a5d6344d6676", + "IPY_MODEL_c8a24f0cd406418d830e16592770a533" + ], + "layout": "IPY_MODEL_1360d09087064fe1808dd612b84f8235" + } }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "1360d09087064fe1808dd612b84f8235": { - "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 - } - }, - "1696865a399b4cf19b2e29f2e387a8c1": { - "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": "" - } - }, - "1717a23099834c109ab6c2cd746dc196": { - "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_6e9ad313f8d84d5bb455992f6fbdb6e0", - "placeholder": "​", - "style": "IPY_MODEL_1696865a399b4cf19b2e29f2e387a8c1", - "value": "Generating train split: " - } - }, - "2960c6f37441492e96aaff9cc128390c": { - "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 - } - }, - "3a0248bb4cd041e28a5924c13ebbdaa3": { - "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": "" - } - }, - "442f227cd54a449ca76b191d151b64b2": { - "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 - } - }, - "47c7b76960c842b7b46d6a121e01842c": { - "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": "" - } - }, - "492d7a3140b74aa285c2d601ab05310d": { - "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 - } - }, - "4ab291df191942a2af948edc15e83174": { - "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": "" - } - }, - "53c9e0bce43241da9a24c5727b08a33f": { - "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 - } - }, - "68f7078a7fe14149a1f0bfaeed27af3d": { - "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_442f227cd54a449ca76b191d151b64b2", - "placeholder": "​", - "style": "IPY_MODEL_47c7b76960c842b7b46d6a121e01842c", - "value": " 147/147 [00:00<00:00, 8.84kB/s]" - } - }, - "6e97b634bff64e7c8dc288df99b583e4": { - "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 - } - }, - "6e9ad313f8d84d5bb455992f6fbdb6e0": { - "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 - } - }, - "91157c29d648453e8f634255a867f853": { - "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": "" - } - }, - "94494955b6a94cf2a46a27d1d7016226": { - "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_a5d8febd3dbb4cf0b6627d69c193d5e9", - "IPY_MODEL_fc0529982c3541d3b828ecd22d393cb2", - "IPY_MODEL_68f7078a7fe14149a1f0bfaeed27af3d" - ], - "layout": "IPY_MODEL_492d7a3140b74aa285c2d601ab05310d" - } - }, - "a5d8febd3dbb4cf0b6627d69c193d5e9": { - "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_53c9e0bce43241da9a24c5727b08a33f", - "placeholder": "​", - "style": "IPY_MODEL_91157c29d648453e8f634255a867f853", - "value": "generation_config.json: 100%" - } - }, - "b52837dbe3f6464e89319ae13c7f571d": { - "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_1717a23099834c109ab6c2cd746dc196", - "IPY_MODEL_ed4e23d565d94444b645a5d6344d6676", - "IPY_MODEL_c8a24f0cd406418d830e16592770a533" - ], - "layout": "IPY_MODEL_1360d09087064fe1808dd612b84f8235" - } - }, - "c8a24f0cd406418d830e16592770a533": { - "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_2960c6f37441492e96aaff9cc128390c", - "placeholder": "​", - "style": "IPY_MODEL_e6fae880577e4d82bf1afdc13d86fd30", - "value": " 1128024/0 [00:01<00:00, 669968.44 examples/s]" - } - }, - "e6fae880577e4d82bf1afdc13d86fd30": { - "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": "" - } - }, - "ed4e23d565d94444b645a5d6344d6676": { - "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_ed6ff113bf17461e91e5533bb4b1a016", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_3a0248bb4cd041e28a5924c13ebbdaa3", - "value": 1 - } - }, - "ed6ff113bf17461e91e5533bb4b1a016": { - "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": "20px" - } - }, - "fc0529982c3541d3b828ecd22d393cb2": { - "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_6e97b634bff64e7c8dc288df99b583e4", - "max": 147, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_4ab291df191942a2af948edc15e83174", - "value": 147 - } - } - } + "c8a24f0cd406418d830e16592770a533": { + "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_2960c6f37441492e96aaff9cc128390c", + "placeholder": "​", + "style": "IPY_MODEL_e6fae880577e4d82bf1afdc13d86fd30", + "value": " 1128024/0 [00:01<00:00, 669968.44 examples/s]" + } + }, + "e6fae880577e4d82bf1afdc13d86fd30": { + "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": "" + } + }, + "ed4e23d565d94444b645a5d6344d6676": { + "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_ed6ff113bf17461e91e5533bb4b1a016", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_3a0248bb4cd041e28a5924c13ebbdaa3", + "value": 1 + } + }, + "ed6ff113bf17461e91e5533bb4b1a016": { + "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": "20px" + } + }, + "fc0529982c3541d3b828ecd22d393cb2": { + "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_6e97b634bff64e7c8dc288df99b583e4", + "max": 147, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_4ab291df191942a2af948edc15e83174", + "value": 147 + } } - }, - "nbformat": 4, - "nbformat_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 } diff --git a/TokenDethcod.ipynb b/TokenDethcod.ipynb index 84a3f6b..af2efde 100644 --- a/TokenDethcod.ipynb +++ b/TokenDethcod.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -18,7 +18,25 @@ "outputId": "64d713f1-32ad-4db4-ef37-e338a7a4e841", "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Channels:\n", + " - conda-forge\n", + " - defaults\n", + "Platform: linux-64\n", + "Collecting package metadata (repodata.json): done\n", + "Solving environment: done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], "source": [ "%conda install -c conda-forge transformers wandb requests_cache datasets tqdm python-dotenv" ] @@ -34,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -47,7 +65,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Downloading: 100%|████████████████████████████████████████| 36.4M/36.4M [00:00<00:00, 678MB/s]\n", + "Downloading: 100%|████████████████████████████████████████| 36.4M/36.4M [00:00<00:00, 655MB/s]\n", "File downloaded and decompressed successfully.\n" ] } @@ -184,7 +202,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "'::<math> \\\\sum_{i=1}^\\\\infty\\\\|x_i\\\\|^2 = \\\\left\\\\|\\\\sum_{i=1}^\\\\infty x_i\\\\right\\\\|^2, </math>'\n" + "'== Gestapo counterintelligence =='\n" ] } ], @@ -363,6 +381,7 @@ "if LOAD_LATEST:\n", " compressor = CompressionModel.from_pretrained(MODEL_PATH / \"compressor\").to(device)\n", " decompressor = DecompressionModel.from_pretrained(MODEL_PATH / \"decompressor\").to(device)\n", + "\n", "else:\n", " model_path = \"google-t5/t5-small\"\n", " print(f\"Loading model from {model_path}\")\n", @@ -391,6 +410,7 @@ "name": "stderr", "output_type": "stream", "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: Using wandb-core as the SDK backend. Please refer to https://wandb.me/wandb-core for more information.\n", "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n", "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n", "\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /home/khodabandeh/.netrc\n" @@ -427,7 +447,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "id": "nbJccLQa_TKV" }, @@ -452,7 +472,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { "id": "zioTdU4gA2J2" }, @@ -472,7 +492,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": { "id": "SUo_c6cyTx2Y" }, @@ -486,12 +506,13 @@ }, { "data": { - "text/html": [ - "wandb version 0.18.3 is available! To upgrade, please run:\n", - " $ pip install wandb --upgrade" - ], + "application/vnd.jupyter.widget-view+json": { + "model_id": "76c73572c8c04c85996f111db45c9507", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "" + "VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.01111310427594516, max=1.0)…" ] }, "metadata": {}, @@ -500,7 +521,7 @@ { "data": { "text/html": [ - "Tracking run with wandb version 0.16.6" + "Tracking run with wandb version 0.18.5" ], "text/plain": [ "" @@ -512,7 +533,7 @@ { "data": { "text/html": [ - "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241016_111725-slm0386f" + "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241022_235453-c9lkipbq" ], "text/plain": [ "" @@ -524,7 +545,7 @@ { "data": { "text/html": [ - "Syncing run Token Training to Weights & Biases (docs)
" + "Syncing run Token Training to Weights & Biases (docs)
" ], "text/plain": [ "" @@ -548,7 +569,7 @@ { "data": { "text/html": [ - " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/slm0386f" + " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/c9lkipbq" ], "text/plain": [ "" @@ -560,13 +581,13 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ - "" + "" ] }, - "execution_count": 13, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -587,7 +608,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -610,7 +631,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -661,7 +682,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a1196b0e1600483c8f1c9e065cdb90f5", + "model_id": "cf9c4234e3064e05a1a52dc867a4c4bb", "version_major": 2, "version_minor": 0 }, @@ -671,22 +692,6 @@ }, "metadata": {}, "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "IOPub message rate exceeded.\n", - "The Jupyter server will temporarily stop sending output\n", - "to the client in order to avoid crashing it.\n", - "To change this limit, set the config variable\n", - "`--ServerApp.iopub_msg_rate_limit`.\n", - "\n", - "Current values:\n", - "ServerApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n", - "ServerApp.rate_limit_window=3.0 (secs)\n", - "\n" - ] } ], "source": [ @@ -760,7 +765,7 @@ " actions == generation_config.eos_token_id,\n", " -sequence_compression_loss.unsqueeze(-1),\n", " -token_cost,\n", - " ) * action_mask\n", + " ) * action_mask * 0.01\n", " qs = rewards.flip(dims=[-1]).cumsum(dim=-1).flip(dims=[-1])\n", "\n", " advantage = (qs - values) * action_mask\n", @@ -840,20 +845,20 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ - "compressor.save_pretrained(MODEL_PATH / \"compressor\")" + "compressor.save_pretrained(MODEL_PATH / \"compressor-v2\")" ] }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ - "decompressor.save_pretrained(MODEL_PATH / \"decompressor\")" + "decompressor.save_pretrained(MODEL_PATH / \"decompressor-v2\")" ] }, { @@ -865,20 +870,9 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import torch\n", "import matplotlib.pyplot as plt\n", @@ -909,71 +903,25 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[ 165.1084, -36.0591, -121.1219, ..., 693.7413, 704.1188,\n", - " 714.4963],\n", - " [ 52.5199, -161.4629, -264.1466, ..., 560.4196, 570.7971,\n", - " 581.1746],\n", - " [ 108.7585, -87.1466, -611.3521, ..., 665.0784, 675.4559,\n", - " 685.8333],\n", - " ...,\n", - " [ 141.6855, -90.8539, -191.5150, ..., 620.3885, 630.7659,\n", - " 641.1434],\n", - " [ -97.1033, -232.9352, -222.5577, ..., 698.5034, 708.8810,\n", - " 719.2583],\n", - " [ 129.4216, -67.8324, -597.4383, ..., 678.9921, 689.3696,\n", - " 699.7472]], device='cuda:0', grad_fn=)" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "advantage" ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[-1512.3618, -1300.8169, -1205.3765, ..., -743.8093, -743.8093,\n", - " -743.8093],\n", - " [-1502.4591, -1278.0989, -1165.0376, ..., -713.1734, -713.1734,\n", - " -713.1734],\n", - " [-1512.4761, -1306.1935, -771.6105, ..., -771.6105, -771.6105,\n", - " -771.6105],\n", - " ...,\n", - " [-1500.7911, -1257.8741, -1146.8356, ..., -682.3087, -682.3086,\n", - " -682.3087],\n", - " [-1571.7404, -1425.5309, -1425.5309, ..., -1070.1616, -1070.1617,\n", - " -1070.1616],\n", - " [-1510.2328, -1302.6012, -762.6179, ..., -762.6179, -762.6179,\n", - " -762.6179]], device='cuda:0', grad_fn=)" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "values" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -982,7 +930,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -992,7 +940,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1002,24 +950,9 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "198affb45b4f40b1beb28eb813be0481", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/10000 [00:00)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "advantage" ] }, { "cell_type": "code", - "execution_count": 54, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor(200, device='cuda:1')" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "action_mask.sum()" ] }, { "cell_type": "code", - "execution_count": 55, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[9.2983e-06, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " 2.3842e-07, 9.5367e-07, 2.8610e-06, 8.1062e-06, 1.3590e-05, 2.7775e-05,\n", - " 8.0701e-05, 2.9488e-04, 8.9534e-04, 2.2504e-03, 3.2974e-03, 6.3756e-03,\n", - " 1.6895e-02, 6.8286e-02, 2.1855e-01, 5.3514e-01, 8.1005e-01, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, 9.1202e+01],\n", - " [1.5736e-05, -0.0000e+00, -0.0000e+00, 1.1921e-07, 1.1921e-07, 1.1921e-07,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, 2.3842e-07, 3.5763e-07,\n", - " 7.1526e-07, 2.9802e-06, 1.1206e-05, 3.8861e-05, 8.2132e-05, 2.3815e-04,\n", - " 9.1130e-04, 3.5617e-03, 1.0967e-02, 3.0503e-02, 2.9737e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, 1.0006e+02]], device='cuda:1')" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "action_logits" ] }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(tensor([-1099.6810, -1087.6995, -1076.0786, -1063.6698, -1054.7687, -1046.5447,\n", - " -1037.6260, -1027.8066, -1018.0566, -1007.5678, -995.8646, -985.5587,\n", - " -977.1706, -966.2009, -955.0208, -943.8681, -934.0468, -923.2490,\n", - " -912.6065, -899.9257, -890.4675, -879.4435, -870.5907, -859.1940,\n", - " -845.0573, -835.8955, -825.3179, -813.2614, -802.4627, -791.4663,\n", - " -781.6210, -771.6415, -761.0430, -750.6395, -741.1759, -729.8900,\n", - " -719.4247, -708.3924, -698.3824, -689.5949, -678.8000, -668.8644,\n", - " -657.7481, -646.4171, -636.8819, -628.0941, -618.0164, -608.4584,\n", - " -597.8752, -586.1464, -575.6812, -566.5031, -557.1078, -548.1906,\n", - " -537.7205, -525.3519, -514.1478, -503.8547, -494.7173, -481.8814,\n", - " -471.4543, -462.1197, -451.7022, -438.7026, -427.2851, -417.7741,\n", - " -409.7844, -398.9852, -388.6053, -377.3386, -367.8718, -357.7217,\n", - " -345.6424, -336.0607, -324.9157, -313.4325, -304.9853, -294.3703,\n", - " -284.6585, -274.1472, -264.1192, -253.2724, -243.0500, -233.2437,\n", - " -220.8721, -210.5932, -202.5967, -193.7442, -183.4849, -173.7296,\n", - " -160.4890, -148.3543, -139.0402, -131.2023, -124.4018, -115.6297,\n", - " -103.3717, -93.1214, -84.9352, -70.5845], device='cuda:1',\n", - " grad_fn=),\n", - " tensor([-1083.6101, -1073.2327, -1062.8552, -1052.4777, -1042.1002, -1031.7227,\n", - " -1021.3452, -1010.9678, -1000.5903, -990.2128, -979.8353, -969.4578,\n", - " -959.0803, -948.7029, -938.3254, -927.9479, -917.5704, -907.1929,\n", - " -896.8154, -886.4380, -876.0605, -865.6830, -855.3055, -844.9280,\n", - " -834.5505, -824.1731, -813.7956, -803.4181, -793.0406, -782.6631,\n", - " -772.2856, -761.9081, -751.5307, -741.1532, -730.7757, -720.3983,\n", - " -710.0208, -699.6432, -689.2657, -678.8883, -668.5107, -658.1333,\n", - " -647.7559, -637.3783, -627.0009, -616.6234, -606.2458, -595.8684,\n", - " -585.4909, -575.1134, -564.7360, -554.3585, -543.9810, -533.6035,\n", - " -523.2260, -512.8485, -502.4711, -492.0936, -481.7161, -471.3386,\n", - " -460.9611, -450.5836, -440.2061, -429.8287, -419.4512, -409.0737,\n", - " -398.6962, -388.3187, -377.9413, -367.5638, -357.1863, -346.8088,\n", - " -336.4313, -326.0538, -315.6764, -305.2989, -294.9214, -284.5439,\n", - " -274.1664, -263.7889, -253.4115, -243.0340, -232.6565, -222.2790,\n", - " -211.9015, -201.5240, -191.1465, -180.7691, -170.3916, -160.0141,\n", - " -149.6366, -139.2591, -128.8817, -118.5042, -108.1267, -97.7492,\n", - " -87.3717, -76.9942, -66.6168, -56.2393], device='cuda:1'))" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "values[0], qs[0]" ] }, { "cell_type": "code", - "execution_count": 56, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[[ 42.5565, -7.8072, 29.3323, ..., -32.0589, -33.0385, -35.3182],\n", - " [ 23.7275, -6.8322, 26.1425, ..., -38.0214, -39.0071, -41.5004],\n", - " [ 27.3845, -11.7691, 26.7946, ..., -36.9438, -37.9392, -40.4390],\n", - " ...,\n", - " [ 8.6169, -19.3931, -13.6451, ..., -45.4590, -46.8009, -46.7714],\n", - " [ 9.2576, -19.5066, -13.6655, ..., -45.5242, -46.8551, -46.8182],\n", - " [ 10.3809, -21.2369, -14.6508, ..., -45.2848, -46.5306, -46.4914]],\n", - "\n", - " [[ 37.7327, -5.0951, 26.8845, ..., -32.0686, -33.0935, -35.2686],\n", - " [ 18.1861, -3.8062, 25.1262, ..., -38.5185, -39.5455, -41.9225],\n", - " [ 20.0888, -9.5134, 26.6477, ..., -37.9658, -38.9319, -41.2657],\n", - " ...,\n", - " [ 7.4155, -23.2394, -13.5891, ..., -48.8296, -50.1104, -50.0522],\n", - " [ 7.9775, -23.4906, -13.4194, ..., -48.8065, -50.0781, -50.0124],\n", - " [ 9.0720, -25.4228, -14.5521, ..., -48.0591, -49.2677, -49.1962]]],\n", - " device='cuda:1')" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "action_distributions" ] }, { "cell_type": "code", - "execution_count": 51, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.plot(advantage[0].cpu().detach())" ] From ff061a65489e81646a8749725206c1189aed9725 Mon Sep 17 00:00:00 2001 From: axiom <20.mahdikh.0@gmail.com> Date: Sun, 27 Oct 2024 18:29:46 +0330 Subject: [PATCH 3/8] Ignoring `,env` --- .env | 1 - .gitignore | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 .env diff --git a/.env b/.env deleted file mode 100644 index e747446..0000000 --- a/.env +++ /dev/null @@ -1 +0,0 @@ -WANDB_TOKEN=YOUR_WANDB_TOKEN_HERE diff --git a/.gitignore b/.gitignore index fda2ee4..e9621b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ __pycache__ /data/ .ipynb_checkpoints +.env From 3adb935b5c89cd77bece6fd1406797c78f0a149d Mon Sep 17 00:00:00 2001 From: axiom <20.mahdikh.0@gmail.com> Date: Sun, 27 Oct 2024 18:51:27 +0330 Subject: [PATCH 4/8] Refactor reward scaling --- .gitignore | 4 +- TokenDethcod.ipynb | 518 +++++++++++++++++++++++++++++++++------------ 2 files changed, 380 insertions(+), 142 deletions(-) diff --git a/.gitignore b/.gitignore index e9621b1..f9b0027 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ __pycache__ -/data/ +/data +/dataset +/wandb .ipynb_checkpoints .env diff --git a/TokenDethcod.ipynb b/TokenDethcod.ipynb index af2efde..8495c20 100644 --- a/TokenDethcod.ipynb +++ b/TokenDethcod.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -18,25 +18,7 @@ "outputId": "64d713f1-32ad-4db4-ef37-e338a7a4e841", "scrolled": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Channels:\n", - " - conda-forge\n", - " - defaults\n", - "Platform: linux-64\n", - "Collecting package metadata (repodata.json): done\n", - "Solving environment: done\n", - "\n", - "# All requested packages already installed.\n", - "\n", - "\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], + "outputs": [], "source": [ "%conda install -c conda-forge transformers wandb requests_cache datasets tqdm python-dotenv" ] @@ -52,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -65,7 +47,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Downloading: 100%|████████████████████████████████████████| 36.4M/36.4M [00:00<00:00, 655MB/s]\n", + "Downloading: 100%|████████████████████████████████████████| 36.4M/36.4M [00:00<00:00, 678MB/s]\n", "File downloaded and decompressed successfully.\n" ] } @@ -202,7 +184,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "'== Gestapo counterintelligence =='\n" + "'[[ms:Gua]]'\n" ] } ], @@ -343,7 +325,7 @@ "source": [ "from pathlib import Path\n", "\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", + "device = torch.device(\"cuda:1\" if torch.cuda.is_available() else \"cpu\")\n", "MODEL_PATH = Path(\"./data/models/token-dethcod/a2c-v1\")" ] }, @@ -381,7 +363,6 @@ "if LOAD_LATEST:\n", " compressor = CompressionModel.from_pretrained(MODEL_PATH / \"compressor\").to(device)\n", " decompressor = DecompressionModel.from_pretrained(MODEL_PATH / \"decompressor\").to(device)\n", - "\n", "else:\n", " model_path = \"google-t5/t5-small\"\n", " print(f\"Loading model from {model_path}\")\n", @@ -410,7 +391,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[34m\u001b[1mwandb\u001b[0m: Using wandb-core as the SDK backend. Please refer to https://wandb.me/wandb-core for more information.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33maxiom\u001b[0m (\u001b[33mchihuahuas\u001b[0m). Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n", "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n", "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n", "\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /home/khodabandeh/.netrc\n" @@ -447,32 +428,31 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": { "id": "nbJccLQa_TKV" }, "outputs": [], "source": [ - "COMPRESSOR_LR = 1e-3\n", - "DECOMPRESSOR_LR = 1e-3\n", - "# CRITIC_BIAS_LR = 0.1\n", - "\n", - "# # Create parameter groups\n", - "# param_groups = [\n", - "# {\"params\": [param for name, param in compressor.named_parameters() if name != \"critic_head.bias\"], \"lr\": LR},\n", - "# {\"params\": [compressor.critic_head.bias], \"lr\": CRITIC_BIAS_LR},\n", - "# ]\n", - "\n", - "# # Define optimizer with parameter groups\n", - "# compressor_optimizer = torch.optim.Adam(param_groups)\n", - "\n", - "compressor_optimizer = torch.optim.Adam(compressor.parameters(), lr=COMPRESSOR_LR)\n", + "# TODO: Log these to wandb\n", + "COMPRESSOR_LR = 1e-4\n", + "DECOMPRESSOR_LR = 1e-4\n", + "CRITIC_BIAS_LR = 1e-4\n", + "\n", + "# Create parameter groups\n", + "param_groups = [\n", + " {\"params\": [param for name, param in compressor.named_parameters() if name != \"critic_head.bias\"], \"lr\": COMPRESSOR_LR},\n", + " {\"params\": [compressor.critic_head.bias], \"lr\": CRITIC_BIAS_LR},\n", + "]\n", + "\n", + "# Define optimizer with parameter groups\n", + "compressor_optimizer = torch.optim.Adam(param_groups)\n", "decompressor_optimizer = torch.optim.Adam(decompressor.parameters(), lr=DECOMPRESSOR_LR)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 15, "metadata": { "id": "zioTdU4gA2J2" }, @@ -481,6 +461,7 @@ "import math\n", "\n", "BATCH_SIZE = 8\n", + "REWARD_SCALING = 0.01\n", "MAX_TOKEN_COST = math.log(compressor.config.vocab_size)\n", "\n", "train_dataset = dataset\n", @@ -492,27 +473,19 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "metadata": { "id": "SUo_c6cyTx2Y" }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33maxiom\u001b[0m (\u001b[33mchihuahuas\u001b[0m). Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n" - ] - }, { "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "76c73572c8c04c85996f111db45c9507", - "version_major": 2, - "version_minor": 0 - }, + "text/html": [ + "wandb version 0.18.3 is available! To upgrade, please run:\n", + " $ pip install wandb --upgrade" + ], "text/plain": [ - "VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.01111310427594516, max=1.0)…" + "" ] }, "metadata": {}, @@ -521,7 +494,7 @@ { "data": { "text/html": [ - "Tracking run with wandb version 0.18.5" + "Tracking run with wandb version 0.16.6" ], "text/plain": [ "" @@ -533,7 +506,7 @@ { "data": { "text/html": [ - "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241022_235453-c9lkipbq" + "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241015_173128-brel1bi5" ], "text/plain": [ "" @@ -545,7 +518,7 @@ { "data": { "text/html": [ - "Syncing run Token Training to Weights & Biases (docs)
" + "Syncing run Token Training to Weights & Biases (docs)
" ], "text/plain": [ "" @@ -569,7 +542,7 @@ { "data": { "text/html": [ - " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/c9lkipbq" + " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/brel1bi5" ], "text/plain": [ "" @@ -581,13 +554,13 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ - "" + "" ] }, - "execution_count": 12, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -601,7 +574,8 @@ " config={\n", " \"compressor_model_config\": compressor.config.to_dict(),\n", " \"decompressor_model_config\": decompressor.config.to_dict(),\n", - " # TODO: Add other parameters\n", + "\n", + " # TODO: Log other parameters\n", " },\n", ")" ] @@ -629,24 +603,6 @@ " return token_cost" ] }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[34m\u001b[1mwandb\u001b[0m: logging graph, to disable use `wandb.watch(log_graph=False)`\n", - "\u001b[34m\u001b[1mwandb\u001b[0m: logging graph, to disable use `wandb.watch(log_graph=False)`\n" - ] - } - ], - "source": [ - "graph = wandb.watch((compressor.critic_head, compressor.lm_head), log_freq=100, log=\"all\", log_graph=True)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -682,7 +638,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cf9c4234e3064e05a1a52dc867a4c4bb", + "model_id": "d35ec9972f2a4f45961ebf5632f25cce", "version_major": 2, "version_minor": 0 }, @@ -692,6 +648,32 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "IOPub message rate exceeded.\n", + "The Jupyter server will temporarily stop sending output\n", + "to the client in order to avoid crashing it.\n", + "To change this limit, set the config variable\n", + "`--ServerApp.iopub_msg_rate_limit`.\n", + "\n", + "Current values:\n", + "ServerApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n", + "ServerApp.rate_limit_window=3.0 (secs)\n", + "\n", + "IOPub message rate exceeded.\n", + "The Jupyter server will temporarily stop sending output\n", + "to the client in order to avoid crashing it.\n", + "To change this limit, set the config variable\n", + "`--ServerApp.iopub_msg_rate_limit`.\n", + "\n", + "Current values:\n", + "ServerApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n", + "ServerApp.rate_limit_window=3.0 (secs)\n", + "\n" + ] } ], "source": [ @@ -732,7 +714,6 @@ " compressed = compressor.generate(input_ids=input_ids, generation_config=generation_config)\n", " decompressed = decompressor.forward(input_ids=compressed.sequences, labels=input_ids)\n", "\n", - " # Force last token to be eos for episodes with no eos (terminated by max_len)\n", " full_episodes = (compressed.sequences != generation_config.eos_token_id).all(dim=-1)\n", " sequences_copy = compressed.sequences.clone()\n", " sequences_copy[..., full_episodes, -1] = generation_config.eos_token_id\n", @@ -765,15 +746,22 @@ " actions == generation_config.eos_token_id,\n", " -sequence_compression_loss.unsqueeze(-1),\n", " -token_cost,\n", - " ) * action_mask * 0.01\n", + " ) * action_mask * REWARD_SCALING\n", + " # TODO: Implement temporal difference learning\n", " qs = rewards.flip(dims=[-1]).cumsum(dim=-1).flip(dims=[-1])\n", "\n", " advantage = (qs - values) * action_mask\n", - " masked_advantage = advantage[action_mask]\n", - " critic_loss = (masked_advantage * masked_advantage).mean()\n", + " num_actions = action_mask.sum()\n", + " expected_advantage = advantage.sum() / num_actions\n", + " critic_loss = (advantage * advantage).sum() / num_actions\n", "\n", - " compressed_size = (action_mask.sum(dim=-1) - 1) * MAX_TOKEN_COST + sequence_compression_loss\n", - " decompressed_size = ((input_ids != 0).sum(dim=-1) - 1) * MAX_TOKEN_COST\n", + " data_costs = torch.where(\n", + " actions == generation_config.eos_token_id,\n", + " sequence_compression_loss.unsqueeze(-1),\n", + " MAX_TOKEN_COST,\n", + " ) * action_mask\n", + " compressed_size = data_costs.sum(dim=-1)\n", + " decompressed_size = (input_ids != 0).sum(dim=-1) * MAX_TOKEN_COST\n", " compression_ratio = (decompressed_size / compressed_size).mean()\n", "\n", " if step < PRETRAINING_STEPS:\n", @@ -796,7 +784,7 @@ " reduction=\"none\",\n", " ).view(actions.shape)\n", " actor_loss = (action_logits * advantage.detach()).mean()\n", - "\n", + " \n", " compressor_loss = actor_loss + critic_loss\n", "\n", " pbar.set_description(f\"{compression_ratio=:.2f}, {critic_loss=:.2f}, {actor_loss=:.2f}, {decompressor_loss=:.2f}\")\n", @@ -819,9 +807,7 @@ " \"accuracy\": (-sequence_compression_loss).exp().mean(),\n", " \"compressed_size\": compressed_length.float().mean(),\n", " \"compression_ratio\": compression_ratio,\n", - " \"expected_advantage\": masked_advantage.mean(),\n", - " \"advantage_std\": masked_advantage.std(),\n", - " \"advantage\": masked_advantage,\n", + " \"expected_advantage\": expected_advantage,\n", " \"token_cost\": token_cost,\n", " }\n", " )\n" @@ -845,20 +831,32 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'compressor' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[1], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mcompressor\u001b[49m\u001b[38;5;241m.\u001b[39msave_pretrained(MODEL_PATH \u001b[38;5;241m/\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcompressor-v1\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[0;31mNameError\u001b[0m: name 'compressor' is not defined" + ] + } + ], "source": [ - "compressor.save_pretrained(MODEL_PATH / \"compressor-v2\")" + "compressor.save_pretrained(MODEL_PATH / \"compressor-v1\")" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 62, "metadata": {}, "outputs": [], "source": [ - "decompressor.save_pretrained(MODEL_PATH / \"decompressor-v2\")" + "decompressor.save_pretrained(MODEL_PATH / \"decompressor-v1\")" ] }, { @@ -870,15 +868,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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Cwuja9eu0a+//kouLi70888/a6U35Nwaok6dOvTPP//olValUlFUVJSsALN27dpZ0ozq5cuXGv937dqV3rx5I/6d3iLFGJ1ns1vt2rWpTp06OhcpqT8nUkta165d01guXrxIv/32G5UqVUryPK1Zs0ZsmpJaQkICrVmzRmeZmjZtSsWLFydvb29q1qwZnTx5Uudxt2/fngIDA+nChQtkY2NDBw8epHXr1pGPj4/YofZzef/+Pdnb24vn8vLly2RlZSX5FMqQ9HK3MeT9MKRMcmX3ceeVMhmSR067BnOrz9mhnOUusoPzIkWK0IEDByg5OZk8PDzEUShu3LhBjo6OWukdHBzEXtcODg5069YtIkqpwdMVpFpZWcm6OOWOSGGIunXrim2CU/vzzz+pVq1aOre7fv06mZub07///ktERG/fviVra2tZNbwnTpygChUqaK0vWLCgZA3ozp07yd3dXXJfcs9tnTp1tIJYopSmBrqCtb/++otKly5Nf/zxB126dCndx3VKpZLMzMzo7t27epfJENOnT6dNmzaJ/3/33XckCAK5u7tr1M5nhiHXulKppIiICDp16pRezZgePXpEmzdvpkWLFunVRGzq1Km0cuVKrfUrV66k6dOna60fNGiQxtK3b1+qXr06OTg40IABA/Q6D4bau3ev5GdJoVBINtv577//JGuY1q1bR6amptSmTRtasGABzZ8/n9q0aUNmZmZi86m03Nzc6Pz580REZGdnJ/aB2LVrF1WvXl1Ml/acp7dklXXr1lHRokU11pUpU4aWLVuWJenlbiP3/TC0THJl93HnlTIZkkdOuwbzghMnTkiO3paUlJRhM1aW98kOzuV2tjKkQ2Ht2rVpx44depfJ2tpabKvq5uZGly9fJiKiBw8eSHasIyKaMGFCuktaVlZWkgFkRESEzuMgIhoyZAg1a9ZMY1379u2pV69eeh/frVu3yMbGRmu9hYWFeG5Tu3PnjkbHyNTknltdnS+fPn1KpqamOreRekyn63Fd6dKl6ezZs+mWIyQkRGxfnHbISH2GkCxWrBidOXOGiIgOHjxIjo6OdODAAerevbtGx0e1Dx8+0Pv378X/o6KiaN68eXTgwAGdZZR7rcvtOLtq1SoyNzcnW1tb8vT01GjWo6uJmKenp3jcqZ07d07rhzA948aNoyFDhki+lpm+EqndvXuXrK2t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F7Fy4d27dyQIgsaEbqGhoVSkSBHxfxsbG/EznHq0IbX79++Tra2txrrUoz9dunSJevfuTY6OjmRhYUGtW7eW/Px5eXlp7VsXQ8okl9zzRETUuHFjatKkidbNY1aNjGLI/g15L+SSe66McQ0a8v4xltcZNJRicnKy2A5WLTIyUrKWTG5NO1HKDIJSP+537tyRDISl2joSpQTdderU0eeQMlSpUiXJod7GjRtHFSpU0LmdlZWVGHC7uLiIx3/37l1ycnLSSOvn5yf+qDdo0ICGDBlCRCm171LnavXq1enOxJgVDJmi/PDhw2RtbU1lypQhU1NTCggIIEdHR3JwcJB8P8qUKaNzFlmpmdJUKhXNnTuXChUqJNZCFSpUiObPn69zBk99psROO0xlelNp63Lnzh3q27cv1a1bl+rVq0d9+/aVvKkjSpkJ19/fny5evCiW++LFixQQEEDNmjWTPAZdM1+amZnpLNPmzZspMDBQbNceGBhImzdv1pmeKOVHdOvWrbR582a9ZiWVo3DhwmJA7u/vL968hoaGZsm09w0aNKA///yTiIh69epFVapUofXr11OjRo2oSpUqmd6/WpkyZahHjx6Ss/9KDfkqV+r+IUQpn7/U/R1iYmI0+gHUrVuXZs6cSUREgYGBtGbNGo39bdu2TSvIkbqmPn78SGvXrqXatWuTQqEgT09PjddXrVpFQUFBej0hMKRMcsk9T2pz586lIkWKaMyQmpXDFsrdvyHvhVxyz5UxrkFD37/cLj4+njp27EgFCxYkExOTDPuYsS+L7DbnQMqIBWln99Q1896MGTMQHByMWbNmoUuXLuJskLt379Yaak+tXLlyWLx4sdbIFosXL5acTfL48eNabbmBlJEqTp06JZnH06dPMXToUBw5cgTPnj3TmHUSgNZIC2PGjMG3336LBw8eaEycsnHjxnTbm7u5ueH58+fw9PSEp6cnzp07h3LlyiEyMlIrzx9++AFhYWGoVasWRo0ahSZNmmDRokVITk7G3LlztfatHt4sMTERz54905rUqEiRIpJlunjxIrZu3SrZBl49kY1a5cqV8ffff6N///4A/jeT2++//66zneioUaMwZMgQTJw4EXZ2dti+fTsKFCiADh06oHHjxlrpHzx4oHMW2aioKK31giAgJCQEISEhePv2LYCM25HrM2JIZGQk6tWrB29vb71H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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import torch\n", "import matplotlib.pyplot as plt\n", "\n", - "top_token_count = 100\n", - "\n", "# Assuming `action_distributions` is the tensor of shape [100, 32128]\n", "logits = action_distributions[1].detach().cpu() # Ensure it's on the CPU\n", "\n", @@ -886,7 +893,7 @@ "avg_logits = torch.mean(logits, dim=0)\n", "\n", "# Step 2: Get the top 50 tokens based on average logit values\n", - "top_values, top_indices = torch.topk(avg_logits, top_token_count)\n", + "top_values, top_indices = torch.topk(avg_logits, 50)\n", "\n", "# Step 3: Convert the top indices to tokens using the tokenizer\n", "top_tokens = tokenizer.convert_ids_to_tokens(top_indices.numpy())\n", @@ -896,32 +903,14 @@ "plt.imshow(logits[..., top_indices].numpy(), cmap='viridis', aspect='auto', interpolation=\"nearest\")\n", "plt.colorbar(label='Logit Value')\n", "plt.yticks([]) # Hide y-axis as we only have one row\n", - "plt.xticks(range(top_token_count), top_tokens, rotation='vertical')\n", + "plt.xticks(range(50), top_tokens, rotation='vertical')\n", "plt.title('Top 50 Tokens by Average Logit')\n", "plt.show()\n" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "advantage" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "values" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -930,7 +919,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 48, "metadata": {}, "outputs": [], "source": [ @@ -940,7 +929,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": {}, "outputs": [], "source": [ @@ -950,9 +939,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 52, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "198affb45b4f40b1beb28eb813be0481", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/10000 [00:00)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "advantage" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 54, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "tensor(200, device='cuda:1')" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "action_mask.sum()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 55, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[9.2983e-06, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " 2.3842e-07, 9.5367e-07, 2.8610e-06, 8.1062e-06, 1.3590e-05, 2.7775e-05,\n", + " 8.0701e-05, 2.9488e-04, 8.9534e-04, 2.2504e-03, 3.2974e-03, 6.3756e-03,\n", + " 1.6895e-02, 6.8286e-02, 2.1855e-01, 5.3514e-01, 8.1005e-01, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, 9.1202e+01],\n", + " [1.5736e-05, -0.0000e+00, -0.0000e+00, 1.1921e-07, 1.1921e-07, 1.1921e-07,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, 2.3842e-07, 3.5763e-07,\n", + " 7.1526e-07, 2.9802e-06, 1.1206e-05, 3.8861e-05, 8.2132e-05, 2.3815e-04,\n", + " 9.1130e-04, 3.5617e-03, 1.0967e-02, 3.0503e-02, 2.9737e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, 1.0006e+02]], device='cuda:1')" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "action_logits" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(tensor([-1099.6810, -1087.6995, -1076.0786, -1063.6698, -1054.7687, -1046.5447,\n", + " -1037.6260, -1027.8066, -1018.0566, -1007.5678, -995.8646, -985.5587,\n", + " -977.1706, -966.2009, -955.0208, -943.8681, -934.0468, -923.2490,\n", + " -912.6065, -899.9257, -890.4675, -879.4435, -870.5907, -859.1940,\n", + " -845.0573, -835.8955, -825.3179, -813.2614, -802.4627, -791.4663,\n", + " -781.6210, -771.6415, -761.0430, -750.6395, -741.1759, -729.8900,\n", + " -719.4247, -708.3924, -698.3824, -689.5949, -678.8000, -668.8644,\n", + " -657.7481, -646.4171, -636.8819, -628.0941, -618.0164, -608.4584,\n", + " -597.8752, -586.1464, -575.6812, -566.5031, -557.1078, -548.1906,\n", + " -537.7205, -525.3519, -514.1478, -503.8547, -494.7173, -481.8814,\n", + " -471.4543, -462.1197, -451.7022, -438.7026, -427.2851, -417.7741,\n", + " -409.7844, -398.9852, -388.6053, -377.3386, -367.8718, -357.7217,\n", + " -345.6424, -336.0607, -324.9157, -313.4325, -304.9853, -294.3703,\n", + " -284.6585, -274.1472, -264.1192, -253.2724, -243.0500, -233.2437,\n", + " -220.8721, -210.5932, -202.5967, -193.7442, -183.4849, -173.7296,\n", + " -160.4890, -148.3543, -139.0402, -131.2023, -124.4018, -115.6297,\n", + " -103.3717, -93.1214, -84.9352, -70.5845], device='cuda:1',\n", + " grad_fn=),\n", + " tensor([-1083.6101, -1073.2327, -1062.8552, -1052.4777, -1042.1002, -1031.7227,\n", + " -1021.3452, -1010.9678, -1000.5903, -990.2128, -979.8353, -969.4578,\n", + " -959.0803, -948.7029, -938.3254, -927.9479, -917.5704, -907.1929,\n", + " -896.8154, -886.4380, -876.0605, -865.6830, -855.3055, -844.9280,\n", + " -834.5505, -824.1731, -813.7956, -803.4181, -793.0406, -782.6631,\n", + " -772.2856, -761.9081, -751.5307, -741.1532, -730.7757, -720.3983,\n", + " -710.0208, -699.6432, -689.2657, -678.8883, -668.5107, -658.1333,\n", + " -647.7559, -637.3783, -627.0009, -616.6234, -606.2458, -595.8684,\n", + " -585.4909, -575.1134, -564.7360, -554.3585, -543.9810, -533.6035,\n", + " -523.2260, -512.8485, -502.4711, -492.0936, -481.7161, -471.3386,\n", + " -460.9611, -450.5836, -440.2061, -429.8287, -419.4512, -409.0737,\n", + " -398.6962, -388.3187, -377.9413, -367.5638, -357.1863, -346.8088,\n", + " -336.4313, -326.0538, -315.6764, -305.2989, -294.9214, -284.5439,\n", + " -274.1664, -263.7889, -253.4115, -243.0340, -232.6565, -222.2790,\n", + " -211.9015, -201.5240, -191.1465, -180.7691, -170.3916, -160.0141,\n", + " -149.6366, -139.2591, -128.8817, -118.5042, -108.1267, -97.7492,\n", + " -87.3717, -76.9942, -66.6168, -56.2393], device='cuda:1'))" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "values[0], qs[0]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 56, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[[ 42.5565, -7.8072, 29.3323, ..., -32.0589, -33.0385, -35.3182],\n", + " [ 23.7275, -6.8322, 26.1425, ..., -38.0214, -39.0071, -41.5004],\n", + " [ 27.3845, -11.7691, 26.7946, ..., -36.9438, -37.9392, -40.4390],\n", + " ...,\n", + " [ 8.6169, -19.3931, -13.6451, ..., -45.4590, -46.8009, -46.7714],\n", + " [ 9.2576, -19.5066, -13.6655, ..., -45.5242, -46.8551, -46.8182],\n", + " [ 10.3809, -21.2369, -14.6508, ..., -45.2848, -46.5306, -46.4914]],\n", + "\n", + " [[ 37.7327, -5.0951, 26.8845, ..., -32.0686, -33.0935, -35.2686],\n", + " [ 18.1861, -3.8062, 25.1262, ..., -38.5185, -39.5455, -41.9225],\n", + " [ 20.0888, -9.5134, 26.6477, ..., -37.9658, -38.9319, -41.2657],\n", + " ...,\n", + " [ 7.4155, -23.2394, -13.5891, ..., -48.8296, -50.1104, -50.0522],\n", + " [ 7.9775, -23.4906, -13.4194, ..., -48.8065, -50.0781, -50.0124],\n", + " [ 9.0720, -25.4228, -14.5521, ..., -48.0591, -49.2677, -49.1962]]],\n", + " device='cuda:1')" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "action_distributions" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.plot(advantage[0].cpu().detach())" ] From eb9e6cbb29814da805fe27033db47d2f57024b98 Mon Sep 17 00:00:00 2001 From: axiom <20.mahdikh.0@gmail.com> Date: Sun, 27 Oct 2024 18:55:23 +0330 Subject: [PATCH 5/8] Add notes for future experiments --- TokenDethcod.ipynb | 567 +++++++++++++++++++++------------------------ 1 file changed, 258 insertions(+), 309 deletions(-) diff --git a/TokenDethcod.ipynb b/TokenDethcod.ipynb index 8495c20..4bed7f4 100644 --- a/TokenDethcod.ipynb +++ b/TokenDethcod.ipynb @@ -23,6 +23,52 @@ "%conda install -c conda-forge transformers wandb requests_cache datasets tqdm python-dotenv" ] }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "e-neGcFgTHdu" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33maxiom\u001b[0m (\u001b[33mchihuahuas\u001b[0m). Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /home/khodabandeh/.netrc\n" + ] + } + ], + "source": [ + "import os\n", + "import wandb\n", + "\n", + "try:\n", + " from dotenv import load_dotenv\n", + " # Load environment variables from .env file\n", + " load_dotenv()\n", + "\n", + "except ImportError as e:\n", + " print(f\"Error importing dotenv: {e}\")\n", + "\n", + "\n", + "# Check if running in Colab\n", + "try:\n", + " from google.colab import userdata\n", + " # If running in Colab, use userdata.get to retrieve the token\n", + " wandb.login(key=userdata.get('wandb_token'))\n", + "\n", + "except ImportError:\n", + " # If not in Colab, load the token from the environment variable\n", + " wandb_token = os.getenv('WANDB_TOKEN')\n", + " if wandb_token:\n", + " wandb.login(key=wandb_token)\n", + " else:\n", + " print(\"W&B token not found in environment variable. Please set WANDB_TOKEN in your environment.\")\n" + ] + }, { "cell_type": "markdown", "metadata": { @@ -34,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -47,7 +93,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Downloading: 100%|████████████████████████████████████████| 36.4M/36.4M [00:00<00:00, 678MB/s]\n", + "Downloading: 100%|███████████████████████████████████████| 36.4M/36.4M [00:00<00:00, 657MB/s]\n", "File downloaded and decompressed successfully.\n" ] } @@ -111,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "id": "BF26H2PapAjj" }, @@ -125,7 +171,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -143,7 +189,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": { "id": "dZXhU0AfhrTJ" }, @@ -171,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -184,7 +230,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "'[[ms:Gua]]'\n" + "'|-'\n" ] } ], @@ -205,7 +251,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": { "id": "fGqAZ6NY-FrU" }, @@ -232,6 +278,7 @@ " def __init__(self, config):\n", " super().__init__(config)\n", "\n", + " # Increase the critic_head model size\n", " self.critic_head = nn.Linear(config.d_model, 1)\n", " self.critic_head.weight.data.normal_(mean=0.0, std=(1 / config.d_model))\n", " self.critic_head.bias.data.zero_()\n", @@ -275,6 +322,7 @@ " )\n", "\n", " if output.decoder_hidden_states is not None:\n", + " # TODO: Check if this is actually last layer\n", " last_hidden_state = output.decoder_hidden_states[-1]\n", " value_predictions = self.critic_head(last_hidden_state).squeeze(-1)\n", " else:\n", @@ -295,7 +343,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": { "id": "XMVtNmiu-30c" }, @@ -313,7 +361,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -325,7 +373,7 @@ "source": [ "from pathlib import Path\n", "\n", - "device = torch.device(\"cuda:1\" if torch.cuda.is_available() else \"cpu\")\n", + "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", "MODEL_PATH = Path(\"./data/models/token-dethcod/a2c-v1\")" ] }, @@ -338,7 +386,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -363,6 +411,7 @@ "if LOAD_LATEST:\n", " compressor = CompressionModel.from_pretrained(MODEL_PATH / \"compressor\").to(device)\n", " decompressor = DecompressionModel.from_pretrained(MODEL_PATH / \"decompressor\").to(device)\n", + "\n", "else:\n", " model_path = \"google-t5/t5-small\"\n", " print(f\"Loading model from {model_path}\")\n", @@ -380,97 +429,6 @@ "## Train" ] }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "id": "e-neGcFgTHdu" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33maxiom\u001b[0m (\u001b[33mchihuahuas\u001b[0m). Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n", - "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n", - "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n", - "\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /home/khodabandeh/.netrc\n" - ] - } - ], - "source": [ - "import os\n", - "import wandb\n", - "\n", - "try:\n", - " from dotenv import load_dotenv\n", - " # Load environment variables from .env file\n", - " load_dotenv()\n", - "\n", - "except ImportError as e:\n", - " print(f\"Error importing dotenv: {e}\")\n", - "\n", - "\n", - "# Check if running in Colab\n", - "try:\n", - " from google.colab import userdata\n", - " # If running in Colab, use userdata.get to retrieve the token\n", - " wandb.login(key=userdata.get('wandb_token'))\n", - "\n", - "except ImportError:\n", - " # If not in Colab, load the token from the environment variable\n", - " wandb_token = os.getenv('WANDB_TOKEN')\n", - " if wandb_token:\n", - " wandb.login(key=wandb_token, relogin=True)\n", - " else:\n", - " print(\"W&B token not found in environment variable. Please set WANDB_TOKEN in your environment.\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "id": "nbJccLQa_TKV" - }, - "outputs": [], - "source": [ - "# TODO: Log these to wandb\n", - "COMPRESSOR_LR = 1e-4\n", - "DECOMPRESSOR_LR = 1e-4\n", - "CRITIC_BIAS_LR = 1e-4\n", - "\n", - "# Create parameter groups\n", - "param_groups = [\n", - " {\"params\": [param for name, param in compressor.named_parameters() if name != \"critic_head.bias\"], \"lr\": COMPRESSOR_LR},\n", - " {\"params\": [compressor.critic_head.bias], \"lr\": CRITIC_BIAS_LR},\n", - "]\n", - "\n", - "# Define optimizer with parameter groups\n", - "compressor_optimizer = torch.optim.Adam(param_groups)\n", - "decompressor_optimizer = torch.optim.Adam(decompressor.parameters(), lr=DECOMPRESSOR_LR)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "id": "zioTdU4gA2J2" - }, - "outputs": [], - "source": [ - "import math\n", - "\n", - "BATCH_SIZE = 8\n", - "REWARD_SCALING = 0.01\n", - "MAX_TOKEN_COST = math.log(compressor.config.vocab_size)\n", - "\n", - "train_dataset = dataset\n", - "data_loader = torch.utils.data.DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)\n", - "\n", - "SCHEDULING_STEPS = len(data_loader) * 1.0e-2 # Schedule over 30% of an epoch\n", - "PRETRAINING_STEPS = len(data_loader) * 2.0e-2 # Schedule over 10% of an epoch" - ] - }, { "cell_type": "code", "execution_count": 10, @@ -506,7 +464,7 @@ { "data": { "text/html": [ - "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241015_173128-brel1bi5" + "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241011_212831-vn3qp0iz" ], "text/plain": [ "" @@ -518,7 +476,7 @@ { "data": { "text/html": [ - "Syncing run Token Training to Weights & Biases (docs)
" + "Syncing run Token Training to Weights & Biases (docs)
" ], "text/plain": [ "" @@ -542,7 +500,7 @@ { "data": { "text/html": [ - " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/brel1bi5" + " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/vn3qp0iz" ], "text/plain": [ "" @@ -554,10 +512,10 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -574,12 +532,45 @@ " config={\n", " \"compressor_model_config\": compressor.config.to_dict(),\n", " \"decompressor_model_config\": decompressor.config.to_dict(),\n", - "\n", - " # TODO: Log other parameters\n", " },\n", ")" ] }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "id": "nbJccLQa_TKV" + }, + "outputs": [], + "source": [ + "LR = 1e-5\n", + "\n", + "compressor_optimizer = torch.optim.Adam(compressor.parameters(), lr=LR)\n", + "decompressor_optimizer = torch.optim.Adam(decompressor.parameters(), lr=LR)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "id": "zioTdU4gA2J2" + }, + "outputs": [], + "source": [ + "import math\n", + "\n", + "BATCH_SIZE = 8\n", + "REWARD_SCALING = 0.01\n", + "MAX_TOKEN_COST = math.log(compressor.config.vocab_size)\n", + "\n", + "train_dataset = dataset\n", + "data_loader = torch.utils.data.DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)\n", + "\n", + "SCHEDULING_STEPS = len(data_loader) * 1.0e-2 # Schedule over 1% of an epoch\n", + "PRETRAINING_STEPS = len(data_loader) * 2.0e-2 # Schedule over 2% of an epoch" + ] + }, { "cell_type": "code", "execution_count": 13, @@ -638,7 +629,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d35ec9972f2a4f45961ebf5632f25cce", + "model_id": "883c721dc7c74059a7e1097b8a061ff0", "version_major": 2, "version_minor": 0 }, @@ -648,32 +639,6 @@ }, "metadata": {}, "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "IOPub message rate exceeded.\n", - "The Jupyter server will temporarily stop sending output\n", - "to the client in order to avoid crashing it.\n", - "To change this limit, set the config variable\n", - "`--ServerApp.iopub_msg_rate_limit`.\n", - "\n", - "Current values:\n", - "ServerApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n", - "ServerApp.rate_limit_window=3.0 (secs)\n", - "\n", - "IOPub message rate exceeded.\n", - "The Jupyter server will temporarily stop sending output\n", - "to the client in order to avoid crashing it.\n", - "To change this limit, set the config variable\n", - "`--ServerApp.iopub_msg_rate_limit`.\n", - "\n", - "Current values:\n", - "ServerApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n", - "ServerApp.rate_limit_window=3.0 (secs)\n", - "\n" - ] } ], "source": [ @@ -726,7 +691,6 @@ " # (L, B, V)\n", " # (B, L, V)\n", " action_distributions = torch.stack(compressed.logits).transpose(0, 1)\n", - " # TODO: Give the `actions` as decoder_input_ids instead\n", " values = compressor.forward(input_ids=input_ids, decoder_input_ids=compressed.sequences).value_predictions[..., :-1]\n", " action_mask = actions != generation_config.pad_token_id\n", " is_pad = actions == generation_config.pad_token_id\n", @@ -784,7 +748,7 @@ " reduction=\"none\",\n", " ).view(actions.shape)\n", " actor_loss = (action_logits * advantage.detach()).mean()\n", - " \n", + "\n", " compressor_loss = actor_loss + critic_loss\n", "\n", " pbar.set_description(f\"{compression_ratio=:.2f}, {critic_loss=:.2f}, {actor_loss=:.2f}, {decompressor_loss=:.2f}\")\n", @@ -815,9 +779,85 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error in callback > (for pre_run_cell), with arguments args (,),kwargs {}:\n" + ] + }, + { + "ename": "BrokenPipeError", + "evalue": "[Errno 32] Broken pipe", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mBrokenPipeError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/wandb_init.py:438\u001b[0m, in \u001b[0;36m_WandbInit._resume_backend\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 436\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbackend \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbackend\u001b[38;5;241m.\u001b[39minterface \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 437\u001b[0m logger\u001b[38;5;241m.\u001b[39minfo(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mresuming backend\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[0;32m--> 438\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackend\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minterface\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpublish_resume\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/interface/interface.py:690\u001b[0m, in \u001b[0;36mInterfaceBase.publish_resume\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 688\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpublish_resume\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 689\u001b[0m resume \u001b[38;5;241m=\u001b[39m pb\u001b[38;5;241m.\u001b[39mResumeRequest()\n\u001b[0;32m--> 690\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_publish_resume\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresume\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/interface/interface_shared.py:361\u001b[0m, in \u001b[0;36mInterfaceShared._publish_resume\u001b[0;34m(self, resume)\u001b[0m\n\u001b[1;32m 359\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_publish_resume\u001b[39m(\u001b[38;5;28mself\u001b[39m, resume: pb\u001b[38;5;241m.\u001b[39mResumeRequest) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 360\u001b[0m rec \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_make_request(resume\u001b[38;5;241m=\u001b[39mresume)\n\u001b[0;32m--> 361\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_publish\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrec\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/interface/interface_sock.py:51\u001b[0m, in \u001b[0;36mInterfaceSock._publish\u001b[0;34m(self, record, local)\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_publish\u001b[39m(\u001b[38;5;28mself\u001b[39m, record: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpb.Record\u001b[39m\u001b[38;5;124m\"\u001b[39m, local: Optional[\u001b[38;5;28mbool\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_assign(record)\n\u001b[0;32m---> 51\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sock_client\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend_record_publish\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrecord\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/lib/sock_client.py:221\u001b[0m, in \u001b[0;36mSockClient.send_record_publish\u001b[0;34m(self, record)\u001b[0m\n\u001b[1;32m 219\u001b[0m server_req \u001b[38;5;241m=\u001b[39m spb\u001b[38;5;241m.\u001b[39mServerRequest()\n\u001b[1;32m 220\u001b[0m server_req\u001b[38;5;241m.\u001b[39mrecord_publish\u001b[38;5;241m.\u001b[39mCopyFrom(record)\n\u001b[0;32m--> 221\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend_server_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mserver_req\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/lib/sock_client.py:155\u001b[0m, in \u001b[0;36mSockClient.send_server_request\u001b[0;34m(self, msg)\u001b[0m\n\u001b[1;32m 154\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msend_server_request\u001b[39m(\u001b[38;5;28mself\u001b[39m, msg: Any) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 155\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_send_message\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmsg\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/lib/sock_client.py:152\u001b[0m, in \u001b[0;36mSockClient._send_message\u001b[0;34m(self, msg)\u001b[0m\n\u001b[1;32m 150\u001b[0m header \u001b[38;5;241m=\u001b[39m struct\u001b[38;5;241m.\u001b[39mpack(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m 152\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sendall_with_error_handle\u001b[49m\u001b[43m(\u001b[49m\u001b[43mheader\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/lib/sock_client.py:130\u001b[0m, in \u001b[0;36mSockClient._sendall_with_error_handle\u001b[0;34m(self, data)\u001b[0m\n\u001b[1;32m 128\u001b[0m start_time \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mmonotonic()\n\u001b[1;32m 129\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 130\u001b[0m sent \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sock\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 131\u001b[0m \u001b[38;5;66;03m# sent equal to 0 indicates a closed socket\u001b[39;00m\n\u001b[1;32m 132\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m sent \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n", + "\u001b[0;31mBrokenPipeError\u001b[0m: [Errno 32] Broken pipe" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "KeyboardInterrupt\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error in callback > (for post_run_cell), with arguments args ( result=None>,),kwargs {}:\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/wandb_init.py:429\u001b[0m, in \u001b[0;36m_WandbInit._pause_backend\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 427\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnotebook\u001b[38;5;241m.\u001b[39msave_ipynb(): \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[1;32m 428\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrun \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m--> 429\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlog_code\u001b[49m\u001b[43m(\u001b[49m\u001b[43mroot\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 430\u001b[0m logger\u001b[38;5;241m.\u001b[39minfo(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msaved code: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, res) \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[1;32m 431\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbackend\u001b[38;5;241m.\u001b[39minterface \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/wandb_run.py:371\u001b[0m, in \u001b[0;36m_run_decorator._noop_on_finish..decorator_fn..wrapper_fn\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 368\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 369\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper_fn\u001b[39m(\u001b[38;5;28mself\u001b[39m: Type[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRun\u001b[39m\u001b[38;5;124m\"\u001b[39m], \u001b[38;5;241m*\u001b[39margs: Any, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 370\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_is_finished\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[0;32m--> 371\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 373\u001b[0m default_message \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 374\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRun (\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mid\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m) is finished. The call to `\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m` will be ignored. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 375\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPlease make sure that you are using an active run.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 376\u001b[0m )\n\u001b[1;32m 377\u001b[0m resolved_message \u001b[38;5;241m=\u001b[39m message \u001b[38;5;129;01mor\u001b[39;00m default_message\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/wandb_run.py:361\u001b[0m, in \u001b[0;36m_run_decorator._attach..wrapper\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 359\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n\u001b[1;32m 360\u001b[0m \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39m_is_attaching \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m--> 361\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/wandb_run.py:1184\u001b[0m, in \u001b[0;36mRun.log_code\u001b[0;34m(self, root, name, include_fn, exclude_fn)\u001b[0m\n\u001b[1;32m 1179\u001b[0m wandb\u001b[38;5;241m.\u001b[39mtermwarn(\n\u001b[1;32m 1180\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo relevant files were detected in the specified directory. No code will be logged to your run.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1181\u001b[0m )\n\u001b[1;32m 1182\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m-> 1184\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_log_artifact\u001b[49m\u001b[43m(\u001b[49m\u001b[43mart\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/wandb_run.py:3111\u001b[0m, in \u001b[0;36mRun._log_artifact\u001b[0;34m(self, artifact_or_path, name, type, aliases, distributed_id, finalize, is_user_created, use_after_commit)\u001b[0m\n\u001b[1;32m 3107\u001b[0m artifact, aliases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_prepare_artifact(\n\u001b[1;32m 3108\u001b[0m artifact_or_path, name, \u001b[38;5;28mtype\u001b[39m, aliases\n\u001b[1;32m 3109\u001b[0m )\n\u001b[1;32m 3110\u001b[0m artifact\u001b[38;5;241m.\u001b[39mdistributed_id \u001b[38;5;241m=\u001b[39m distributed_id\n\u001b[0;32m-> 3111\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_assert_can_log_artifact\u001b[49m\u001b[43m(\u001b[49m\u001b[43martifact\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3112\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backend \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backend\u001b[38;5;241m.\u001b[39minterface:\n\u001b[1;32m 3113\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_settings\u001b[38;5;241m.\u001b[39m_offline:\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/wandb_run.py:3159\u001b[0m, in \u001b[0;36mRun._assert_can_log_artifact\u001b[0;34m(self, artifact)\u001b[0m\n\u001b[1;32m 3157\u001b[0m entity \u001b[38;5;241m=\u001b[39m public_api\u001b[38;5;241m.\u001b[39msettings[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mentity\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 3158\u001b[0m project \u001b[38;5;241m=\u001b[39m public_api\u001b[38;5;241m.\u001b[39msettings[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mproject\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[0;32m-> 3159\u001b[0m expected_type \u001b[38;5;241m=\u001b[39m \u001b[43mArtifact\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_expected_type\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 3160\u001b[0m \u001b[43m \u001b[49m\u001b[43mentity\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mproject\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43martifact\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpublic_api\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mclient\u001b[49m\n\u001b[1;32m 3161\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3162\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m requests\u001b[38;5;241m.\u001b[39mexceptions\u001b[38;5;241m.\u001b[39mRequestException:\n\u001b[1;32m 3163\u001b[0m \u001b[38;5;66;03m# Just return early if there is a network error. This is\u001b[39;00m\n\u001b[1;32m 3164\u001b[0m \u001b[38;5;66;03m# ok, as this function is intended to help catch an invalid\u001b[39;00m\n\u001b[1;32m 3165\u001b[0m \u001b[38;5;66;03m# type early, but not a hard requirement for valid operation.\u001b[39;00m\n\u001b[1;32m 3166\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/artifacts/artifact.py:2203\u001b[0m, in \u001b[0;36mArtifact._expected_type\u001b[0;34m(entity_name, project_name, name, client)\u001b[0m\n\u001b[1;32m 2201\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m:\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m name:\n\u001b[1;32m 2202\u001b[0m name \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m:latest\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m-> 2203\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2204\u001b[0m \u001b[43m \u001b[49m\u001b[43mquery\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2205\u001b[0m \u001b[43m \u001b[49m\u001b[43mvariable_values\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m{\u001b[49m\n\u001b[1;32m 2206\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mentityName\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mentity_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2207\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mprojectName\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mproject_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2208\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mname\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2209\u001b[0m \u001b[43m \u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2210\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2211\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (\n\u001b[1;32m 2212\u001b[0m ((response\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mproject\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m {})\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124martifact\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m {})\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124martifactType\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 2213\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m {}\n\u001b[1;32m 2214\u001b[0m )\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/lib/retry.py:212\u001b[0m, in \u001b[0;36mretriable..decorator..wrapped_fn\u001b[0;34m(*args, **kargs)\u001b[0m\n\u001b[1;32m 210\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(fn)\n\u001b[1;32m 211\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapped_fn\u001b[39m(\u001b[38;5;241m*\u001b[39margs: Any, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkargs: Any) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[0;32m--> 212\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mretrier\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/lib/retry.py:131\u001b[0m, in \u001b[0;36mRetry.__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 129\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 130\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 131\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_fn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 132\u001b[0m \u001b[38;5;66;03m# Only print resolved attempts once every minute\u001b[39;00m\n\u001b[1;32m 133\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_num_iter \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m now \u001b[38;5;241m-\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_last_print \u001b[38;5;241m>\u001b[39m datetime\u001b[38;5;241m.\u001b[39mtimedelta(\n\u001b[1;32m 134\u001b[0m minutes\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m\n\u001b[1;32m 135\u001b[0m ):\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/apis/public/api.py:73\u001b[0m, in \u001b[0;36mRetryingClient.execute\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[38;5;129m@retry\u001b[39m\u001b[38;5;241m.\u001b[39mretriable(\n\u001b[1;32m 67\u001b[0m retry_timedelta\u001b[38;5;241m=\u001b[39mRETRY_TIMEDELTA,\n\u001b[1;32m 68\u001b[0m check_retry_fn\u001b[38;5;241m=\u001b[39mutil\u001b[38;5;241m.\u001b[39mno_retry_auth,\n\u001b[1;32m 69\u001b[0m retryable_exceptions\u001b[38;5;241m=\u001b[39m(RetryError, requests\u001b[38;5;241m.\u001b[39mRequestException),\n\u001b[1;32m 70\u001b[0m )\n\u001b[1;32m 71\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mexecute\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 72\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_client\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 74\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m requests\u001b[38;5;241m.\u001b[39mexceptions\u001b[38;5;241m.\u001b[39mReadTimeout:\n\u001b[1;32m 75\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m kwargs:\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/vendor/gql-0.2.0/wandb_gql/client.py:52\u001b[0m, in \u001b[0;36mClient.execute\u001b[0;34m(self, document, *args, **kwargs)\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mschema:\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvalidate(document)\n\u001b[0;32m---> 52\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_result\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdocument\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 53\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result\u001b[38;5;241m.\u001b[39merrors:\n\u001b[1;32m 54\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m(\u001b[38;5;28mstr\u001b[39m(result\u001b[38;5;241m.\u001b[39merrors[\u001b[38;5;241m0\u001b[39m]))\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/vendor/gql-0.2.0/wandb_gql/client.py:60\u001b[0m, in \u001b[0;36mClient._get_result\u001b[0;34m(self, document, *args, **kwargs)\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_result\u001b[39m(\u001b[38;5;28mself\u001b[39m, document, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 59\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mretries:\n\u001b[0;32m---> 60\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransport\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdocument\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 62\u001b[0m last_exception \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 63\u001b[0m retries_count \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/wandb/sdk/lib/gql_request.py:58\u001b[0m, in \u001b[0;36mGraphQLSession.execute\u001b[0;34m(self, document, variable_values, timeout)\u001b[0m\n\u001b[1;32m 51\u001b[0m data_key \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mjson\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39muse_json \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdata\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 52\u001b[0m post_args \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 53\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mheaders\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheaders,\n\u001b[1;32m 54\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcookies\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcookies,\n\u001b[1;32m 55\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdefault_timeout,\n\u001b[1;32m 56\u001b[0m data_key: payload,\n\u001b[1;32m 57\u001b[0m }\n\u001b[0;32m---> 58\u001b[0m request \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpost\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpost_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 59\u001b[0m request\u001b[38;5;241m.\u001b[39mraise_for_status()\n\u001b[1;32m 61\u001b[0m result \u001b[38;5;241m=\u001b[39m request\u001b[38;5;241m.\u001b[39mjson()\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/requests/sessions.py:637\u001b[0m, in \u001b[0;36mSession.post\u001b[0;34m(self, url, data, json, **kwargs)\u001b[0m\n\u001b[1;32m 626\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpost\u001b[39m(\u001b[38;5;28mself\u001b[39m, url, data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, json\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 627\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a POST request. Returns :class:`Response` object.\u001b[39;00m\n\u001b[1;32m 628\u001b[0m \n\u001b[1;32m 629\u001b[0m \u001b[38;5;124;03m :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 634\u001b[0m \u001b[38;5;124;03m :rtype: requests.Response\u001b[39;00m\n\u001b[1;32m 635\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 637\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mPOST\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjson\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mjson\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/requests/sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 585\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[1;32m 586\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[1;32m 587\u001b[0m }\n\u001b[1;32m 588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[0;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/requests/sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[1;32m 702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[0;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[1;32m 706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/requests/adapters.py:667\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 664\u001b[0m timeout \u001b[38;5;241m=\u001b[39m TimeoutSauce(connect\u001b[38;5;241m=\u001b[39mtimeout, read\u001b[38;5;241m=\u001b[39mtimeout)\n\u001b[1;32m 666\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 667\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 668\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 669\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 670\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 671\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 672\u001b[0m \u001b[43m \u001b[49m\u001b[43mredirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 673\u001b[0m \u001b[43m \u001b[49m\u001b[43massert_same_host\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 674\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 675\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 676\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_retries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 677\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 678\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 679\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 681\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[1;32m 682\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(err, request\u001b[38;5;241m=\u001b[39mrequest)\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/urllib3/connectionpool.py:793\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 790\u001b[0m response_conn \u001b[38;5;241m=\u001b[39m conn \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m release_conn \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 792\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[0;32m--> 793\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 794\u001b[0m \u001b[43m \u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 795\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 796\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 797\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 798\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 799\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 800\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 801\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 802\u001b[0m \u001b[43m \u001b[49m\u001b[43mresponse_conn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresponse_conn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 803\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 804\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 805\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mresponse_kw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 806\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 808\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n\u001b[1;32m 809\u001b[0m clean_exit \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/urllib3/connectionpool.py:467\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 464\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 465\u001b[0m \u001b[38;5;66;03m# Trigger any extra validation we need to do.\u001b[39;00m\n\u001b[1;32m 466\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 467\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 468\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (SocketTimeout, BaseSSLError) \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 469\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_raise_timeout(err\u001b[38;5;241m=\u001b[39me, url\u001b[38;5;241m=\u001b[39murl, timeout_value\u001b[38;5;241m=\u001b[39mconn\u001b[38;5;241m.\u001b[39mtimeout)\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/urllib3/connectionpool.py:1099\u001b[0m, in \u001b[0;36mHTTPSConnectionPool._validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m 1097\u001b[0m \u001b[38;5;66;03m# Force connect early to allow us to validate the connection.\u001b[39;00m\n\u001b[1;32m 1098\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mis_closed:\n\u001b[0;32m-> 1099\u001b[0m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1101\u001b[0m \u001b[38;5;66;03m# TODO revise this, see https://github.com/urllib3/urllib3/issues/2791\u001b[39;00m\n\u001b[1;32m 1102\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mis_verified \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mproxy_is_verified:\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/urllib3/connection.py:616\u001b[0m, in \u001b[0;36mHTTPSConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 614\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mconnect\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 615\u001b[0m sock: socket\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;241m|\u001b[39m ssl\u001b[38;5;241m.\u001b[39mSSLSocket\n\u001b[0;32m--> 616\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;241m=\u001b[39m sock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_new_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 617\u001b[0m server_hostname: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost\n\u001b[1;32m 618\u001b[0m tls_in_tls \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/urllib3/connection.py:198\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 193\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Establish a socket connection and set nodelay settings on it.\u001b[39;00m\n\u001b[1;32m 194\u001b[0m \n\u001b[1;32m 195\u001b[0m \u001b[38;5;124;03m:return: New socket connection.\u001b[39;00m\n\u001b[1;32m 196\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 197\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 198\u001b[0m sock \u001b[38;5;241m=\u001b[39m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_connection\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 199\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dns_host\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mport\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 200\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 201\u001b[0m \u001b[43m \u001b[49m\u001b[43msource_address\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msource_address\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 202\u001b[0m \u001b[43m \u001b[49m\u001b[43msocket_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msocket_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 203\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 205\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NameResolutionError(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost, \u001b[38;5;28mself\u001b[39m, e) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/site-packages/urllib3/util/connection.py:60\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mUnicodeError\u001b[39;00m:\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LocationParseError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mhost\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, label empty or too long\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m---> 60\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSOCK_STREAM\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 61\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n\u001b[1;32m 62\u001b[0m sock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.12/socket.py:963\u001b[0m, in \u001b[0;36mgetaddrinfo\u001b[0;34m(host, port, family, type, proto, flags)\u001b[0m\n\u001b[1;32m 960\u001b[0m \u001b[38;5;66;03m# We override this function since we want to translate the numeric family\u001b[39;00m\n\u001b[1;32m 961\u001b[0m \u001b[38;5;66;03m# and socket type values to enum constants.\u001b[39;00m\n\u001b[1;32m 962\u001b[0m addrlist \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 963\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43m_socket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mproto\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 964\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n\u001b[1;32m 965\u001b[0m addrlist\u001b[38;5;241m.\u001b[39mappend((_intenum_converter(af, AddressFamily),\n\u001b[1;32m 966\u001b[0m _intenum_converter(socktype, SocketKind),\n\u001b[1;32m 967\u001b[0m proto, canonname, sa))\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], "source": [ "wandb.finish()" ] @@ -831,23 +871,11 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 61, "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'compressor' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[1], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mcompressor\u001b[49m\u001b[38;5;241m.\u001b[39msave_pretrained(MODEL_PATH \u001b[38;5;241m/\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcompressor-v1\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[0;31mNameError\u001b[0m: name 'compressor' is not defined" - ] - } - ], + "outputs": [], "source": [ - "compressor.save_pretrained(MODEL_PATH / \"compressor-v1\")" + "compressor.save_pretrained(MODEL_PATH / \"compressor\")" ] }, { @@ -856,7 +884,7 @@ "metadata": {}, "outputs": [], "source": [ - "decompressor.save_pretrained(MODEL_PATH / \"decompressor-v1\")" + "decompressor.save_pretrained(MODEL_PATH / \"decompressor\")" ] }, { @@ -866,6 +894,36 @@ "## Playground" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "token_cost" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor(0.4424, device='cuda:1', grad_fn=)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "super(CompressionModel, compressor).forward(input_ids=input_ids, labels=input_ids).loss" + ] + }, { "cell_type": "code", "execution_count": 21, @@ -910,165 +968,56 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "val_tmp = values.detach()" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [], - "source": [ - "bias = nn.Parameter(torch.tensor(0.0, device=device))\n", - "optim_tmp = torch.optim.Adam(params=[bias])" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [], - "source": [ - "# optim_tmp.param_groups[0]['betas'] = (0.99, 0.5)\n", - "optim_tmp.param_groups[0]['lr'] = 0.1" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "198affb45b4f40b1beb28eb813be0481", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/10000 [00:00)" + "tensor([[ 1.6071e+01, 1.4467e+01, 1.3223e+01, 1.1192e+01, 1.2668e+01,\n", + " 1.4822e+01, 1.6281e+01, 1.6839e+01, 1.7466e+01, 1.7355e+01,\n", + " 1.6029e+01, 1.6101e+01, 1.8090e+01, 1.7498e+01, 1.6695e+01,\n", + " 1.5920e+01, 1.6476e+01, 1.6056e+01, 1.5791e+01, 1.3488e+01,\n", + " 1.4407e+01, 1.3761e+01, 1.5285e+01, 1.4266e+01, 1.0507e+01,\n", + " 1.1722e+01, 1.1522e+01, 9.8433e+00, 9.4221e+00, 8.8032e+00,\n", + " 9.3354e+00, 9.7333e+00, 9.5123e+00, 9.4863e+00, 1.0400e+01,\n", + " 9.4918e+00, 9.4040e+00, 8.7492e+00, 9.1167e+00, 1.0707e+01,\n", + " 1.0289e+01, 1.0731e+01, 9.9922e+00, 9.0388e+00, 9.8810e+00,\n", + " 1.1471e+01, 1.1771e+01, 1.2590e+01, 1.2384e+01, 1.1033e+01,\n", + " 1.0945e+01, 1.2145e+01, 1.3127e+01, 1.4587e+01, 1.4495e+01,\n", + " 1.2503e+01, 1.1677e+01, 1.1761e+01, 1.3001e+01, 1.0543e+01,\n", + " 1.0493e+01, 1.1536e+01, 1.1496e+01, 8.8739e+00, 7.8339e+00,\n", + " 8.7004e+00, 1.1088e+01, 1.0666e+01, 1.0664e+01, 9.7748e+00,\n", + " 1.0686e+01, 1.0913e+01, 9.2111e+00, 1.0007e+01, 9.2393e+00,\n", + " 8.1336e+00, 1.0064e+01, 9.8264e+00, 1.0492e+01, 1.0358e+01,\n", + " 1.0708e+01, 1.0238e+01, 1.0393e+01, 1.0965e+01, 8.9705e+00,\n", + " 9.0692e+00, 1.1450e+01, 1.2975e+01, 1.3093e+01, 1.3715e+01,\n", + " 1.0852e+01, 9.0952e+00, 1.0159e+01, 1.2698e+01, 1.6275e+01,\n", + " 1.7880e+01, 1.6000e+01, 1.6127e+01, 1.8318e+01, 1.4345e+01],\n", + " [ 4.7776e+00, 4.6696e+00, 4.9904e+00, 5.6971e+00, 5.4415e+00,\n", + " 5.6642e+00, 5.4412e+00, 5.3013e+00, 5.2213e+00, 5.1610e+00,\n", + " 4.3859e+00, 5.8347e+00, 5.7007e+00, 5.2368e+00, 5.4046e+00,\n", + " 4.8227e+00, 5.7546e+00, 5.3164e+00, 5.4110e+00, 4.2681e+00,\n", + " 5.3522e+00, 4.5735e+00, 5.8034e+00, 4.6503e+00, 2.3264e+00,\n", + " 3.9516e+00, 2.9630e+00, 1.2419e+00, 1.8958e+00, 1.3071e+00,\n", + " 1.4512e+00, 1.2156e+00, 1.0171e+00, 1.0587e+00, 2.2634e+00,\n", + " 1.5411e+00, 1.5091e+00, 6.8182e-01, 4.2712e-01, 1.6315e+00,\n", + " 1.1328e+00, 1.5527e+00, 1.8243e+00, 1.0154e+00, 1.1656e+00,\n", + " 2.5466e+00, 2.0044e+00, -3.0817e-01, -6.0510e-01, -8.5626e-01,\n", + " -2.7386e-01, 1.5527e+00, 6.2271e-01, 1.0783e+00, 1.4265e+00,\n", + " 1.1649e+00, 2.7072e-01, 1.0890e+00, 3.1029e+00, 9.1647e-01,\n", + " 6.8570e-01, 9.2673e-01, 8.6789e-01, 3.2257e-01, 7.4286e-01,\n", + " 8.3383e-01, 2.7250e+00, 7.9620e-01, 6.5878e-01, 3.0518e-05,\n", + " -1.1517e-01, 3.5544e-01, -8.1897e-01, -8.8672e-01, -2.5031e-01,\n", + " -3.5101e-01, 1.2129e+00, 1.6068e-02, 7.0818e-01, 7.2331e-01,\n", + " -4.3201e-01, -9.8358e-02, -1.2148e+00, 3.3304e-01, 3.6011e-01,\n", + " -5.8105e-01, 2.4060e+00, -4.4777e-01, -1.0803e-01, 3.9753e-01,\n", + " 9.4331e-01, 1.2628e+00, 4.0028e-01, -8.5326e-01, -5.4215e-01,\n", + " 1.4149e-02, -1.0483e+00, -1.4329e+00, 1.1556e+00, -5.2445e-01]],\n", + " device='cuda:1', grad_fn=)" ] }, - "execution_count": 17, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } From d4a98bb91f73b9e66ceb1fd9193ca4f5ff7b42df Mon Sep 17 00:00:00 2001 From: axiom <20.mahdikh.0@gmail.com> Date: Sun, 27 Oct 2024 19:21:11 +0330 Subject: [PATCH 6/8] Ready to merge --- TokenDethcod.ipynb | 912 +++++++++++++++++++++++---------------------- 1 file changed, 463 insertions(+), 449 deletions(-) diff --git a/TokenDethcod.ipynb b/TokenDethcod.ipynb index 9fecb50..88f5b16 100644 --- a/TokenDethcod.ipynb +++ b/TokenDethcod.ipynb @@ -21,6 +21,52 @@ "!pip install transformers wandb requests_cache datasets tqdm python-dotenv peft accelerate bitsandbytes>0.37.0" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e-neGcFgTHdu", + "outputId": "8ea87abe-c1a8-4a3c-82e5-6486b75e4e2a" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /home/khodabandeh/.netrc\n" + ] + } + ], + "source": [ + "import os\n", + "import wandb\n", + "\n", + "try:\n", + " from dotenv import load_dotenv\n", + " # Load environment variables from .env file\n", + " load_dotenv()\n", + "\n", + "except ImportError as e:\n", + " print(f\"Error importing dotenv: {e}\")\n", + "\n", + "\n", + "# Check if running in Colab\n", + "try:\n", + " from google.colab import userdata\n", + " # If running in Colab, use userdata.get to retrieve the token\n", + " wandb.login(key=userdata.get('wandb_token'))\n", + "\n", + "except ImportError:\n", + " # If not in Colab, load the token from the environment variable\n", + " wandb_token = os.getenv('WANDB_TOKEN')\n", + " if wandb_token:\n", + " wandb.login(key=wandb_token, relogin=True)\n", + " else:\n", + " print(\"W&B token not found in environment variable. Please set WANDB_TOKEN in your environment.\")\n" + ] + }, { "cell_type": "markdown", "metadata": { @@ -42,8 +88,8 @@ }, "outputs": [ { - "output_type": "stream", "name": "stderr", + "output_type": "stream", "text": [ "Downloading: 100%|██████████| 36.4M/36.4M [00:00<00:00, 218MB/s]\n", "File downloaded and decompressed successfully.\n" @@ -111,7 +157,6 @@ "cell_type": "code", "execution_count": 37, "metadata": { - "id": "BF26H2PapAjj", "colab": { "base_uri": "https://localhost:8080/", "height": 49, @@ -129,22 +174,23 @@ "1dc435da8c744a6282e8f7cfce8b4f2f" ] }, + "id": "BF26H2PapAjj", "outputId": "f39ab00e-b77e-4ab5-9075-21f2501f44ca" }, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": [ - "Generating train split: 0 examples [00:00, ? examples/s]" - ], "application/vnd.jupyter.widget-view+json": { + "model_id": "2011e26c9fde4ada959624a30d935c6b", "version_major": 2, - "version_minor": 0, - "model_id": "2011e26c9fde4ada959624a30d935c6b" - } + "version_minor": 0 + }, + "text/plain": [ + "Generating train split: 0 examples [00:00, ? examples/s]" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -158,16 +204,16 @@ "cell_type": "code", "execution_count": 38, "metadata": { - "id": "pY1_Ux8uprdh", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "pY1_Ux8uprdh", "outputId": "a0f15afa-0f49-4aea-d8ac-1f875aa8369e" }, "outputs": [ { - "output_type": "stream", "name": "stderr", + "output_type": "stream", "text": [ "/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:1601: FutureWarning: `clean_up_tokenization_spaces` was not set. It will be set to `True` by default. This behavior will be depracted in transformers v4.45, and will be then set to `False` by default. For more details check this issue: https://github.com/huggingface/transformers/issues/31884\n", " warnings.warn(\n" @@ -185,7 +231,6 @@ "cell_type": "code", "execution_count": 39, "metadata": { - "id": "dZXhU0AfhrTJ", "colab": { "base_uri": "https://localhost:8080/", "height": 49, @@ -203,22 +248,23 @@ "22d010b51fd34ddf82627507aed81676" ] }, + "id": "dZXhU0AfhrTJ", "outputId": "87a6d03b-25cf-4dd0-d61c-b340a250e1df" }, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": [ - "Filter: 0%| | 0/1128024 [00:002006-03-04T01:27:24Z'\n" ] @@ -415,11 +461,7 @@ }, { "cell_type": "code", - "source": [ - "from transformers import AutoModelForCausalLM, BitsAndBytesConfig\n", - "\n", - "quantization_config = BitsAndBytesConfig(load_in_8bit=True, device_map=\"auto\")" - ], + "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -427,45 +469,49 @@ "id": "g4wYGk_fAkHY", "outputId": "a719034f-75ab-4924-ccdd-1b9d7b2c02c0" }, - "execution_count": 44, "outputs": [ { - "output_type": "stream", "name": "stderr", + "output_type": "stream", "text": [ "Unused kwargs: ['device_map']. These kwargs are not used in .\n" ] } + ], + "source": [ + "from transformers import BitsAndBytesConfig\n", + "\n", + "quantization_config = BitsAndBytesConfig(load_in_8bit=True, device_map=\"auto\")" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { - "id": "bZRSpc8ow4bA", - "outputId": "ac709f40-8c80-4058-fb1f-15b448bccc1e", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "id": "bZRSpc8ow4bA", + "outputId": "ac709f40-8c80-4058-fb1f-15b448bccc1e" }, "outputs": [ { - "output_type": "stream", "name": "stderr", + "output_type": "stream", "text": [ "`low_cpu_mem_usage` was None, now set to True since model is quantized.\n" ] }, { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Loading model from google/flan-t5-base\n" ] }, { - "output_type": "stream", "name": "stderr", + "output_type": "stream", "text": [ "Some weights of CompressionModel were not initialized from the model checkpoint at google/flan-t5-base and are newly initialized: ['critic_head.bias', 'critic_head.weight']\n", "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n", @@ -479,6 +525,7 @@ "if LOAD_LATEST:\n", " compressor = CompressionModel.from_pretrained(MODEL_PATH / \"compressor\").to(device)\n", " decompressor = DecompressionModel.from_pretrained(MODEL_PATH / \"decompressor\").to(device)\n", + "\n", "else:\n", " model_path = \"google/flan-t5-base\"\n", " print(f\"Loading model from {model_path}\")\n", @@ -489,6 +536,23 @@ }, { "cell_type": "code", + "execution_count": 47, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "y8RxmtZt5hLX", + "outputId": "798a5570-5d27-4465-c18e-5127fa699267" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trainable parameters: 1769472 | Total parameters: 249348097 | trainable%: 0.7096392638601128\n" + ] + } + ], "source": [ "from peft import LoraConfig, get_peft_model\n", "\n", @@ -511,23 +575,6 @@ " trainable_params += param.numel()\n", "\n", "print(f'Trainable parameters: {trainable_params} | Total parameters: {all_params} | trainable%: {trainable_params / all_params * 100}')" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "y8RxmtZt5hLX", - "outputId": "798a5570-5d27-4465-c18e-5127fa699267" - }, - "execution_count": 47, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Trainable parameters: 1769472 | Total parameters: 249348097 | trainable%: 0.7096392638601128\n" - ] - } ] }, { @@ -539,52 +586,6 @@ "## Train" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "e-neGcFgTHdu", - "outputId": "8ea87abe-c1a8-4a3c-82e5-6486b75e4e2a" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n", - "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n", - "\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /home/khodabandeh/.netrc\n" - ] - } - ], - "source": [ - "import os\n", - "import wandb\n", - "\n", - "try:\n", - " from dotenv import load_dotenv\n", - " # Load environment variables from .env file\n", - " load_dotenv()\n", - "\n", - "except ImportError as e:\n", - " print(f\"Error importing dotenv: {e}\")\n", - "\n", - "\n", - "# Check if running in Colab\n", - "try:\n", - " from google.colab import userdata\n", - " # If running in Colab, use userdata.get to retrieve the token\n", - " wandb.login(key=userdata.get('wandb_token'))\n", - "\n", - "except ImportError:\n", - " # If not in Colab, load the token from the environment variable\n", - " wandb_token = os.getenv('WANDB_TOKEN')\n", - " if wandb_token:\n", - " wandb.login(key=wandb_token, relogin=True)\n", - " else:\n", - " print(\"W&B token not found in environment variable. Please set WANDB_TOKEN in your environment.\")\n" - ] - }, { "cell_type": "code", "execution_count": 50, @@ -593,21 +594,20 @@ }, "outputs": [], "source": [ - "COMPRESSOR_LR = 1e-3\n", - "DECOMPRESSOR_LR = 1e-3\n", - "# CRITIC_BIAS_LR = 0.1\n", - "\n", - "# # Create parameter groups\n", - "# param_groups = [\n", - "# {\"params\": [param for name, param in compressor.named_parameters() if name != \"critic_head.bias\"], \"lr\": LR},\n", - "# {\"params\": [compressor.critic_head.bias], \"lr\": CRITIC_BIAS_LR},\n", - "# ]\n", + "# TODO: Log these to wandb\n", + "COMPRESSOR_LR = 1e-4\n", + "DECOMPRESSOR_LR = 1e-4\n", + "CRITIC_BIAS_LR = 1e-4\n", "\n", - "# # Define optimizer with parameter groups\n", - "# compressor_optimizer = torch.optim.Adam(param_groups)\n", + "# Create parameter groups\n", + "param_groups = [\n", + " {\"params\": [param for name, param in compressor.named_parameters() if name != \"critic_head.bias\"], \"lr\": COMPRESSOR_LR},\n", + " {\"params\": [compressor.critic_head.bias], \"lr\": CRITIC_BIAS_LR},\n", + "]\n", "\n", - "compressor_optimizer = torch.optim.Adam(lora_compressor.parameters(), lr=COMPRESSOR_LR)\n", - "decompressor_optimizer = torch.optim.Adam(lora_decompressor.parameters(), lr=DECOMPRESSOR_LR)" + "# Define optimizer with parameter groups\n", + "compressor_optimizer = torch.optim.Adam(param_groups)\n", + "decompressor_optimizer = torch.optim.Adam(decompressor.parameters(), lr=DECOMPRESSOR_LR)" ] }, { @@ -621,6 +621,7 @@ "import math\n", "\n", "BATCH_SIZE = 8\n", + "REWARD_SCALING = 0.01\n", "MAX_TOKEN_COST = math.log(lora_compressor.config.vocab_size)\n", "\n", "train_dataset = dataset\n", @@ -827,31 +828,31 @@ }, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": [ - " 0%| | 0/107029 [00:00 Date: Tue, 26 Nov 2024 15:58:29 +0330 Subject: [PATCH 7/8] Add reward normalization --- TokenDethcod.ipynb | 5927 ++++++++++++++++++++++---------------------- 1 file changed, 2981 insertions(+), 2946 deletions(-) diff --git a/TokenDethcod.ipynb b/TokenDethcod.ipynb index 88f5b16..5bebef3 100644 --- a/TokenDethcod.ipynb +++ b/TokenDethcod.ipynb @@ -1,2978 +1,3013 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "unSiMpj_w4a7" - }, - "source": [ - "# Token based DETHCOD" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "id": "eSX4vKTl97pS", - "scrolled": true - }, - "outputs": [], - "source": [ - "!pip install transformers wandb requests_cache datasets tqdm python-dotenv peft accelerate bitsandbytes>0.37.0" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "e-neGcFgTHdu", - "outputId": "8ea87abe-c1a8-4a3c-82e5-6486b75e4e2a" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n", - "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n", - "\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /home/khodabandeh/.netrc\n" - ] - } - ], - "source": [ - "import os\n", - "import wandb\n", - "\n", - "try:\n", - " from dotenv import load_dotenv\n", - " # Load environment variables from .env file\n", - " load_dotenv()\n", - "\n", - "except ImportError as e:\n", - " print(f\"Error importing dotenv: {e}\")\n", - "\n", - "\n", - "# Check if running in Colab\n", - "try:\n", - " from google.colab import userdata\n", - " # If running in Colab, use userdata.get to retrieve the token\n", - " wandb.login(key=userdata.get('wandb_token'))\n", - "\n", - "except ImportError:\n", - " # If not in Colab, load the token from the environment variable\n", - " wandb_token = os.getenv('WANDB_TOKEN')\n", - " if wandb_token:\n", - " wandb.login(key=wandb_token, relogin=True)\n", - " else:\n", - " print(\"W&B token not found in environment variable. Please set WANDB_TOKEN in your environment.\")\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3yDIICSsnFOb" - }, - "source": [ - "## Download Data" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "JQb9wuBJnFOc", - "outputId": "14f92a7c-92b6-4c54-cb96-7aedd2d11747" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Downloading: 100%|██████████| 36.4M/36.4M [00:00<00:00, 218MB/s]\n", - "File downloaded and decompressed successfully.\n" - ] - } - ], - "source": [ - "import io\n", - "import os\n", - "import sys\n", - "import zipfile\n", - "\n", - "import requests\n", - "import requests_cache\n", - "from tqdm import tqdm\n", - "\n", - "\n", - "zip_link = \"http://www.mattmahoney.net/dc/enwik8.zip\"\n", - "data_folder = \"dataset\"\n", - "cache_file = \"download_cache\"\n", - "\n", - "# Ensure the data folder exists\n", - "if not os.path.exists(data_folder):\n", - " os.makedirs(data_folder)\n", - "\n", - "# Initialize requests_cache\n", - "requests_cache.install_cache(os.path.join(data_folder, cache_file))\n", - "\n", - "# Download the ZIP file with progress bar\n", - "response = requests.get(zip_link, stream=True)\n", - "response.raise_for_status()\n", - "\n", - "# Get the total file size for the progress bar\n", - "total_size = int(response.headers.get(\"content-length\", 0))\n", - "\n", - "# Open the ZIP file from the content\n", - "with open(os.path.join(data_folder, \"enwik8.zip\"), \"wb\") as file:\n", - " with tqdm(\n", - " total=total_size, unit=\"B\", unit_scale=True, desc=\"Downloading\"\n", - " ) as pbar:\n", - " for data in response.iter_content(chunk_size=1024):\n", - " file.write(data)\n", - " pbar.update(len(data))\n", - "\n", - "# Open the cached file\n", - "with open(os.path.join(data_folder, \"enwik8.zip\"), \"rb\") as file:\n", - " # Open the ZIP file from the content\n", - " with zipfile.ZipFile(io.BytesIO(file.read())) as zip_file:\n", - " # Extract all contents to the data folder\n", - " zip_file.extractall(data_folder)\n", - "\n", - "print(\"File downloaded and decompressed successfully.\", file=sys.stderr)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "NMCRynUDpAz6" - }, - "source": [ - "## Data" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 49, - "referenced_widgets": [ - "2011e26c9fde4ada959624a30d935c6b", - "55a34be2f9d14d00926062efafa2d7b0", - "1925655871374689a1057b008f889052", - "576e75f0473145168b5d166acb903643", - "532d04fe48164a00a8db36177c9ea152", - "ffbc13e493114403b6f88a67db932b15", - "a5c93a83de084232a6964a113aecb930", - "232f001ecfd4414aba63125571389434", - "06df0c8f7b974e189272f1a91a5e28c5", - "4b524028a9564a61a935d10083922c4c", - "1dc435da8c744a6282e8f7cfce8b4f2f" - ] - }, - "id": "BF26H2PapAjj", - "outputId": "f39ab00e-b77e-4ab5-9075-21f2501f44ca" - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "2011e26c9fde4ada959624a30d935c6b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Generating train split: 0 examples [00:00, ? examples/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from datasets import load_dataset\n", - "\n", - "dataset = load_dataset(\"text\", data_files=[\"dataset/enwik8\"])\n", - "dataset = dataset[\"train\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "pY1_Ux8uprdh", - "outputId": "a0f15afa-0f49-4aea-d8ac-1f875aa8369e" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:1601: FutureWarning: `clean_up_tokenization_spaces` was not set. It will be set to `True` by default. This behavior will be depracted in transformers v4.45, and will be then set to `False` by default. For more details check this issue: https://github.com/huggingface/transformers/issues/31884\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "from transformers import AutoTokenizer\n", - "\n", - "MODEL_ID = \"google/flan-t5-base\"\n", - "tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 49, - "referenced_widgets": [ - "3bf1e9a699f14d709b1f81ae98bf1215", - "0124c91212644264aaf84fe52e26e1dd", - "61bc579763f6454cb6a36dc80b9068a0", - "f056e5f5aec54fe8b3cfc121e1c24430", - "e6563f7242f3412a940b8761621eeac7", - "71f62c2eb9ad40e289c5bbcc0c95490d", - "bc1b308fdc1b4e80a6d04a70e75de34e", - "b0349099323b4b6280e3f253ab2aa033", - "e486dae88741401a82d16c7aa84b57cf", - "654f5bb5e6e44858af000d593b701980", - "22d010b51fd34ddf82627507aed81676" - ] - }, - "id": "dZXhU0AfhrTJ", - "outputId": "87a6d03b-25cf-4dd0-d61c-b340a250e1df" - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3bf1e9a699f14d709b1f81ae98bf1215", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Filter: 0%| | 0/1128024 [00:002006-03-04T01:27:24Z'\n" - ] - } - ], - "source": [ - "import random\n", - "sample = random.choice(dataset)\n", - "print(repr(sample[\"text\"]))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "wrDpshHUnFOd" - }, - "source": [ - "## Model" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "id": "fGqAZ6NY-FrU" - }, - "outputs": [], - "source": [ - "from dataclasses import dataclass\n", - "from typing import Optional, Tuple, Union\n", - "\n", - "import torch\n", - "import torch.nn as nn\n", - "import transformers\n", - "import transformers.modeling_outputs\n", - "\n", - "\n", - "class CompressionConfig(transformers.T5Config): ...\n", - "\n", - "\n", - "@dataclass\n", - "class CompressionOutput(transformers.modeling_outputs.Seq2SeqLMOutput):\n", - " value_predictions: Optional[Tuple[torch.FloatTensor, ...]] = None\n", - "\n", - "\n", - "class CompressionModel(transformers.T5ForConditionalGeneration):\n", - " def __init__(self, config):\n", - " super().__init__(config)\n", - "\n", - " self.critic_head = nn.Linear(config.d_model, 1)\n", - " self.critic_head.weight.data.normal_(mean=0.0, std=(1 / config.d_model))\n", - " self.critic_head.bias.data.zero_()\n", - "\n", - " def forward(\n", - " self,\n", - " input_ids: Optional[torch.LongTensor] = None,\n", - " attention_mask: Optional[torch.FloatTensor] = None,\n", - " decoder_input_ids: Optional[torch.LongTensor] = None,\n", - " decoder_attention_mask: Optional[torch.BoolTensor] = None,\n", - " head_mask: Optional[torch.FloatTensor] = None,\n", - " decoder_head_mask: Optional[torch.FloatTensor] = None,\n", - " cross_attn_head_mask: Optional[torch.Tensor] = None,\n", - " encoder_outputs: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n", - " past_key_values: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n", - " inputs_embeds: Optional[torch.FloatTensor] = None,\n", - " decoder_inputs_embeds: Optional[torch.FloatTensor] = None,\n", - " labels: Optional[torch.LongTensor] = None,\n", - " use_cache: Optional[bool] = None,\n", - " output_attentions: Optional[bool] = None,\n", - " output_hidden_states: Optional[bool] = True,\n", - " return_dict: Optional[bool] = None,\n", - " ) -> Union[Tuple[torch.FloatTensor], CompressionOutput]:\n", - " output = super().forward(\n", - " input_ids=input_ids,\n", - " attention_mask=attention_mask,\n", - " decoder_input_ids=decoder_input_ids,\n", - " decoder_attention_mask=decoder_attention_mask,\n", - " head_mask=head_mask,\n", - " decoder_head_mask=decoder_head_mask,\n", - " cross_attn_head_mask=cross_attn_head_mask,\n", - " encoder_outputs=encoder_outputs,\n", - " past_key_values=past_key_values,\n", - " inputs_embeds=inputs_embeds,\n", - " decoder_inputs_embeds=decoder_inputs_embeds,\n", - " labels=labels,\n", - " use_cache=use_cache,\n", - " output_attentions=output_attentions,\n", - " output_hidden_states=output_hidden_states,\n", - " return_dict=return_dict,\n", - " )\n", - "\n", - " if output.decoder_hidden_states is not None:\n", - " last_hidden_state = output.decoder_hidden_states[-1]\n", - " value_predictions = self.critic_head(last_hidden_state).squeeze(-1)\n", - " else:\n", - " value_predictions = None\n", - "\n", - " loss = None\n", - " if labels is not None:\n", - " loss_fct = nn.CrossEntropyLoss(ignore_index=self.config.pad_token_id)\n", - " loss = loss_fct(output.logits.view(-1, self.config.vocab_size), labels.view(-1))\n", - "\n", - " return CompressionOutput(\n", - " loss=loss,\n", - " value_predictions=value_predictions,\n", - " logits=output.logits,\n", - " past_key_values=output.past_key_values,\n", - " decoder_hidden_states=output.decoder_hidden_states,\n", - " decoder_attentions=output.decoder_attentions,\n", - " cross_attentions=output.cross_attentions,\n", - " encoder_last_hidden_state=output.encoder_last_hidden_state,\n", - " encoder_hidden_states=output.encoder_hidden_states,\n", - " encoder_attentions=output.encoder_attentions,\n", - " )\n" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "id": "XMVtNmiu-30c" - }, - "outputs": [], - "source": [ - "import transformers\n", - "import transformers.modeling_outputs\n", - "\n", - "\n", - "class DecompressionConfig(transformers.T5Config): ...\n", - "\n", - "\n", - "class DecompressionModel(transformers.T5ForConditionalGeneration): ..." - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "id": "-OTuhuS295RZ" - }, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "MODEL_PATH = Path(\"./data/models/token-dethcod/a2c-v1\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "qm6-SLkqw4bA" - }, - "source": [ - "### Load Model" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "g4wYGk_fAkHY", - "outputId": "a719034f-75ab-4924-ccdd-1b9d7b2c02c0" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Unused kwargs: ['device_map']. These kwargs are not used in .\n" - ] - } - ], - "source": [ - "from transformers import BitsAndBytesConfig\n", - "\n", - "quantization_config = BitsAndBytesConfig(load_in_8bit=True, device_map=\"auto\")" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "bZRSpc8ow4bA", - "outputId": "ac709f40-8c80-4058-fb1f-15b448bccc1e" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "`low_cpu_mem_usage` was None, now set to True since model is quantized.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading model from google/flan-t5-base\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Some weights of CompressionModel were not initialized from the model checkpoint at google/flan-t5-base and are newly initialized: ['critic_head.bias', 'critic_head.weight']\n", - "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n", - "`low_cpu_mem_usage` was None, now set to True since model is quantized.\n" - ] - } - ], - "source": [ - "LOAD_LATEST = False\n", - "\n", - "if LOAD_LATEST:\n", - " compressor = CompressionModel.from_pretrained(MODEL_PATH / \"compressor\").to(device)\n", - " decompressor = DecompressionModel.from_pretrained(MODEL_PATH / \"decompressor\").to(device)\n", - "\n", - "else:\n", - " model_path = \"google/flan-t5-base\"\n", - " print(f\"Loading model from {model_path}\")\n", - " compressor = CompressionModel.from_pretrained(model_path, quantization_config=quantization_config)\n", - " compressor.critic_head.reset_parameters()\n", - " decompressor = DecompressionModel.from_pretrained(model_path, quantization_config=quantization_config)" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "y8RxmtZt5hLX", - "outputId": "798a5570-5d27-4465-c18e-5127fa699267" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Trainable parameters: 1769472 | Total parameters: 249348097 | trainable%: 0.7096392638601128\n" - ] - } - ], - "source": [ - "from peft import LoraConfig, get_peft_model\n", - "\n", - "lora_config = LoraConfig(\n", - " r=16,\n", - " lora_alpha=16,\n", - " lora_dropout=0.1,\n", - " bias=\"lora_only\",\n", - " modules_to_save=['decode_head'],\n", - ")\n", - "lora_compressor = get_peft_model(compressor, lora_config).to(device, torch.float32)\n", - "lora_decompressor = get_peft_model(decompressor, lora_config).to(device, torch.float32)\n", - "\n", - "trainable_params = 0\n", - "all_params = 0\n", - "\n", - "for _, param in lora_compressor.named_parameters():\n", - " all_params += param.numel()\n", - " if param.requires_grad:\n", - " trainable_params += param.numel()\n", - "\n", - "print(f'Trainable parameters: {trainable_params} | Total parameters: {all_params} | trainable%: {trainable_params / all_params * 100}')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "WeKAyrQz5k_k" - }, - "source": [ - "## Train" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": { - "id": "nbJccLQa_TKV" - }, - "outputs": [], - "source": [ - "# TODO: Log these to wandb\n", - "COMPRESSOR_LR = 1e-4\n", - "DECOMPRESSOR_LR = 1e-4\n", - "CRITIC_BIAS_LR = 1e-4\n", - "\n", - "# Create parameter groups\n", - "param_groups = [\n", - " {\"params\": [param for name, param in compressor.named_parameters() if name != \"critic_head.bias\"], \"lr\": COMPRESSOR_LR},\n", - " {\"params\": [compressor.critic_head.bias], \"lr\": CRITIC_BIAS_LR},\n", - "]\n", - "\n", - "# Define optimizer with parameter groups\n", - "compressor_optimizer = torch.optim.Adam(param_groups)\n", - "decompressor_optimizer = torch.optim.Adam(decompressor.parameters(), lr=DECOMPRESSOR_LR)" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": { - "id": "zioTdU4gA2J2" - }, - "outputs": [], - "source": [ - "import math\n", - "\n", - "BATCH_SIZE = 8\n", - "REWARD_SCALING = 0.01\n", - "MAX_TOKEN_COST = math.log(lora_compressor.config.vocab_size)\n", - "\n", - "train_dataset = dataset\n", - "data_loader = torch.utils.data.DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)\n", - "\n", - "SCHEDULING_STEPS = len(data_loader) * 1.0e-2 # Schedule over 30% of an epoch\n", - "PRETRAINING_STEPS = len(data_loader) * 2.0e-2 # Schedule over 10% of an epoch" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "SUo_c6cyTx2Y", - "outputId": "317d1857-2c8e-45a7-ada8-99ef974f8124" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33maxiom\u001b[0m (\u001b[33mchihuahuas\u001b[0m). Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n" - ] - }, - { - "data": { - "text/html": [ - "wandb version 0.18.3 is available! To upgrade, please run:\n", - " $ pip install wandb --upgrade" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Tracking run with wandb version 0.16.6" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241016_111725-slm0386f" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Syncing run Token Training to Weights & Biases (docs)
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - " View project at https://wandb.ai/chihuahuas/DETHCOD" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/slm0386f" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import wandb\n", - "\n", - "wandb.init(\n", - " name = \"Token Training\",\n", - " project=\"DETHCOD\",\n", - " config={\n", - " \"compressor_model_config\": compressor.config.to_dict(),\n", - " \"decompressor_model_config\": decompressor.config.to_dict(),\n", - " # TODO: Add other parameters\n", - " },\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": { - "id": "DiB9sOSVw4bB" - }, - "outputs": [], - "source": [ - "class TokenCostScheduler:\n", - " def __init__(self, total_steps, max_token_cost, schedule_fn=None):\n", - " self.total_steps = total_steps\n", - " self.max_token_cost = max_token_cost\n", - " self.step_count = 0\n", - "\n", - " linear_schedule = lambda self: min(self.step_count / self.total_steps, 1.0) * self.max_token_cost\n", - " # If no schedule function is provided, default to linear schedule\n", - " self.schedule_fn = schedule_fn if schedule_fn else linear_schedule\n", - "\n", - " def get_token_cost(self):\n", - " # Get the current token cost based on the schedule\n", - " token_cost = self.schedule_fn(self)\n", - " self.step_count += 1 # Increment the step count\n", - " return token_cost" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "YRjMbckLw4bB", - "outputId": "f6b49273-3ea8-423c-abb1-6e4b49df4bdf" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[34m\u001b[1mwandb\u001b[0m: logging graph, to disable use `wandb.watch(log_graph=False)`\n", - "\u001b[34m\u001b[1mwandb\u001b[0m: logging graph, to disable use `wandb.watch(log_graph=False)`\n" - ] - } - ], - "source": [ - "graph = wandb.watch((compressor.critic_head, compressor.lm_head), log_freq=100, log=\"all\", log_graph=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "81konK25w4bB" - }, - "source": [ - "### RL Training Loop" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 423, - "referenced_widgets": [ - "259751f990bc4422b181c49619700334", - "a1b0cd399a2d44e6a5f3431ac861d2d2", - "b9be4ff6d92f4112aa8078e96b3838db", - "96e4d29108ca47ea9beb7f7b1a78d79a", - "8b32e1b93368443f981ec8187016c7f2", - "065511e68dfb4053b4f0a70ef7a91ee3", - "b2826da9f9314c1cb966b54a7b6120fe", - "7a87b54b7ed549bdb26958bf7f803af2", - "dad9de6f3118448eb665a9fcb544ff68", - "05f070c4b1294821b0874bf4ddc9d7d7", - "95b6d03796e84153a5e2a6904d640659" - ] - }, - "id": "-71bvb9b4Rth", - "outputId": "af7ae39c-cd07-4490-ed2c-d66ef023f852" - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "259751f990bc4422b181c49619700334", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/107029 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 36\u001b[0;31m \u001b[0mcompressed\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlora_compressor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgeneration_config\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mgeneration_config\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 37\u001b[0m \u001b[0mdecompressed\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlora_decompressor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcompressed\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msequences\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabels\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/peft/peft_model.py\u001b[0m in \u001b[0;36mgenerate\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 815\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_enable_peft_forward_hooks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 816\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mspecial_peft_forward_args\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 817\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_base_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 818\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 819\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_get_base_model_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_prompt_tuning\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/utils/_contextlib.py\u001b[0m in \u001b[0;36mdecorate_context\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mctx_factory\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 116\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 117\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 118\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/generation/utils.py\u001b[0m in \u001b[0;36mgenerate\u001b[0;34m(self, inputs, generation_config, logits_processor, stopping_criteria, prefix_allowed_tokens_fn, synced_gpus, assistant_model, streamer, negative_prompt_ids, negative_prompt_attention_mask, **kwargs)\u001b[0m\n\u001b[1;32m 2022\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2023\u001b[0m \u001b[0;31m# 13. run sample (it degenerates to greedy search when `generation_config.do_sample=False`)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2024\u001b[0;31m result = self._sample(\n\u001b[0m\u001b[1;32m 2025\u001b[0m \u001b[0minput_ids\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2026\u001b[0m \u001b[0mlogits_processor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mprepared_logits_processor\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/generation/utils.py\u001b[0m in \u001b[0;36m_sample\u001b[0;34m(self, input_ids, logits_processor, stopping_criteria, generation_config, synced_gpus, streamer, logits_warper, **model_kwargs)\u001b[0m\n\u001b[1;32m 2980\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2981\u001b[0m \u001b[0;31m# forward pass to get next token\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2982\u001b[0;31m \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mmodel_inputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreturn_dict\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2983\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2984\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0msynced_gpus\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mthis_peer_finished\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compiled_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1552\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1553\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_pre_hooks\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_hooks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/accelerate/hooks.py\u001b[0m in \u001b[0;36mnew_forward\u001b[0;34m(module, *args, **kwargs)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 170\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 171\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hf_hook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input_ids, attention_mask, decoder_input_ids, decoder_attention_mask, head_mask, decoder_head_mask, cross_attn_head_mask, encoder_outputs, past_key_values, inputs_embeds, decoder_inputs_embeds, labels, use_cache, output_attentions, output_hidden_states, return_dict)\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[0mreturn_dict\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mOptional\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mbool\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 44\u001b[0m ) -> Union[Tuple[torch.FloatTensor], CompressionOutput]:\n\u001b[0;32m---> 45\u001b[0;31m output = super().forward(\n\u001b[0m\u001b[1;32m 46\u001b[0m \u001b[0minput_ids\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[0mattention_mask\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mattention_mask\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/models/t5/modeling_t5.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input_ids, attention_mask, decoder_input_ids, decoder_attention_mask, head_mask, decoder_head_mask, cross_attn_head_mask, encoder_outputs, past_key_values, inputs_embeds, decoder_inputs_embeds, labels, use_cache, output_attentions, output_hidden_states, return_dict)\u001b[0m\n\u001b[1;32m 1737\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1738\u001b[0m \u001b[0;31m# Decode\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1739\u001b[0;31m decoder_outputs = self.decoder(\n\u001b[0m\u001b[1;32m 1740\u001b[0m \u001b[0minput_ids\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdecoder_input_ids\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1741\u001b[0m \u001b[0mattention_mask\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdecoder_attention_mask\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compiled_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1552\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1553\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_pre_hooks\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_hooks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/accelerate/hooks.py\u001b[0m in \u001b[0;36mnew_forward\u001b[0;34m(module, *args, **kwargs)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 170\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 171\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hf_hook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/models/t5/modeling_t5.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input_ids, attention_mask, encoder_hidden_states, encoder_attention_mask, inputs_embeds, head_mask, cross_attn_head_mask, past_key_values, use_cache, output_attentions, output_hidden_states, return_dict)\u001b[0m\n\u001b[1;32m 1104\u001b[0m )\n\u001b[1;32m 1105\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1106\u001b[0;31m layer_outputs = layer_module(\n\u001b[0m\u001b[1;32m 1107\u001b[0m \u001b[0mhidden_states\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1108\u001b[0m \u001b[0mattention_mask\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mextended_attention_mask\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compiled_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1552\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1553\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_pre_hooks\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_hooks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/accelerate/hooks.py\u001b[0m in \u001b[0;36mnew_forward\u001b[0;34m(module, *args, **kwargs)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 170\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 171\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hf_hook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/models/t5/modeling_t5.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, hidden_states, attention_mask, position_bias, encoder_hidden_states, encoder_attention_mask, encoder_decoder_position_bias, layer_head_mask, cross_attn_layer_head_mask, past_key_value, use_cache, output_attentions, return_dict)\u001b[0m\n\u001b[1;32m 744\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 745\u001b[0m \u001b[0;31m# Apply Feed Forward layer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 746\u001b[0;31m \u001b[0mhidden_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlayer\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 747\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 748\u001b[0m \u001b[0;31m# clamp inf values to enable fp16 training\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compiled_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1552\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1553\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_pre_hooks\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_hooks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/accelerate/hooks.py\u001b[0m in \u001b[0;36mnew_forward\u001b[0;34m(module, *args, **kwargs)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 170\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 171\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hf_hook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/models/t5/modeling_t5.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, hidden_states)\u001b[0m\n\u001b[1;32m 333\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 334\u001b[0m \u001b[0mforwarded_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlayer_norm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 335\u001b[0;31m \u001b[0mforwarded_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDenseReluDense\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mforwarded_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 336\u001b[0m \u001b[0mhidden_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhidden_states\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdropout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mforwarded_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 337\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mhidden_states\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compiled_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1552\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1553\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_pre_hooks\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_hooks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/accelerate/hooks.py\u001b[0m in \u001b[0;36mnew_forward\u001b[0;34m(module, *args, **kwargs)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 170\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 171\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hf_hook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/transformers/models/t5/modeling_t5.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, hidden_states)\u001b[0m\n\u001b[1;32m 302\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 303\u001b[0m \u001b[0mhidden_gelu\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mact\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwi_0\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 304\u001b[0;31m \u001b[0mhidden_linear\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwi_1\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 305\u001b[0m \u001b[0mhidden_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhidden_gelu\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mhidden_linear\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 306\u001b[0m \u001b[0mhidden_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdropout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhidden_states\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compiled_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1552\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1553\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1554\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_pre_hooks\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_global_backward_hooks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/accelerate/hooks.py\u001b[0m in \u001b[0;36mnew_forward\u001b[0;34m(module, *args, **kwargs)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 170\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_old_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 171\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hf_hook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/bitsandbytes/nn/modules.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, x)\u001b[0m\n\u001b[1;32m 1007\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbias\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbias\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1008\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1009\u001b[0;31m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbnb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatmul\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mweight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbias\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbias\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1010\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1011\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhas_fp16_weights\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/bitsandbytes/autograd/_functions.py\u001b[0m in \u001b[0;36mmatmul\u001b[0;34m(A, B, out, state, threshold, bias)\u001b[0m\n\u001b[1;32m 554\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mthreshold\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0.0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 555\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mthreshold\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mthreshold\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 556\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mMatMul8bitLt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mB\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbias\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 557\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 558\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/autograd/function.py\u001b[0m in \u001b[0;36mapply\u001b[0;34m(cls, *args, **kwargs)\u001b[0m\n\u001b[1;32m 572\u001b[0m \u001b[0;31m# See NOTE: [functorch vjp and autograd interaction]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 573\u001b[0m \u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_functorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munwrap_dead_wrappers\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 574\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 575\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 576\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mis_setup_ctx_defined\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/bitsandbytes/autograd/_functions.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(ctx, A, B, out, bias, state)\u001b[0m\n\u001b[1;32m 319\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 320\u001b[0m \u001b[0mA\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 321\u001b[0;31m \u001b[0mCA\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mCAt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSCA\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSCAt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcoo_tensorA\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mF\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdouble_quant\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfloat16\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mthreshold\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mthreshold\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 322\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 323\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mthreshold\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0.0\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mcoo_tensorA\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/bitsandbytes/functional.py\u001b[0m in \u001b[0;36mdouble_quant\u001b[0;34m(A, col_stats, row_stats, out_col, out_row, threshold)\u001b[0m\n\u001b[1;32m 2557\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhalf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2558\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mdevice\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtype\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"cuda\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2559\u001b[0;31m \u001b[0mprev_device\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpre_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2560\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2561\u001b[0m \u001b[0mcols\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/bitsandbytes/functional.py\u001b[0m in \u001b[0;36mpre_call\u001b[0;34m(device)\u001b[0m\n\u001b[1;32m 480\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mpre_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 481\u001b[0m \u001b[0mprev_device\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcurrent_device\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 482\u001b[0;31m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_device\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 483\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mprev_device\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 484\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/cuda/__init__.py\u001b[0m in \u001b[0;36mset_device\u001b[0;34m(device)\u001b[0m\n\u001b[1;32m 416\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mthis\u001b[0m \u001b[0margument\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mnegative\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 417\u001b[0m \"\"\"\n\u001b[0;32m--> 418\u001b[0;31m \u001b[0mdevice\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_get_device_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 419\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdevice\u001b[0m \u001b[0;34m>=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 420\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_C\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_cuda_setDevice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/cuda/_utils.py\u001b[0m in \u001b[0;36m_get_device_index\u001b[0;34m(device, optional, allow_cpu)\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 37\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdevice\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 38\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_torch_get_device_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moptional\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallow_cpu\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/_utils.py\u001b[0m in \u001b[0;36m_get_device_index\u001b[0;34m(device, optional, allow_cpu)\u001b[0m\n\u001b[1;32m 780\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mcurrent\u001b[0m \u001b[0mdefault\u001b[0m \u001b[0mCUDA\u001b[0m \u001b[0mdevice\u001b[0m \u001b[0mwill\u001b[0m \u001b[0mbe\u001b[0m \u001b[0mreturned\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mCUDA\u001b[0m \u001b[0mruntime\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0msupported\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 781\u001b[0m \"\"\"\n\u001b[0;32m--> 782\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 783\u001b[0m \u001b[0mdevice\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 784\u001b[0m \u001b[0mdevice_idx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mOptional\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "import torch.nn.functional as F\n", - "import tqdm.auto as tqdm\n", - "from transformers import GenerationConfig\n", - "\n", - "\n", - "# Define your generation configuration as before\n", - "generation_config = GenerationConfig(\n", - " do_sample=True,\n", - " num_beams=1,\n", - " max_new_tokens=128,\n", - " decoder_start_token_id=compressor.generation_config.decoder_start_token_id,\n", - " eos_token_id=compressor.generation_config.eos_token_id,\n", - " pad_token_id=compressor.generation_config.pad_token_id,\n", - " return_dict_in_generate=True,\n", - " output_logits=True,\n", - ")\n", - "\n", - "# Initialize the scheduler\n", - "token_cost_scheduler = TokenCostScheduler(total_steps=SCHEDULING_STEPS, max_token_cost=MAX_TOKEN_COST)\n", - "\n", - "with tqdm.tqdm(data_loader) as pbar:\n", - " for step, batch in enumerate(pbar):\n", - " # Get the current token cost from the scheduler\n", - " token_cost = token_cost_scheduler.get_token_cost()\n", - "\n", - " input_ids = tokenizer(\n", - " batch[\"text\"],\n", - " return_tensors=\"pt\",\n", - " padding=True,\n", - " # TODO: Test if this has any effect\n", - " truncation=True,\n", - " ).input_ids.to(device)\n", - "\n", - " compressed = compressor.generate(input_ids=input_ids, generation_config=generation_config)\n", - " decompressed = decompressor.forward(input_ids=compressed.sequences, labels=input_ids)\n", - "\n", - " full_episodes = (compressed.sequences != generation_config.eos_token_id).all(dim=-1)\n", - " sequences_copy = compressed.sequences.clone()\n", - " sequences_copy[..., full_episodes, -1] = generation_config.eos_token_id\n", - " compressed.sequences = sequences_copy\n", - "\n", - " actions = compressed.sequences[..., 1:]\n", - " # compressed.logits: [\n", - " # torch.tensor(shape=(B, V))\n", - " # ]\n", - " # (L, B, V)\n", - " # (B, L, V)\n", - " action_distributions = torch.stack(compressed.logits).transpose(0, 1)\n", - " # TODO: Give the `actions` as decoder_input_ids instead\n", - " values = compressor.forward(input_ids=input_ids, decoder_input_ids=compressed.sequences).value_predictions[..., :-1]\n", - " action_mask = actions != generation_config.pad_token_id\n", - " is_pad = actions == generation_config.pad_token_id\n", - " is_eos = actions == generation_config.eos_token_id\n", - " compressed_length = actions.size(-1) - is_pad.logical_or(is_eos).sum(dim=-1)\n", - "\n", - " losses = F.cross_entropy(\n", - " decompressed.logits.flatten(0, -2),\n", - " target=input_ids.flatten(),\n", - " ignore_index=0,\n", - " reduction=\"none\",\n", - " ).view(input_ids.shape)\n", - " decompressor_loss = losses.mean()\n", - "\n", - " sequence_compression_loss = losses.detach().sum(dim=-1)\n", - " rewards = torch.where(\n", - " actions == generation_config.eos_token_id,\n", - " -sequence_compression_loss.unsqueeze(-1),\n", - " -token_cost,\n", - " ) * action_mask * REWARD_SCALING\n", - " # TODO: Implement temporal difference learning\n", - " qs = rewards.flip(dims=[-1]).cumsum(dim=-1).flip(dims=[-1])\n", - "\n", - " advantage = (qs - values) * action_mask\n", - " num_actions = action_mask.sum()\n", - " expected_advantage = advantage.sum() / num_actions\n", - " critic_loss = (advantage * advantage).sum() / num_actions\n", - "\n", - " data_costs = torch.where(\n", - " actions == generation_config.eos_token_id,\n", - " sequence_compression_loss.unsqueeze(-1),\n", - " MAX_TOKEN_COST,\n", - " ) * action_mask\n", - " compressed_size = data_costs.sum(dim=-1)\n", - " decompressed_size = (input_ids != 0).sum(dim=-1) * MAX_TOKEN_COST\n", - " compression_ratio = (decompressed_size / compressed_size).mean()\n", - "\n", - " if step < PRETRAINING_STEPS:\n", - " # Train the model to generate the original sequence\n", - " actor_loss = super(CompressionModel, compressor).forward(input_ids=input_ids, labels=input_ids).loss\n", - "\n", - " else:\n", - " # [x] | x \\in R\n", - " # b = -ln(\\sigma e^x)\n", - " # norm = [x + b][action]\n", - " # al = x[action] - ln(sigma(e^x))\n", - " # = ln(e^x[action]) - ln(sigma(e^x))\n", - " # = ln(e^x[action]/sigma(e^x))\n", - "\n", - " # cross entropy = -ln(e^x[action]/sigma(e^x))\n", - " action_logits = F.cross_entropy(\n", - " action_distributions.flatten(0, -2),\n", - " target=actions.flatten(),\n", - " ignore_index=0,\n", - " reduction=\"none\",\n", - " ).view(actions.shape)\n", - " actor_loss = (action_logits * advantage.detach()).mean()\n", - "\n", - " compressor_loss = actor_loss + critic_loss\n", - "\n", - " pbar.set_description(f\"{compression_ratio=:.2f}, {critic_loss=:.2f}, {actor_loss=:.2f}, {decompressor_loss=:.2f}\")\n", - "\n", - " compressor_optimizer.zero_grad()\n", - " compressor_loss.backward()\n", - " compressor_optimizer.step()\n", - "\n", - " decompressor_optimizer.zero_grad()\n", - " decompressor_loss.backward()\n", - " decompressor_optimizer.step()\n", - "\n", - " with torch.no_grad():\n", - " wandb.log(\n", - " {\n", - " \"actor_loss\": actor_loss,\n", - " \"critic_loss\": critic_loss,\n", - " \"reward\": rewards.sum(dim=-1).mean(),\n", - " \"decompressor_loss\": decompressor_loss,\n", - " \"accuracy\": (-sequence_compression_loss).exp().mean(),\n", - " \"compressed_size\": compressed_length.float().mean(),\n", - " \"compression_ratio\": compression_ratio,\n", - " \"expected_advantage\": expected_advantage,\n", - " \"token_cost\": token_cost,\n", - " }\n", - " )\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "MHotTfInw4bB" - }, - "outputs": [], - "source": [ - "wandb.finish()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "EomSPfQ1w4bC" - }, - "source": [ - "### Save" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Hx_Iec6iw4bC" - }, - "outputs": [], - "source": [ - "compressor.save_pretrained(MODEL_PATH / \"compressor\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "33cJmyN2w4bC" - }, - "outputs": [], - "source": [ - "decompressor.save_pretrained(MODEL_PATH / \"decompressor\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "1gR6WQBow4bC" - }, - "source": [ - "## Playground" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "0C0rFrBuw4bC", - "outputId": "c8a88452-7c0e-4267-f6de-5f599432a489" - }, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import torch\n", - "import matplotlib.pyplot as plt\n", - "\n", - "top_token_count = 100\n", - "\n", - "# Assuming `action_distributions` is the tensor of shape [100, 32128]\n", - "logits = action_distributions[1].detach().cpu() # Ensure it's on the CPU\n", - "\n", - "# Step 1: Average the logits across the first axis (dimension 0)\n", - "avg_logits = torch.mean(logits, dim=0)\n", - "\n", - "# Step 2: Get the top 50 tokens based on average logit values\n", - "top_values, top_indices = torch.topk(avg_logits, top_token_count)\n", - "\n", - "# Step 3: Convert the top indices to tokens using the tokenizer\n", - "top_tokens = tokenizer.convert_ids_to_tokens(top_indices.numpy())\n", - "\n", - "# Step 4: Plot the top 50 logits using imshow with tokens as labels\n", - "plt.figure(figsize=(10, 2))\n", - "plt.imshow(logits[..., top_indices].numpy(), cmap='viridis', aspect='auto', interpolation=\"nearest\")\n", - "plt.colorbar(label='Logit Value')\n", - "plt.yticks([]) # Hide y-axis as we only have one row\n", - "plt.xticks(range(top_token_count), top_tokens, rotation='vertical')\n", - "plt.title('Top 50 Tokens by Average Logit')\n", - "plt.show()\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "U393aMyBw4bC", - "outputId": "faa47bfc-c434-41f9-a75d-83cb7a486888" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[ 165.1084, -36.0591, -121.1219, ..., 693.7413, 704.1188,\n", - " 714.4963],\n", - " [ 52.5199, -161.4629, -264.1466, ..., 560.4196, 570.7971,\n", - " 581.1746],\n", - " [ 108.7585, -87.1466, -611.3521, ..., 665.0784, 675.4559,\n", - " 685.8333],\n", - " ...,\n", - " [ 141.6855, -90.8539, -191.5150, ..., 620.3885, 630.7659,\n", - " 641.1434],\n", - " [ -97.1033, -232.9352, -222.5577, ..., 698.5034, 708.8810,\n", - " 719.2583],\n", - " [ 129.4216, -67.8324, -597.4383, ..., 678.9921, 689.3696,\n", - " 699.7472]], device='cuda:0', grad_fn=)" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "advantage" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "mz4_KbSNw4bC", - "outputId": "d47df08d-66da-48f5-c1bb-42dc639804c1" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[-1512.3618, -1300.8169, -1205.3765, ..., -743.8093, -743.8093,\n", - " -743.8093],\n", - " [-1502.4591, -1278.0989, -1165.0376, ..., -713.1734, -713.1734,\n", - " -713.1734],\n", - " [-1512.4761, -1306.1935, -771.6105, ..., -771.6105, -771.6105,\n", - " -771.6105],\n", - " ...,\n", - " [-1500.7911, -1257.8741, -1146.8356, ..., -682.3087, -682.3086,\n", - " -682.3087],\n", - " [-1571.7404, -1425.5309, -1425.5309, ..., -1070.1616, -1070.1617,\n", - " -1070.1616],\n", - " [-1510.2328, -1302.6012, -762.6179, ..., -762.6179, -762.6179,\n", - " -762.6179]], device='cuda:0', grad_fn=)" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "values" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "eaQR64z2w4bC" - }, - "outputs": [], - "source": [ - "val_tmp = values.detach()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "6sBjWgK0w4bC" - }, - "outputs": [], - "source": [ - "bias = nn.Parameter(torch.tensor(0.0, device=device))\n", - "optim_tmp = torch.optim.Adam(params=[bias])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "1QjHh1tDw4bD" - }, - "outputs": [], - "source": [ - "# optim_tmp.param_groups[0]['betas'] = (0.99, 0.5)\n", - "optim_tmp.param_groups[0]['lr'] = 0.1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "referenced_widgets": [ - "198affb45b4f40b1beb28eb813be0481" - ] - }, - "id": "oaYc-L-hw4bD", - "outputId": "f30208f9-8296-4586-ec88-701149d7764a" - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "198affb45b4f40b1beb28eb813be0481", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/10000 [00:000.37.0" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "e-neGcFgTHdu", + "outputId": "8ea87abe-c1a8-4a3c-82e5-6486b75e4e2a" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /home/khodabandeh/.netrc\n" + ] + } + ], + "source": [ + "import os\n", + "import wandb\n", + "\n", + "try:\n", + " from dotenv import load_dotenv\n", + " # Load environment variables from .env file\n", + " load_dotenv()\n", + "\n", + "except ImportError as e:\n", + " print(f\"Error importing dotenv: {e}\")\n", + "\n", + "\n", + "# Check if running in Colab\n", + "try:\n", + " from google.colab import userdata\n", + " # If running in Colab, use userdata.get to retrieve the token\n", + " wandb.login(key=userdata.get('wandb_token'))\n", + "\n", + "except ImportError:\n", + " # If not in Colab, load the token from the environment variable\n", + " wandb_token = os.getenv('WANDB_TOKEN')\n", + " if wandb_token:\n", + " wandb.login(key=wandb_token, relogin=True)\n", + " else:\n", + " print(\"W&B token not found in environment variable. Please set WANDB_TOKEN in your environment.\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3yDIICSsnFOb" + }, + "source": [ + "## Download Data" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JQb9wuBJnFOc", + "outputId": "14f92a7c-92b6-4c54-cb96-7aedd2d11747" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Downloading: 100%|██████████████████████████████████████████████████████████████████████| 36.4M/36.4M [00:00<00:00, 581MB/s]\n", + "File downloaded and decompressed successfully.\n" + ] + } + ], + "source": [ + "import io\n", + "import os\n", + "import sys\n", + "import zipfile\n", + "\n", + "import requests\n", + "import requests_cache\n", + "from tqdm.auto import tqdm\n", + "\n", + "\n", + "zip_link = \"http://www.mattmahoney.net/dc/enwik8.zip\"\n", + "data_folder = \"dataset\"\n", + "cache_file = \"download_cache\"\n", + "\n", + "# Ensure the data folder exists\n", + "if not os.path.exists(data_folder):\n", + " os.makedirs(data_folder)\n", + "\n", + "# Initialize requests_cache\n", + "requests_cache.install_cache(os.path.join(data_folder, cache_file))\n", + "\n", + "# Download the ZIP file with progress bar\n", + "response = requests.get(zip_link, stream=True)\n", + "response.raise_for_status()\n", + "\n", + "# Get the total file size for the progress bar\n", + "total_size = int(response.headers.get(\"content-length\", 0))\n", + "\n", + "# Open the ZIP file from the content\n", + "with open(os.path.join(data_folder, \"enwik8.zip\"), \"wb\") as file:\n", + " with tqdm(\n", + " total=total_size, unit=\"B\", unit_scale=True, desc=\"Downloading\"\n", + " ) as pbar:\n", + " for data in response.iter_content(chunk_size=1024):\n", + " file.write(data)\n", + " pbar.update(len(data))\n", + "\n", + "# Open the cached file\n", + "with open(os.path.join(data_folder, \"enwik8.zip\"), \"rb\") as file:\n", + " # Open the ZIP file from the content\n", + " with zipfile.ZipFile(io.BytesIO(file.read())) as zip_file:\n", + " # Extract all contents to the data folder\n", + " zip_file.extractall(data_folder)\n", + "\n", + "print(\"File downloaded and decompressed successfully.\", file=sys.stderr)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NMCRynUDpAz6" + }, + "source": [ + "## Data" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 49, + "referenced_widgets": [ + "2011e26c9fde4ada959624a30d935c6b", + "55a34be2f9d14d00926062efafa2d7b0", + "1925655871374689a1057b008f889052", + "576e75f0473145168b5d166acb903643", + "532d04fe48164a00a8db36177c9ea152", + "ffbc13e493114403b6f88a67db932b15", + "a5c93a83de084232a6964a113aecb930", + "232f001ecfd4414aba63125571389434", + "06df0c8f7b974e189272f1a91a5e28c5", + "4b524028a9564a61a935d10083922c4c", + "1dc435da8c744a6282e8f7cfce8b4f2f" + ] + }, + "id": "BF26H2PapAjj", + "outputId": "f39ab00e-b77e-4ab5-9075-21f2501f44ca" + }, + "outputs": [], + "source": [ + "from datasets import load_dataset\n", + "\n", + "dataset = load_dataset(\"text\", data_files=[\"dataset/enwik8\"])\n", + "dataset = dataset[\"train\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "pY1_Ux8uprdh", + "outputId": "a0f15afa-0f49-4aea-d8ac-1f875aa8369e" + }, + "outputs": [], + "source": [ + "from transformers import AutoTokenizer\n", + "\n", + "MODEL_ID = \"google-t5/t5-small\"\n", + "tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 49, + "referenced_widgets": [ + "3bf1e9a699f14d709b1f81ae98bf1215", + "0124c91212644264aaf84fe52e26e1dd", + "61bc579763f6454cb6a36dc80b9068a0", + "f056e5f5aec54fe8b3cfc121e1c24430", + "e6563f7242f3412a940b8761621eeac7", + "71f62c2eb9ad40e289c5bbcc0c95490d", + "bc1b308fdc1b4e80a6d04a70e75de34e", + "b0349099323b4b6280e3f253ab2aa033", + "e486dae88741401a82d16c7aa84b57cf", + "654f5bb5e6e44858af000d593b701980", + "22d010b51fd34ddf82627507aed81676" + ] + }, + "id": "dZXhU0AfhrTJ", + "outputId": "87a6d03b-25cf-4dd0-d61c-b340a250e1df" + }, + "outputs": [], + "source": [ + "# Removing large and empty samples\n", + "MAX_LENGTH = 128\n", + "\n", + "def filter_samples(example):\n", + " tokenized = tokenizer(\n", + " example[\"text\"],\n", + " truncation=True,\n", + " max_length=MAX_LENGTH + 1,\n", + " return_attention_mask=False,\n", + " return_length=True,\n", + " )\n", + "\n", + " return [\n", + " 1 < sample_length <= MAX_LENGTH\n", + " for sample_length in tokenized.length\n", + " ]\n", + "\n", + "dataset = dataset.filter(filter_samples, batched=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WPWUhHX8A43h", + "outputId": "82f3afe8-154a-40d7-c6a1-f0346072dc5b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "' | accessdate = 2006-02-08'\n" + ] + } + ], + "source": [ + "import random\n", + "sample = random.choice(dataset)\n", + "print(repr(sample[\"text\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wrDpshHUnFOd" + }, + "source": [ + "## Model" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "id": "fGqAZ6NY-FrU" + }, + "outputs": [], + "source": [ + "from dataclasses import dataclass\n", + "from typing import Optional, Tuple, Union\n", + "\n", + "import torch\n", + "import torch.nn as nn\n", + "import transformers\n", + "import transformers.modeling_outputs\n", + "\n", + "\n", + "class CompressionConfig(transformers.T5Config): ...\n", + "\n", + "\n", + "@dataclass\n", + "class CompressionOutput(transformers.modeling_outputs.Seq2SeqLMOutput):\n", + " value_predictions: Optional[Tuple[torch.FloatTensor, ...]] = None\n", + "\n", + "\n", + "class CompressionModel(transformers.T5ForConditionalGeneration):\n", + " def __init__(self, config):\n", + " super().__init__(config)\n", + "\n", + " self.critic_head = nn.Linear(config.d_model, 1)\n", + " self.critic_head.weight.data.normal_(mean=0.0, std=(1 / config.d_model))\n", + " self.critic_head.bias.data.zero_()\n", + "\n", + " def forward(\n", + " self,\n", + " input_ids: Optional[torch.LongTensor] = None,\n", + " attention_mask: Optional[torch.FloatTensor] = None,\n", + " decoder_input_ids: Optional[torch.LongTensor] = None,\n", + " decoder_attention_mask: Optional[torch.BoolTensor] = None,\n", + " head_mask: Optional[torch.FloatTensor] = None,\n", + " decoder_head_mask: Optional[torch.FloatTensor] = None,\n", + " cross_attn_head_mask: Optional[torch.Tensor] = None,\n", + " encoder_outputs: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n", + " past_key_values: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n", + " inputs_embeds: Optional[torch.FloatTensor] = None,\n", + " decoder_inputs_embeds: Optional[torch.FloatTensor] = None,\n", + " labels: Optional[torch.LongTensor] = None,\n", + " use_cache: Optional[bool] = None,\n", + " output_attentions: Optional[bool] = None,\n", + " output_hidden_states: Optional[bool] = True,\n", + " return_dict: Optional[bool] = None,\n", + " ) -> Union[Tuple[torch.FloatTensor], CompressionOutput]:\n", + " output = super().forward(\n", + " input_ids=input_ids,\n", + " attention_mask=attention_mask,\n", + " decoder_input_ids=decoder_input_ids,\n", + " decoder_attention_mask=decoder_attention_mask,\n", + " head_mask=head_mask,\n", + " decoder_head_mask=decoder_head_mask,\n", + " cross_attn_head_mask=cross_attn_head_mask,\n", + " encoder_outputs=encoder_outputs,\n", + " past_key_values=past_key_values,\n", + " inputs_embeds=inputs_embeds,\n", + " decoder_inputs_embeds=decoder_inputs_embeds,\n", + " labels=labels,\n", + " use_cache=use_cache,\n", + " output_attentions=output_attentions,\n", + " output_hidden_states=output_hidden_states,\n", + " return_dict=return_dict,\n", + " )\n", + "\n", + " if output.decoder_hidden_states is not None:\n", + " last_hidden_state = output.decoder_hidden_states[-1]\n", + " value_predictions = self.critic_head(last_hidden_state).squeeze(-1)\n", + " else:\n", + " value_predictions = None\n", + "\n", + " loss = None\n", + " if labels is not None:\n", + " loss_fct = nn.CrossEntropyLoss(ignore_index=self.config.pad_token_id)\n", + " loss = loss_fct(output.logits.view(-1, self.config.vocab_size), labels.view(-1))\n", + "\n", + " return CompressionOutput(\n", + " loss=loss,\n", + " value_predictions=value_predictions,\n", + " logits=output.logits,\n", + " past_key_values=output.past_key_values,\n", + " decoder_hidden_states=output.decoder_hidden_states,\n", + " decoder_attentions=output.decoder_attentions,\n", + " cross_attentions=output.cross_attentions,\n", + " encoder_last_hidden_state=output.encoder_last_hidden_state,\n", + " encoder_hidden_states=output.encoder_hidden_states,\n", + " encoder_attentions=output.encoder_attentions,\n", + " )\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "XMVtNmiu-30c" + }, + "outputs": [], + "source": [ + "import transformers\n", + "import transformers.modeling_outputs\n", + "\n", + "\n", + "class DecompressionConfig(transformers.T5Config): ...\n", + "\n", + "\n", + "class DecompressionModel(transformers.T5ForConditionalGeneration): ..." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "id": "-OTuhuS295RZ" + }, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "device = torch.device(\"cuda:1\" if torch.cuda.is_available() else \"cpu\")\n", + "MODEL_PATH = Path(\"./data/models/token-dethcod/a2c-v1\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qm6-SLkqw4bA" + }, + "source": [ + "### Load Model" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "g4wYGk_fAkHY", + "outputId": "a719034f-75ab-4924-ccdd-1b9d7b2c02c0" + }, + "outputs": [], + "source": [ + "from transformers import BitsAndBytesConfig\n", + "\n", + "quantization_config = None\n", + "# quantization_config = BitsAndBytesConfig(load_in_8bit=True, device_map=\"auto\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "bZRSpc8ow4bA", + "outputId": "ac709f40-8c80-4058-fb1f-15b448bccc1e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading google-t5/t5-small\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Some weights of CompressionModel were not initialized from the model checkpoint at google-t5/t5-small and are newly initialized: ['critic_head.bias', 'critic_head.weight']\n", + "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n" + ] + } + ], + "source": [ + "LOAD_LATEST = False\n", + "\n", + "if LOAD_LATEST:\n", + " compressor = CompressionModel.from_pretrained(MODEL_PATH / \"compressor\").to(device)\n", + " decompressor = DecompressionModel.from_pretrained(MODEL_PATH / \"decompressor\").to(device)\n", + "\n", + "else:\n", + " print(f\"Loading {MODEL_ID}\")\n", + " compressor = CompressionModel.from_pretrained(MODEL_ID, quantization_config=quantization_config).to(device)\n", + " compressor.critic_head.reset_parameters()\n", + " decompressor = DecompressionModel.from_pretrained(MODEL_ID, quantization_config=quantization_config).to(device)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "y8RxmtZt5hLX", + "outputId": "798a5570-5d27-4465-c18e-5127fa699267" + }, + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'peft'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[11], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpeft\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m LoraConfig, get_peft_model\n\u001b[1;32m 3\u001b[0m lora_config \u001b[38;5;241m=\u001b[39m LoraConfig(\n\u001b[1;32m 4\u001b[0m r\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m16\u001b[39m,\n\u001b[1;32m 5\u001b[0m lora_alpha\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m16\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 8\u001b[0m modules_to_save\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdecode_head\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 9\u001b[0m )\n\u001b[1;32m 10\u001b[0m lora_compressor \u001b[38;5;241m=\u001b[39m get_peft_model(compressor, lora_config)\u001b[38;5;241m.\u001b[39mto(device, torch\u001b[38;5;241m.\u001b[39mfloat32)\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'peft'" + ] + } + ], + "source": [ + "from peft import LoraConfig, get_peft_model\n", + "\n", + "lora_config = LoraConfig(\n", + " r=16,\n", + " lora_alpha=16,\n", + " lora_dropout=0.1,\n", + " bias=\"lora_only\",\n", + " modules_to_save=['decode_head'],\n", + ")\n", + "lora_compressor = get_peft_model(compressor, lora_config).to(device, torch.float32)\n", + "lora_decompressor = get_peft_model(decompressor, lora_config).to(device, torch.float32)\n", + "\n", + "trainable_params = 0\n", + "all_params = 0\n", + "\n", + "for _, param in lora_compressor.named_parameters():\n", + " all_params += param.numel()\n", + " if param.requires_grad:\n", + " trainable_params += param.numel()\n", + "\n", + "print(f'Trainable parameters: {trainable_params} | Total parameters: {all_params} | trainable%: {trainable_params / all_params * 100}')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WeKAyrQz5k_k" + }, + "source": [ + "## Train" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "id": "nbJccLQa_TKV" + }, + "outputs": [], + "source": [ + "# TODO: Log these to wandb\n", + "COMPRESSOR_LR = 1e-4\n", + "DECOMPRESSOR_LR = 1e-4\n", + "CRITIC_BIAS_LR = 1e-4\n", + "\n", + "# Create parameter groups\n", + "param_groups = [\n", + " {\"params\": [param for name, param in compressor.named_parameters() if name != \"critic_head.bias\"], \"lr\": COMPRESSOR_LR},\n", + " {\"params\": [compressor.critic_head.bias], \"lr\": CRITIC_BIAS_LR},\n", + "]\n", + "\n", + "# Define optimizer with parameter groups\n", + "compressor_optimizer = torch.optim.Adam(param_groups)\n", + "decompressor_optimizer = torch.optim.Adam(decompressor.parameters(), lr=DECOMPRESSOR_LR)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "id": "zioTdU4gA2J2" + }, + "outputs": [], + "source": [ + "import math\n", + "\n", + "BATCH_SIZE = 16\n", + "REWARD_SCALING = 0.01\n", + "MAX_TOKEN_COST = math.log(compressor.config.vocab_size)\n", + "\n", + "train_dataset = dataset\n", + "data_loader = torch.utils.data.DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)\n", + "\n", + "SCHEDULING_STEPS = len(data_loader) * 1.0e-2 # Schedule over 30% of an epoch\n", + "PRETRAINING_STEPS = len(data_loader) * 2.0e-2 # Schedule over 10% of an epoch" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "id": "SUo_c6cyTx2Y", + "outputId": "317d1857-2c8e-45a7-ada8-99ef974f8124" + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "043634409034498db038c033c0573506", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.01111232057834665, max=1.0)…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "wandb version 0.18.7 is available! To upgrade, please run:\n", + " $ pip install wandb --upgrade" ], - "source": [ - "with tqdm.tqdm(range(10000)) as pbar:\n", - " for _ in pbar:\n", - " advantage = (qs - bias+val_tmp) * action_mask\n", - " num_actions = action_mask.sum()\n", - " expected_advantage = advantage.sum() / num_actions\n", - " critic_loss = (advantage * advantage).sum() / num_actions\n", - "\n", - " optim_tmp.zero_grad()\n", - " critic_loss.backward()\n", - " optim_tmp.step()\n", - "\n", - " pbar.set_postfix({\n", - " \"critic_loss\": critic_loss.item(),\n", - " \"bias\": bias.item(),\n", - " \"E(adv)\": expected_advantage.item(),\n", - " })" + "text/plain": [ + "" ] + }, + "metadata": {}, + "output_type": "display_data" }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "WgiosFdvw4bD", - "outputId": "fcdd54bb-d839-4967-bf5e-055b457d5a6b" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[0;31mSignature:\u001b[0m \u001b[0mpbar\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_postfix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mordered_dict\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrefresh\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mDocstring:\u001b[0m\n", - "Set/modify postfix (additional stats)\n", - "with automatic formatting based on datatype.\n", - "\n", - "Parameters\n", - "----------\n", - "ordered_dict : dict or OrderedDict, optional\n", - "refresh : bool, optional\n", - " Forces refresh [default: True].\n", - "kwargs : dict, optional\n", - "\u001b[0;31mFile:\u001b[0m ~/.conda/envs/dethcod/lib/python3.12/site-packages/tqdm/std.py\n", - "\u001b[0;31mType:\u001b[0m method" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "QlzjNo7hw4bD", - "outputId": "9fafc9f1-b379-4d4d-9ab6-97098c868a90" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[-5.5506e+02, -5.4466e+02, -5.3428e+02, -5.2390e+02, -5.1354e+02,\n", - " -5.0315e+02, -4.9278e+02, -4.8239e+02, -4.7201e+02, -4.6163e+02,\n", - " -4.5126e+02, -4.4088e+02, -4.3051e+02, -4.2013e+02, -4.0975e+02,\n", - " -3.9937e+02, -3.8900e+02, -3.7862e+02, -3.6824e+02, -3.5787e+02,\n", - " -3.4748e+02, -3.3710e+02, -3.2673e+02, -3.1635e+02, -3.0597e+02,\n", - " -2.9560e+02, -2.8522e+02, -2.7484e+02, -2.6446e+02, -2.5409e+02,\n", - " -2.4371e+02, -2.3333e+02, -2.2296e+02, -2.1259e+02, -2.0221e+02,\n", - " -1.9183e+02, -1.8145e+02, -1.7107e+02, -1.6069e+02, -1.5032e+02,\n", - " -1.3994e+02, -1.2957e+02, -1.1919e+02, -1.0881e+02, -9.8437e+01,\n", - " -8.8061e+01, -7.7695e+01, -6.7325e+01, -5.6955e+01, -4.6587e+01,\n", - " -3.6221e+01, -2.5858e+01, -1.5668e+01, -6.5123e+00, -8.2068e-01,\n", - " 2.7582e+00, 7.3580e+00, 1.2474e+01, 1.8027e+01, 6.2206e+00,\n", - " -2.8173e+00, -2.7255e+00, -4.1592e+00, -4.9613e+00, -5.0861e+00,\n", - " -4.2922e+00, -2.4503e+00, -8.0855e+00, -6.7183e+00, -6.2532e+00,\n", - " -5.2057e+00, -3.8802e+00, -2.8207e+00, -1.8160e+00, -4.2023e-01,\n", - " 1.9111e+00, 5.3523e+00, -3.0737e-01, 4.8187e-01, 1.0493e+00,\n", - " 1.6085e+00, 1.7335e+00, 1.7702e+00, 2.3609e+00, 3.6797e+00,\n", - " 5.6088e+00, 8.2060e+00, -3.3884e-01, 9.0759e-01, 1.6042e+00,\n", - " 1.4818e+00, 8.2422e-01, 1.2283e-01, -1.6498e-01, 3.6163e-02,\n", - " 7.7374e-01, 2.1222e+00, 4.0525e+00, 6.5868e+00, -3.6545e-01,\n", - " -1.8132e+00, 6.5227e+00, 4.3600e-01, -5.2078e+00, -9.1431e+00,\n", - " -1.0936e+01, -1.1166e+01, -1.1241e+01, -1.1219e+01, -1.0911e+01,\n", - " -1.0115e+01, -8.4936e+00, -6.1831e+00, 5.1857e+00, 3.8669e+00,\n", - " 2.7796e+00, 1.1535e+00, -8.0132e-01, -2.3248e+00, -4.1693e+00,\n", - " -5.5643e+00, -6.8678e+00, -8.3083e+00, -9.9194e+00, -1.1254e+01,\n", - " -1.1620e+01, -1.0930e+01, -9.9229e+00],\n", - " [-5.5213e+02, -5.4171e+02, -5.3133e+02, -5.2095e+02, -5.1076e+02,\n", - " -5.0020e+02, -4.8982e+02, -4.7944e+02, -4.6907e+02, -4.5869e+02,\n", - " -4.4831e+02, -4.3794e+02, -4.2757e+02, -4.1719e+02, -4.0680e+02,\n", - " -3.9642e+02, -3.8605e+02, -3.7567e+02, -3.6529e+02, -3.5492e+02,\n", - " -3.4454e+02, -3.3416e+02, -3.2379e+02, -3.1341e+02, -3.0303e+02,\n", - " -2.9266e+02, -2.8228e+02, -2.7193e+02, -2.6152e+02, -2.5114e+02,\n", - " -2.4077e+02, -2.3039e+02, -2.2001e+02, -2.0964e+02, -1.9926e+02,\n", - " -1.8889e+02, -1.7851e+02, -1.6813e+02, -1.5783e+02, -1.4738e+02,\n", - " -1.3701e+02, -1.2663e+02, -1.1640e+02, -1.0589e+02, -9.5695e+01,\n", - " -8.5355e+01, -7.4843e+01, -6.5327e+01, -5.4248e+01, -4.5300e+01,\n", - " -3.5989e+01, -2.7906e+01, -3.1260e+01, -3.2396e+01, -2.9748e+01,\n", - " -2.5772e+01, -2.1221e+01, -1.5817e+01, -1.0124e+01, -1.3956e+01,\n", - " -1.5293e+01, -1.3594e+01, -1.0477e+01, -5.7531e+00, -8.0532e+00,\n", - " -5.9148e+00, -3.9499e+00, -1.5123e+01, -1.6572e+01, -1.5942e+01,\n", - " -1.4201e+01, -1.1458e+01, -8.2478e+00, -4.1917e+00, 3.7396e-01,\n", - " 5.2318e+00, 1.0585e+01, 2.5369e+00, 6.6302e-01, -2.0770e-01,\n", - " 5.7397e-01, 1.9963e+00, 4.0958e+00, 6.4489e+00, 9.4856e+00,\n", - " 1.2853e+01, 1.6455e+01, 2.9043e+00, 2.2486e+00, 8.7698e-01,\n", - " -1.0452e-01, -7.5183e-01, -7.4478e-01, 3.3536e-01, 2.6843e+00,\n", - " 6.1802e+00, 1.3419e+00, 1.2287e+01, 2.2991e+01, 5.7366e+00,\n", - " 2.9105e-01, -5.8695e+00, -8.7687e+00, -9.3900e+00, -9.0129e+00,\n", - " -7.7434e+00, -5.4550e+00, -2.2928e+00, 1.9277e+00, 7.0884e+00,\n", - " 1.2964e+01, 1.9726e+01, 2.7171e+01, 1.8657e+01, 1.5064e+01,\n", - " 1.2530e+01, 1.1633e+01, 1.1649e+01, 1.2178e+01, 1.2119e+01,\n", - " 1.1053e+01, 9.7535e+00, 9.3529e+00, 1.0518e+01, 1.3482e+01,\n", - " 1.7864e+01, 2.3196e+01, 2.8919e+01]], device='cuda:1',\n", - " grad_fn=)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + "Tracking run with wandb version 0.16.6" ], - "source": [ - "advantage" + "text/plain": [ + "" ] + }, + "metadata": {}, + "output_type": "display_data" }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "QTmN4OBdw4bD", - "outputId": "58688d92-d249-405e-82d1-45f8392feb97" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor(200, device='cuda:1')" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241119_124811-391rf7id" ], - "source": [ - "action_mask.sum()" + "text/plain": [ + "" ] + }, + "metadata": {}, + "output_type": "display_data" }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "9Gb3kVLkw4bG", - "outputId": "290d9d5a-1da7-48d3-e1d7-d763845bcace" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[9.2983e-06, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " 2.3842e-07, 9.5367e-07, 2.8610e-06, 8.1062e-06, 1.3590e-05, 2.7775e-05,\n", - " 8.0701e-05, 2.9488e-04, 8.9534e-04, 2.2504e-03, 3.2974e-03, 6.3756e-03,\n", - " 1.6895e-02, 6.8286e-02, 2.1855e-01, 5.3514e-01, 8.1005e-01, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, 9.1202e+01],\n", - " [1.5736e-05, -0.0000e+00, -0.0000e+00, 1.1921e-07, 1.1921e-07, 1.1921e-07,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, 2.3842e-07, 3.5763e-07,\n", - " 7.1526e-07, 2.9802e-06, 1.1206e-05, 3.8861e-05, 8.2132e-05, 2.3815e-04,\n", - " 9.1130e-04, 3.5617e-03, 1.0967e-02, 3.0503e-02, 2.9737e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", - " -0.0000e+00, -0.0000e+00, -0.0000e+00, 1.0006e+02]], device='cuda:1')" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + "Syncing run Token Training to Weights & Biases (docs)
" ], - "source": [ - "action_logits" + "text/plain": [ + "" ] + }, + "metadata": {}, + "output_type": "display_data" }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "9-Ex1IKEw4bG", - "outputId": "c6053fe6-5dd0-4595-957e-df5b9fc75dfa" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(tensor([-1099.6810, -1087.6995, -1076.0786, -1063.6698, -1054.7687, -1046.5447,\n", - " -1037.6260, -1027.8066, -1018.0566, -1007.5678, -995.8646, -985.5587,\n", - " -977.1706, -966.2009, -955.0208, -943.8681, -934.0468, -923.2490,\n", - " -912.6065, -899.9257, -890.4675, -879.4435, -870.5907, -859.1940,\n", - " -845.0573, -835.8955, -825.3179, -813.2614, -802.4627, -791.4663,\n", - " -781.6210, -771.6415, -761.0430, -750.6395, -741.1759, -729.8900,\n", - " -719.4247, -708.3924, -698.3824, -689.5949, -678.8000, -668.8644,\n", - " -657.7481, -646.4171, -636.8819, -628.0941, -618.0164, -608.4584,\n", - " -597.8752, -586.1464, -575.6812, -566.5031, -557.1078, -548.1906,\n", - " -537.7205, -525.3519, -514.1478, -503.8547, -494.7173, -481.8814,\n", - " -471.4543, -462.1197, -451.7022, -438.7026, -427.2851, -417.7741,\n", - " -409.7844, -398.9852, -388.6053, -377.3386, -367.8718, -357.7217,\n", - " -345.6424, -336.0607, -324.9157, -313.4325, -304.9853, -294.3703,\n", - " -284.6585, -274.1472, -264.1192, -253.2724, -243.0500, -233.2437,\n", - " -220.8721, -210.5932, -202.5967, -193.7442, -183.4849, -173.7296,\n", - " -160.4890, -148.3543, -139.0402, -131.2023, -124.4018, -115.6297,\n", - " -103.3717, -93.1214, -84.9352, -70.5845], device='cuda:1',\n", - " grad_fn=),\n", - " tensor([-1083.6101, -1073.2327, -1062.8552, -1052.4777, -1042.1002, -1031.7227,\n", - " -1021.3452, -1010.9678, -1000.5903, -990.2128, -979.8353, -969.4578,\n", - " -959.0803, -948.7029, -938.3254, -927.9479, -917.5704, -907.1929,\n", - " -896.8154, -886.4380, -876.0605, -865.6830, -855.3055, -844.9280,\n", - " -834.5505, -824.1731, -813.7956, -803.4181, -793.0406, -782.6631,\n", - " -772.2856, -761.9081, -751.5307, -741.1532, -730.7757, -720.3983,\n", - " -710.0208, -699.6432, -689.2657, -678.8883, -668.5107, -658.1333,\n", - " -647.7559, -637.3783, -627.0009, -616.6234, -606.2458, -595.8684,\n", - " -585.4909, -575.1134, -564.7360, -554.3585, -543.9810, -533.6035,\n", - " -523.2260, -512.8485, -502.4711, -492.0936, -481.7161, -471.3386,\n", - " -460.9611, -450.5836, -440.2061, -429.8287, -419.4512, -409.0737,\n", - " -398.6962, -388.3187, -377.9413, -367.5638, -357.1863, -346.8088,\n", - " -336.4313, -326.0538, -315.6764, -305.2989, -294.9214, -284.5439,\n", - " -274.1664, -263.7889, -253.4115, -243.0340, -232.6565, -222.2790,\n", - " -211.9015, -201.5240, -191.1465, -180.7691, -170.3916, -160.0141,\n", - " -149.6366, -139.2591, -128.8817, -118.5042, -108.1267, -97.7492,\n", - " -87.3717, -76.9942, -66.6168, -56.2393], device='cuda:1'))" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + " View project at https://wandb.ai/chihuahuas/DETHCOD" ], - "source": [ - "values[0], qs[0]" + "text/plain": [ + "" ] + }, + "metadata": {}, + "output_type": "display_data" }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Mpfxu39uw4bG", - "outputId": "27cc1fc5-890a-484b-951e-a0a17e17ea01" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[[ 42.5565, -7.8072, 29.3323, ..., -32.0589, -33.0385, -35.3182],\n", - " [ 23.7275, -6.8322, 26.1425, ..., -38.0214, -39.0071, -41.5004],\n", - " [ 27.3845, -11.7691, 26.7946, ..., -36.9438, -37.9392, -40.4390],\n", - " ...,\n", - " [ 8.6169, -19.3931, -13.6451, ..., -45.4590, -46.8009, -46.7714],\n", - " [ 9.2576, -19.5066, -13.6655, ..., -45.5242, -46.8551, -46.8182],\n", - " [ 10.3809, -21.2369, -14.6508, ..., -45.2848, -46.5306, -46.4914]],\n", - "\n", - " [[ 37.7327, -5.0951, 26.8845, ..., -32.0686, -33.0935, -35.2686],\n", - " [ 18.1861, -3.8062, 25.1262, ..., -38.5185, -39.5455, -41.9225],\n", - " [ 20.0888, -9.5134, 26.6477, ..., -37.9658, -38.9319, -41.2657],\n", - " ...,\n", - " [ 7.4155, -23.2394, -13.5891, ..., -48.8296, -50.1104, -50.0522],\n", - " [ 7.9775, -23.4906, -13.4194, ..., -48.8065, -50.0781, -50.0124],\n", - " [ 9.0720, -25.4228, -14.5521, ..., -48.0591, -49.2677, -49.1962]]],\n", - " device='cuda:1')" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/391rf7id" ], - "source": [ - "action_distributions" + "text/plain": [ + "" ] + }, + "metadata": {}, + "output_type": "display_data" }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "5rfN0jm2w4bG", - "outputId": "6c092a3c-e588-4744-9a73-ec8d6d37ffce" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } + "data": { + "text/html": [ + "" ], - "source": [ - "plt.plot(advantage[0].cpu().detach())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "eWtEiSe0RZqa" - }, - "outputs": [], - "source": [ - "import random\n", - "\n", - "sample = random.choice(dataset)\n", - "print(repr(sample[\"text\"]))\n", - "\n", - "input_ids = tokenizer(\n", - " batch[\"text\"],\n", - " return_tensors=\"pt\",\n", - " padding=True,\n", - " truncation=True,\n", - ").input_ids.to(device)\n", - "\n", - "with torch.no_grad():\n", - " compressed = compressor.generate(input_ids=input_ids, generation_config=generation_config)\n", - " print(repr(tokenizer.decode(compressed.sequences[0])))\n", - " decompressed = decompressor.forward(input_ids=compressed.sequences, labels=input_ids)\n", - "\n", - "actions = compressed.sequences[..., 1:]\n", - "action_distributions = torch.stack(compressed.logits).transpose(0, 1)\n", - "values = compressor.forward(input_ids=input_ids, decoder_input_ids=compressed.sequences).value_predictions[..., :-1]\n", - "action_mask = actions != generation_config.pad_token_id\n", - "is_pad = actions == generation_config.pad_token_id\n", - "is_eos = actions == generation_config.eos_token_id\n", - "compressed_length = actions.size(-1) - is_pad.logical_or(is_eos).sum(dim=-1)\n", - "\n", - "losses = F.cross_entropy(\n", - " decompressed.logits.flatten(0, -2),\n", - " target=input_ids.flatten(),\n", - " ignore_index=0,\n", - " reduction=\"none\",\n", - ").view(input_ids.shape)\n", - "decompressor_loss = losses.mean()\n", - "\n", - "sequence_compression_loss = losses.detach().sum(dim=-1)\n", - "rewards = torch.where(\n", - " actions == generation_config.eos_token_id,\n", - " -sequence_compression_loss.unsqueeze(-1),\n", - " -TOKEN_COST,\n", - ") * action_mask\n", - "qs = rewards.flip(dims=[-1]).cumsum(dim=-1).flip(dims=[-1])\n", - "\n", - "advantage = (qs - values) * action_mask\n", - "critic_loss = (advantage * advantage).mean()\n", - "\n", - "action_logits = F.cross_entropy(\n", - " action_distributions.flatten(0, -2),\n", - " target=actions.flatten(),\n", - " ignore_index=0,\n", - " reduction=\"none\",\n", - ").view(actions.shape)\n", - "actor_loss = (action_logits * advantage.detach()).mean()\n", - "\n", - "print(f\"actor_loss={actor_loss}\")\n", - "print(f\"critic_loss={critic_loss}\")\n", - "print(f\"reward={rewards.sum(dim=-1).mean()}\")\n", - "print(f\"decompressor_loss={decompressor_loss}\")\n", - "print(f\"accuracy={(-losses.sum(dim=-1)).exp().mean()}\")\n", - "print(f\"compressed_size={compressed_length.float().mean()}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "3IceDKUVw4bG" - }, - "outputs": [], - "source": [ - "actions[2][4] = 1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "C6M4pehdw4bG" - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "qRQ23pIHw4bH" - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "08ZGGXx5w4bH" - }, - "outputs": [], - "source": [ - "actions" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "EWH18Ssyw4bH" - }, - "outputs": [], - "source": [ - "_61.tolist()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "SYyxH35jw4bH" - }, - "outputs": [], - "source": [ - "tokenizer.decode(compressed[0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "PYiKrtM2M03J" - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "FLVMLQIqQXCf" - }, - "outputs": [], - "source": [ - "action_logits" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "PfBhV45yw4bH" - }, - "outputs": [], - "source": [ - "compressed[0, 1] = 4" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "oxbMaMA1w4bH" - }, - "outputs": [], - "source": [ - "values, indices = compression_output.logits[0, -1].sort(descending=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "W1LgK-jbw4bH" - }, - "outputs": [], - "source": [ - "indices" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "pLLIgKM4w4bH" - }, - "outputs": [], - "source": [ - "F.cross_entropy(\n", - " compression_output.logits[:, :-1, :].view(-1, num_ids),\n", - " target=compressed[:, 1:].flatten(),\n", - " ignore_index=0,\n", - " reduction='none',\n", - ") * advantage.flatten()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "e2T85EARPdwI" - }, - "outputs": [], - "source": [ - "compression_output.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "eAIEFx4jw4bI" - }, - "outputs": [], - "source": [ - "len(action_logits)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "f8fWsj1Rw4bI" - }, - "outputs": [], - "source": [ - "compressed" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "0n7pvXSLw4bI" - }, - "outputs": [], - "source": [ - "sample[\"text\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "GtKo3PPGQf0J" - }, - "outputs": [], - "source": [ - "advantage" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "VXhr1x1tQhII" - }, - "outputs": [], - "source": [ - "losses" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "fLAz9DwoN5np" - }, - "outputs": [], - "source": [ - "reward" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "xIKY8_DwNa4l" - }, - "outputs": [], - "source": [ - "len_compressed" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "5zxqYdtCNLn7" - }, - "outputs": [], - "source": [ - "advantage" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "aDveEsAPMsQt" - }, - "outputs": [], - "source": [ - "actor_loss" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "SiJGEKx2MtlU" - }, - "outputs": [], - "source": [ - "critic_loss" + "text/plain": [ + "" ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import wandb\n", + "\n", + "wandb.init(\n", + " name = \"Token Training\",\n", + " project=\"DETHCOD\",\n", + " config={\n", + " \"compressor_model_config\": compressor.config.to_dict(),\n", + " \"decompressor_model_config\": decompressor.config.to_dict(),\n", + " # TODO: Add other parameters\n", + " },\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "id": "DiB9sOSVw4bB" + }, + "outputs": [], + "source": [ + "class TokenCostScheduler:\n", + " def __init__(self, total_steps, max_token_cost, schedule_fn=None):\n", + " self.total_steps = total_steps\n", + " self.max_token_cost = max_token_cost\n", + " self.step_count = 0\n", + "\n", + " linear_schedule = lambda self: min(self.step_count / self.total_steps, 1.0) * self.max_token_cost\n", + " # If no schedule function is provided, default to linear schedule\n", + " self.schedule_fn = schedule_fn if schedule_fn else linear_schedule\n", + "\n", + " def get_token_cost(self):\n", + " # Get the current token cost based on the schedule\n", + " token_cost = self.schedule_fn(self)\n", + " self.step_count += 1 # Increment the step count\n", + " return token_cost" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "id": "YRjMbckLw4bB", + "outputId": "f6b49273-3ea8-423c-abb1-6e4b49df4bdf" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: logging graph, to disable use `wandb.watch(log_graph=False)`\n" + ] + }, + { + "ename": "ValueError", + "evalue": "You can only call `wandb.watch` once per model. Pass a new instance of the model if you need to call wandb.watch again in your code.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[30], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m graph \u001b[38;5;241m=\u001b[39m \u001b[43mwandb\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwatch\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcompressor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcritic_head\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcompressor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlm_head\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlog_freq\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m100\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlog\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mall\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlog_graph\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.11/site-packages/wandb/sdk/wandb_watch.py:103\u001b[0m, in \u001b[0;36mwatch\u001b[0;34m(models, criterion, log, log_freq, idx, log_graph)\u001b[0m\n\u001b[1;32m 96\u001b[0m wandb\u001b[38;5;241m.\u001b[39mrun\u001b[38;5;241m.\u001b[39m_torch\u001b[38;5;241m.\u001b[39madd_log_gradients_hook(\n\u001b[1;32m 97\u001b[0m model,\n\u001b[1;32m 98\u001b[0m prefix\u001b[38;5;241m=\u001b[39mprefix,\n\u001b[1;32m 99\u001b[0m log_freq\u001b[38;5;241m=\u001b[39mlog_freq,\n\u001b[1;32m 100\u001b[0m )\n\u001b[1;32m 102\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m log_graph:\n\u001b[0;32m--> 103\u001b[0m graph \u001b[38;5;241m=\u001b[39m \u001b[43mwandb\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_torch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhook_torch\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcriterion\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgraph_idx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mglobal_idx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 104\u001b[0m graphs\u001b[38;5;241m.\u001b[39mappend(graph)\n\u001b[1;32m 105\u001b[0m \u001b[38;5;66;03m# NOTE: the graph is set in run.summary by hook_torch on the backward pass\u001b[39;00m\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.11/site-packages/wandb/wandb_torch.py:311\u001b[0m, in \u001b[0;36mTorchGraph.hook_torch\u001b[0;34m(cls, model, criterion, graph_idx)\u001b[0m\n\u001b[1;32m 309\u001b[0m wandb\u001b[38;5;241m.\u001b[39mtermlog(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlogging graph, to disable use `wandb.watch(log_graph=False)`\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 310\u001b[0m graph \u001b[38;5;241m=\u001b[39m TorchGraph()\n\u001b[0;32m--> 311\u001b[0m \u001b[43mgraph\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhook_torch_modules\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcriterion\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgraph_idx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgraph_idx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 312\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m graph\n", + "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.11/site-packages/wandb/wandb_torch.py:366\u001b[0m, in \u001b[0;36mTorchGraph.hook_torch_modules\u001b[0;34m(self, module, criterion, prefix, graph_idx, parent)\u001b[0m\n\u001b[1;32m 364\u001b[0m graph \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\n\u001b[1;32m 365\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(module, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_wandb_watch_called\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m module\u001b[38;5;241m.\u001b[39m_wandb_watch_called:\n\u001b[0;32m--> 366\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 367\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mYou can only call `wandb.watch` once per model. Pass a new instance of the model if you need to call wandb.watch again in your code.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 368\u001b[0m )\n\u001b[1;32m 369\u001b[0m module\u001b[38;5;241m.\u001b[39m_wandb_watch_called \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 370\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m criterion:\n", + "\u001b[0;31mValueError\u001b[0m: You can only call `wandb.watch` once per model. Pass a new instance of the model if you need to call wandb.watch again in your code." + ] } - ], - "metadata": { - "accelerator": "GPU", + ], + "source": [ + "graph = wandb.watch((compressor.critic_head, compressor.lm_head), log_freq=100, log=\"all\", log_graph=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "81konK25w4bB" + }, + "source": [ + "### RL Training Loop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { "colab": { - "gpuType": "T4", - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.3" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "0124c91212644264aaf84fe52e26e1dd": { - "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_71f62c2eb9ad40e289c5bbcc0c95490d", - "placeholder": "​", - "style": "IPY_MODEL_bc1b308fdc1b4e80a6d04a70e75de34e", - "value": "Filter: 100%" - } - }, - "05f070c4b1294821b0874bf4ddc9d7d7": { - "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 - } - }, - "065511e68dfb4053b4f0a70ef7a91ee3": { - "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 - } - }, - "06df0c8f7b974e189272f1a91a5e28c5": { - "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": "" - } - }, - "1925655871374689a1057b008f889052": { - "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_232f001ecfd4414aba63125571389434", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_06df0c8f7b974e189272f1a91a5e28c5", - "value": 1 - } - }, - "1dc435da8c744a6282e8f7cfce8b4f2f": { - "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": "" - } - }, - "2011e26c9fde4ada959624a30d935c6b": { - "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_55a34be2f9d14d00926062efafa2d7b0", - "IPY_MODEL_1925655871374689a1057b008f889052", - "IPY_MODEL_576e75f0473145168b5d166acb903643" - ], - "layout": "IPY_MODEL_532d04fe48164a00a8db36177c9ea152" - } - }, - "22d010b51fd34ddf82627507aed81676": { - "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": "" - } - }, - "232f001ecfd4414aba63125571389434": { - "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": "20px" - } - }, - "259751f990bc4422b181c49619700334": { - "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_a1b0cd399a2d44e6a5f3431ac861d2d2", - "IPY_MODEL_b9be4ff6d92f4112aa8078e96b3838db", - "IPY_MODEL_96e4d29108ca47ea9beb7f7b1a78d79a" - ], - "layout": "IPY_MODEL_8b32e1b93368443f981ec8187016c7f2" - } - }, - "3bf1e9a699f14d709b1f81ae98bf1215": { - "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_0124c91212644264aaf84fe52e26e1dd", - "IPY_MODEL_61bc579763f6454cb6a36dc80b9068a0", - "IPY_MODEL_f056e5f5aec54fe8b3cfc121e1c24430" - ], - "layout": "IPY_MODEL_e6563f7242f3412a940b8761621eeac7" - } - }, - "4b524028a9564a61a935d10083922c4c": { - "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 - } - }, - "532d04fe48164a00a8db36177c9ea152": { - "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 - } - }, - "55a34be2f9d14d00926062efafa2d7b0": { - "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_ffbc13e493114403b6f88a67db932b15", - "placeholder": "​", - "style": "IPY_MODEL_a5c93a83de084232a6964a113aecb930", - "value": "Generating train split: " - } - }, - "576e75f0473145168b5d166acb903643": { - "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_4b524028a9564a61a935d10083922c4c", - "placeholder": "​", - "style": "IPY_MODEL_1dc435da8c744a6282e8f7cfce8b4f2f", - "value": " 1128024/0 [00:02<00:00, 387057.12 examples/s]" - } - }, - "61bc579763f6454cb6a36dc80b9068a0": { - "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_b0349099323b4b6280e3f253ab2aa033", - "max": 1128024, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_e486dae88741401a82d16c7aa84b57cf", - "value": 1128024 - } - }, - "654f5bb5e6e44858af000d593b701980": { - "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 - } - }, - "71f62c2eb9ad40e289c5bbcc0c95490d": { - "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 - } - }, - "7a87b54b7ed549bdb26958bf7f803af2": { - "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 - } - }, - "8b32e1b93368443f981ec8187016c7f2": { - "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 - } - }, - "95b6d03796e84153a5e2a6904d640659": { - "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": "" - } - }, - "96e4d29108ca47ea9beb7f7b1a78d79a": { - "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_05f070c4b1294821b0874bf4ddc9d7d7", - "placeholder": "​", - "style": "IPY_MODEL_95b6d03796e84153a5e2a6904d640659", - "value": " 2/107029 [00:17<228:26:51,  7.68s/it]" - } - }, - "a1b0cd399a2d44e6a5f3431ac861d2d2": { - "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_065511e68dfb4053b4f0a70ef7a91ee3", - "placeholder": "​", - "style": "IPY_MODEL_b2826da9f9314c1cb966b54a7b6120fe", - "value": "compression_ratio=0.85, critic_loss=5318.31, actor_loss=0.26, decompressor_loss=1.43:   0%" - } - }, - "a5c93a83de084232a6964a113aecb930": { - "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": "" - } - }, - "b0349099323b4b6280e3f253ab2aa033": { - "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 - } - }, - "b2826da9f9314c1cb966b54a7b6120fe": { - "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": "" - } - }, - "b9be4ff6d92f4112aa8078e96b3838db": { - "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": "danger", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_7a87b54b7ed549bdb26958bf7f803af2", - "max": 107029, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_dad9de6f3118448eb665a9fcb544ff68", - "value": 2 - } - }, - "bc1b308fdc1b4e80a6d04a70e75de34e": { - "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": "" - } - }, - "dad9de6f3118448eb665a9fcb544ff68": { - "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": "" - } - }, - "e486dae88741401a82d16c7aa84b57cf": { - "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": "" - } - }, - "e6563f7242f3412a940b8761621eeac7": { - "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 - } - }, - "f056e5f5aec54fe8b3cfc121e1c24430": { - "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_654f5bb5e6e44858af000d593b701980", - "placeholder": "​", - "style": "IPY_MODEL_22d010b51fd34ddf82627507aed81676", - "value": " 1128024/1128024 [02:45<00:00, 6447.57 examples/s]" - } - }, - "ffbc13e493114403b6f88a67db932b15": { - "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 - } - } - } + "base_uri": "https://localhost:8080/", + "height": 423, + "referenced_widgets": [ + "259751f990bc4422b181c49619700334", + "a1b0cd399a2d44e6a5f3431ac861d2d2", + "b9be4ff6d92f4112aa8078e96b3838db", + "96e4d29108ca47ea9beb7f7b1a78d79a", + "8b32e1b93368443f981ec8187016c7f2", + "065511e68dfb4053b4f0a70ef7a91ee3", + "b2826da9f9314c1cb966b54a7b6120fe", + "7a87b54b7ed549bdb26958bf7f803af2", + "dad9de6f3118448eb665a9fcb544ff68", + "05f070c4b1294821b0874bf4ddc9d7d7", + "95b6d03796e84153a5e2a6904d640659" + ] + }, + "id": "-71bvb9b4Rth", + "outputId": "af7ae39c-cd07-4490-ed2c-d66ef023f852" + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "631dc8f2da894161bf73307522814bc6", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/53444 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import torch\n", + "import matplotlib.pyplot as plt\n", + "\n", + "top_token_count = 100\n", + "\n", + "# Assuming `action_distributions` is the tensor of shape [100, 32128]\n", + "logits = action_distributions[1].detach().cpu() # Ensure it's on the CPU\n", + "\n", + "# Step 1: Average the logits across the first axis (dimension 0)\n", + "avg_logits = torch.mean(logits, dim=0)\n", + "\n", + "# Step 2: Get the top 50 tokens based on average logit values\n", + "top_values, top_indices = torch.topk(avg_logits, top_token_count)\n", + "\n", + "# Step 3: Convert the top indices to tokens using the tokenizer\n", + "top_tokens = tokenizer.convert_ids_to_tokens(top_indices.numpy())\n", + "\n", + "# Step 4: Plot the top 50 logits using imshow with tokens as labels\n", + "plt.figure(figsize=(10, 2))\n", + "plt.imshow(logits[..., top_indices].numpy(), cmap='viridis', aspect='auto', interpolation=\"nearest\")\n", + "plt.colorbar(label='Logit Value')\n", + "plt.yticks([]) # Hide y-axis as we only have one row\n", + "plt.xticks(range(top_token_count), top_tokens, rotation='vertical')\n", + "plt.title('Top 50 Tokens by Average Logit')\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "id": "U393aMyBw4bC", + "outputId": "faa47bfc-c434-41f9-a75d-83cb7a486888" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "device(type='cuda', index=1)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "compressor.device" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "id": "mz4_KbSNw4bC", + "outputId": "d47df08d-66da-48f5-c1bb-42dc639804c1" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sequences torch.Size([4, 27])\n", + "logits 26\n", + "past_key_values 12\n" + ] + } + ], + "source": [ + "for k, v in compressed.items():\n", + " print(k, v.shape if hasattr(v, \"shape\") else len(v))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eaQR64z2w4bC" + }, + "outputs": [], + "source": [ + "val_tmp = values.detach()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6sBjWgK0w4bC" + }, + "outputs": [], + "source": [ + "bias = nn.Parameter(torch.tensor(0.0, device=device))\n", + "optim_tmp = torch.optim.Adam(params=[bias])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1QjHh1tDw4bD" + }, + "outputs": [], + "source": [ + "# optim_tmp.param_groups[0]['betas'] = (0.99, 0.5)\n", + "optim_tmp.param_groups[0]['lr'] = 0.1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "referenced_widgets": [ + "198affb45b4f40b1beb28eb813be0481" + ] + }, + "id": "oaYc-L-hw4bD", + "outputId": "f30208f9-8296-4586-ec88-701149d7764a" + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "198affb45b4f40b1beb28eb813be0481", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/10000 [00:00)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "advantage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "QTmN4OBdw4bD", + "outputId": "58688d92-d249-405e-82d1-45f8392feb97" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor(200, device='cuda:1')" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "action_mask.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9Gb3kVLkw4bG", + "outputId": "290d9d5a-1da7-48d3-e1d7-d763845bcace" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[9.2983e-06, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " 2.3842e-07, 9.5367e-07, 2.8610e-06, 8.1062e-06, 1.3590e-05, 2.7775e-05,\n", + " 8.0701e-05, 2.9488e-04, 8.9534e-04, 2.2504e-03, 3.2974e-03, 6.3756e-03,\n", + " 1.6895e-02, 6.8286e-02, 2.1855e-01, 5.3514e-01, 8.1005e-01, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, 9.1202e+01],\n", + " [1.5736e-05, -0.0000e+00, -0.0000e+00, 1.1921e-07, 1.1921e-07, 1.1921e-07,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, 2.3842e-07, 3.5763e-07,\n", + " 7.1526e-07, 2.9802e-06, 1.1206e-05, 3.8861e-05, 8.2132e-05, 2.3815e-04,\n", + " 9.1130e-04, 3.5617e-03, 1.0967e-02, 3.0503e-02, 2.9737e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n", + " -0.0000e+00, -0.0000e+00, -0.0000e+00, 1.0006e+02]], device='cuda:1')" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "action_logits" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9-Ex1IKEw4bG", + "outputId": "c6053fe6-5dd0-4595-957e-df5b9fc75dfa" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(tensor([-1099.6810, -1087.6995, -1076.0786, -1063.6698, -1054.7687, -1046.5447,\n", + " -1037.6260, -1027.8066, -1018.0566, -1007.5678, -995.8646, -985.5587,\n", + " -977.1706, -966.2009, -955.0208, -943.8681, -934.0468, -923.2490,\n", + " -912.6065, -899.9257, -890.4675, -879.4435, -870.5907, -859.1940,\n", + " -845.0573, -835.8955, -825.3179, -813.2614, -802.4627, -791.4663,\n", + " -781.6210, -771.6415, -761.0430, -750.6395, -741.1759, -729.8900,\n", + " -719.4247, -708.3924, -698.3824, -689.5949, -678.8000, -668.8644,\n", + " -657.7481, -646.4171, -636.8819, -628.0941, -618.0164, -608.4584,\n", + " -597.8752, -586.1464, -575.6812, -566.5031, -557.1078, -548.1906,\n", + " -537.7205, -525.3519, -514.1478, -503.8547, -494.7173, -481.8814,\n", + " -471.4543, -462.1197, -451.7022, -438.7026, -427.2851, -417.7741,\n", + " -409.7844, -398.9852, -388.6053, -377.3386, -367.8718, -357.7217,\n", + " -345.6424, -336.0607, -324.9157, -313.4325, -304.9853, -294.3703,\n", + " -284.6585, -274.1472, -264.1192, -253.2724, -243.0500, -233.2437,\n", + " -220.8721, -210.5932, -202.5967, -193.7442, -183.4849, -173.7296,\n", + " -160.4890, -148.3543, -139.0402, -131.2023, -124.4018, -115.6297,\n", + " -103.3717, -93.1214, -84.9352, -70.5845], device='cuda:1',\n", + " grad_fn=),\n", + " tensor([-1083.6101, -1073.2327, -1062.8552, -1052.4777, -1042.1002, -1031.7227,\n", + " -1021.3452, -1010.9678, -1000.5903, -990.2128, -979.8353, -969.4578,\n", + " -959.0803, -948.7029, -938.3254, -927.9479, -917.5704, -907.1929,\n", + " -896.8154, -886.4380, -876.0605, -865.6830, -855.3055, -844.9280,\n", + " -834.5505, -824.1731, -813.7956, -803.4181, -793.0406, -782.6631,\n", + " -772.2856, -761.9081, -751.5307, -741.1532, -730.7757, -720.3983,\n", + " -710.0208, -699.6432, -689.2657, -678.8883, -668.5107, -658.1333,\n", + " -647.7559, -637.3783, -627.0009, -616.6234, -606.2458, -595.8684,\n", + " -585.4909, -575.1134, -564.7360, -554.3585, -543.9810, -533.6035,\n", + " -523.2260, -512.8485, -502.4711, -492.0936, -481.7161, -471.3386,\n", + " -460.9611, -450.5836, -440.2061, -429.8287, -419.4512, -409.0737,\n", + " -398.6962, -388.3187, -377.9413, -367.5638, -357.1863, -346.8088,\n", + " -336.4313, -326.0538, -315.6764, -305.2989, -294.9214, -284.5439,\n", + " -274.1664, -263.7889, -253.4115, -243.0340, -232.6565, -222.2790,\n", + " -211.9015, -201.5240, -191.1465, -180.7691, -170.3916, -160.0141,\n", + " -149.6366, -139.2591, -128.8817, -118.5042, -108.1267, -97.7492,\n", + " -87.3717, -76.9942, -66.6168, -56.2393], device='cuda:1'))" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "values[0], qs[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Mpfxu39uw4bG", + "outputId": "27cc1fc5-890a-484b-951e-a0a17e17ea01" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[[ 42.5565, -7.8072, 29.3323, ..., -32.0589, -33.0385, -35.3182],\n", + " [ 23.7275, -6.8322, 26.1425, ..., -38.0214, -39.0071, -41.5004],\n", + " [ 27.3845, -11.7691, 26.7946, ..., -36.9438, -37.9392, -40.4390],\n", + " ...,\n", + " [ 8.6169, -19.3931, -13.6451, ..., -45.4590, -46.8009, -46.7714],\n", + " [ 9.2576, -19.5066, -13.6655, ..., -45.5242, -46.8551, -46.8182],\n", + " [ 10.3809, -21.2369, -14.6508, ..., -45.2848, -46.5306, -46.4914]],\n", + "\n", + " [[ 37.7327, -5.0951, 26.8845, ..., -32.0686, -33.0935, -35.2686],\n", + " [ 18.1861, -3.8062, 25.1262, ..., -38.5185, -39.5455, -41.9225],\n", + " [ 20.0888, -9.5134, 26.6477, ..., -37.9658, -38.9319, -41.2657],\n", + " ...,\n", + " [ 7.4155, -23.2394, -13.5891, ..., -48.8296, -50.1104, -50.0522],\n", + " [ 7.9775, -23.4906, -13.4194, ..., -48.8065, -50.0781, -50.0124],\n", + " [ 9.0720, -25.4228, -14.5521, ..., -48.0591, -49.2677, -49.1962]]],\n", + " device='cuda:1')" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "action_distributions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5rfN0jm2w4bG", + "outputId": "6c092a3c-e588-4744-9a73-ec8d6d37ffce" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(advantage[0].cpu().detach())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eWtEiSe0RZqa" + }, + "outputs": [], + "source": [ + "import random\n", + "\n", + "sample = random.choice(dataset)\n", + "print(repr(sample[\"text\"]))\n", + "\n", + "input_ids = tokenizer(\n", + " batch[\"text\"],\n", + " return_tensors=\"pt\",\n", + " padding=True,\n", + " truncation=True,\n", + ").input_ids.to(device)\n", + "\n", + "with torch.no_grad():\n", + " compressed = compressor.generate(input_ids=input_ids, generation_config=generation_config)\n", + " print(repr(tokenizer.decode(compressed.sequences[0])))\n", + " decompressed = decompressor.forward(input_ids=compressed.sequences, labels=input_ids)\n", + "\n", + "actions = compressed.sequences[..., 1:]\n", + "action_distributions = torch.stack(compressed.logits).transpose(0, 1)\n", + "values = compressor.forward(input_ids=input_ids, decoder_input_ids=compressed.sequences).value_predictions[..., :-1]\n", + "action_mask = actions != generation_config.pad_token_id\n", + "is_pad = actions == generation_config.pad_token_id\n", + "is_eos = actions == generation_config.eos_token_id\n", + "compressed_length = actions.size(-1) - is_pad.logical_or(is_eos).sum(dim=-1)\n", + "\n", + "losses = F.cross_entropy(\n", + " decompressed.logits.flatten(0, -2),\n", + " target=input_ids.flatten(),\n", + " ignore_index=0,\n", + " reduction=\"none\",\n", + ").view(input_ids.shape)\n", + "decompressor_loss = losses.mean()\n", + "\n", + "sequence_compression_loss = losses.detach().sum(dim=-1)\n", + "rewards = torch.where(\n", + " actions == generation_config.eos_token_id,\n", + " -sequence_compression_loss.unsqueeze(-1),\n", + " -TOKEN_COST,\n", + ") * action_mask\n", + "qs = rewards.flip(dims=[-1]).cumsum(dim=-1).flip(dims=[-1])\n", + "\n", + "advantage = (qs - values) * action_mask\n", + "critic_loss = (advantage * advantage).mean()\n", + "\n", + "action_logits = F.cross_entropy(\n", + " action_distributions.flatten(0, -2),\n", + " target=actions.flatten(),\n", + " ignore_index=0,\n", + " reduction=\"none\",\n", + ").view(actions.shape)\n", + "actor_loss = (action_logits * advantage.detach()).mean()\n", + "\n", + "print(f\"actor_loss={actor_loss}\")\n", + "print(f\"critic_loss={critic_loss}\")\n", + "print(f\"reward={rewards.sum(dim=-1).mean()}\")\n", + "print(f\"decompressor_loss={decompressor_loss}\")\n", + "print(f\"accuracy={(-losses.sum(dim=-1)).exp().mean()}\")\n", + "print(f\"compressed_size={compressed_length.float().mean()}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3IceDKUVw4bG" + }, + "outputs": [], + "source": [ + "actions[2][4] = 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "C6M4pehdw4bG" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qRQ23pIHw4bH" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "08ZGGXx5w4bH" + }, + "outputs": [], + "source": [ + "actions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EWH18Ssyw4bH" + }, + "outputs": [], + "source": [ + "_61.tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SYyxH35jw4bH" + }, + "outputs": [], + "source": [ + "tokenizer.decode(compressed[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PYiKrtM2M03J" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FLVMLQIqQXCf" + }, + "outputs": [], + "source": [ + "action_logits" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PfBhV45yw4bH" + }, + "outputs": [], + "source": [ + "compressed[0, 1] = 4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oxbMaMA1w4bH" + }, + "outputs": [], + "source": [ + "values, indices = compression_output.logits[0, -1].sort(descending=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "W1LgK-jbw4bH" + }, + "outputs": [], + "source": [ + "indices" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pLLIgKM4w4bH" + }, + "outputs": [], + "source": [ + "F.cross_entropy(\n", + " compression_output.logits[:, :-1, :].view(-1, num_ids),\n", + " target=compressed[:, 1:].flatten(),\n", + " ignore_index=0,\n", + " reduction='none',\n", + ") * advantage.flatten()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e2T85EARPdwI" + }, + "outputs": [], + "source": [ + "compression_output.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eAIEFx4jw4bI" + }, + "outputs": [], + "source": [ + "len(action_logits)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f8fWsj1Rw4bI" + }, + "outputs": [], + "source": [ + "compressed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0n7pvXSLw4bI" + }, + "outputs": [], + "source": [ + "sample[\"text\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GtKo3PPGQf0J" + }, + "outputs": [], + "source": [ + "advantage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "VXhr1x1tQhII" + }, + "outputs": [], + "source": [ + "losses" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fLAz9DwoN5np" + }, + "outputs": [], + "source": [ + "reward" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xIKY8_DwNa4l" + }, + "outputs": [], + "source": [ + "len_compressed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5zxqYdtCNLn7" + }, + "outputs": [], + "source": [ + "advantage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "aDveEsAPMsQt" + }, + "outputs": [], + "source": [ + "actor_loss" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SiJGEKx2MtlU" + }, + "outputs": [], + "source": [ + "critic_loss" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.10" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "0124c91212644264aaf84fe52e26e1dd": { + "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_71f62c2eb9ad40e289c5bbcc0c95490d", + "placeholder": "​", + "style": "IPY_MODEL_bc1b308fdc1b4e80a6d04a70e75de34e", + "value": "Filter: 100%" + } + }, + "05f070c4b1294821b0874bf4ddc9d7d7": { + "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 + } + }, + "065511e68dfb4053b4f0a70ef7a91ee3": { + "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 + } + }, + "06df0c8f7b974e189272f1a91a5e28c5": { + "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": "" + } + }, + "1925655871374689a1057b008f889052": { + "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_232f001ecfd4414aba63125571389434", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_06df0c8f7b974e189272f1a91a5e28c5", + "value": 1 + } + }, + "1dc435da8c744a6282e8f7cfce8b4f2f": { + "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": "" + } + }, + "2011e26c9fde4ada959624a30d935c6b": { + "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_55a34be2f9d14d00926062efafa2d7b0", + "IPY_MODEL_1925655871374689a1057b008f889052", + "IPY_MODEL_576e75f0473145168b5d166acb903643" + ], + "layout": "IPY_MODEL_532d04fe48164a00a8db36177c9ea152" + } + }, + "22d010b51fd34ddf82627507aed81676": { + "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": "" + } + }, + "232f001ecfd4414aba63125571389434": { + "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": "20px" + } + }, + "259751f990bc4422b181c49619700334": { + "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_a1b0cd399a2d44e6a5f3431ac861d2d2", + "IPY_MODEL_b9be4ff6d92f4112aa8078e96b3838db", + "IPY_MODEL_96e4d29108ca47ea9beb7f7b1a78d79a" + ], + "layout": "IPY_MODEL_8b32e1b93368443f981ec8187016c7f2" + } + }, + "3bf1e9a699f14d709b1f81ae98bf1215": { + "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_0124c91212644264aaf84fe52e26e1dd", + "IPY_MODEL_61bc579763f6454cb6a36dc80b9068a0", + "IPY_MODEL_f056e5f5aec54fe8b3cfc121e1c24430" + ], + "layout": "IPY_MODEL_e6563f7242f3412a940b8761621eeac7" + } + }, + "4b524028a9564a61a935d10083922c4c": { + "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 + } + }, + "532d04fe48164a00a8db36177c9ea152": { + "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 + } + }, + "55a34be2f9d14d00926062efafa2d7b0": { + "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_ffbc13e493114403b6f88a67db932b15", + "placeholder": "​", + "style": "IPY_MODEL_a5c93a83de084232a6964a113aecb930", + "value": "Generating train split: " + } + }, + "576e75f0473145168b5d166acb903643": { + "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_4b524028a9564a61a935d10083922c4c", + "placeholder": "​", + "style": "IPY_MODEL_1dc435da8c744a6282e8f7cfce8b4f2f", + "value": " 1128024/0 [00:02<00:00, 387057.12 examples/s]" + } + }, + "61bc579763f6454cb6a36dc80b9068a0": { + "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_b0349099323b4b6280e3f253ab2aa033", + "max": 1128024, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_e486dae88741401a82d16c7aa84b57cf", + "value": 1128024 + } + }, + "654f5bb5e6e44858af000d593b701980": { + "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 + } + }, + "71f62c2eb9ad40e289c5bbcc0c95490d": { + "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 + } + }, + "7a87b54b7ed549bdb26958bf7f803af2": { + "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 + } + }, + "8b32e1b93368443f981ec8187016c7f2": { + "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 + } + }, + "95b6d03796e84153a5e2a6904d640659": { + "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": "" + } + }, + "96e4d29108ca47ea9beb7f7b1a78d79a": { + "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_05f070c4b1294821b0874bf4ddc9d7d7", + "placeholder": "​", + "style": "IPY_MODEL_95b6d03796e84153a5e2a6904d640659", + "value": " 2/107029 [00:17<228:26:51,  7.68s/it]" + } + }, + "a1b0cd399a2d44e6a5f3431ac861d2d2": { + "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_065511e68dfb4053b4f0a70ef7a91ee3", + "placeholder": "​", + "style": "IPY_MODEL_b2826da9f9314c1cb966b54a7b6120fe", + "value": "compression_ratio=0.85, critic_loss=5318.31, actor_loss=0.26, decompressor_loss=1.43:   0%" + } + }, + "a5c93a83de084232a6964a113aecb930": { + "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": "" + } + }, + "b0349099323b4b6280e3f253ab2aa033": { + "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 + } + }, + "b2826da9f9314c1cb966b54a7b6120fe": { + "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": "" + } + }, + "b9be4ff6d92f4112aa8078e96b3838db": { + "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": "danger", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7a87b54b7ed549bdb26958bf7f803af2", + "max": 107029, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_dad9de6f3118448eb665a9fcb544ff68", + "value": 2 + } + }, + "bc1b308fdc1b4e80a6d04a70e75de34e": { + "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": "" + } + }, + "dad9de6f3118448eb665a9fcb544ff68": { + "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": "" + } + }, + "e486dae88741401a82d16c7aa84b57cf": { + "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": "" + } + }, + "e6563f7242f3412a940b8761621eeac7": { + "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 + } + }, + "f056e5f5aec54fe8b3cfc121e1c24430": { + "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_654f5bb5e6e44858af000d593b701980", + "placeholder": "​", + "style": "IPY_MODEL_22d010b51fd34ddf82627507aed81676", + "value": " 1128024/1128024 [02:45<00:00, 6447.57 examples/s]" + } + }, + "ffbc13e493114403b6f88a67db932b15": { + "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": 4 } From 8f767ea96cec0ee782cda6f7d61ccc155f0d21f5 Mon Sep 17 00:00:00 2001 From: axiom <20.mahdikh.0@gmail.com> Date: Wed, 22 Jan 2025 17:50:10 +0330 Subject: [PATCH 8/8] Implement reward normalization --- TokenDethcod.ipynb | 437 ++++----- TokenDethcodEval.ipynb | 2050 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2223 insertions(+), 264 deletions(-) create mode 100644 TokenDethcodEval.ipynb diff --git a/TokenDethcod.ipynb b/TokenDethcod.ipynb index 5bebef3..bb5d776 100644 --- a/TokenDethcod.ipynb +++ b/TokenDethcod.ipynb @@ -26,6 +26,9 @@ "execution_count": 1, "metadata": { "id": "e-neGcFgTHdu", + "jupyter": { + "source_hidden": true + }, "outputId": "8ea87abe-c1a8-4a3c-82e5-6486b75e4e2a" }, "outputs": [ @@ -78,20 +81,36 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "JQb9wuBJnFOc", + "jupyter": { + "source_hidden": true + }, "outputId": "14f92a7c-92b6-4c54-cb96-7aedd2d11747" }, "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "232b0fe441ba44b4aa44cd07be90a238", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Downloading: 0%| | 0.00/36.4M [00:00 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpeft\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m LoraConfig, get_peft_model\n\u001b[1;32m 3\u001b[0m lora_config \u001b[38;5;241m=\u001b[39m LoraConfig(\n\u001b[1;32m 4\u001b[0m r\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m16\u001b[39m,\n\u001b[1;32m 5\u001b[0m lora_alpha\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m16\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 8\u001b[0m modules_to_save\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdecode_head\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 9\u001b[0m )\n\u001b[1;32m 10\u001b[0m lora_compressor \u001b[38;5;241m=\u001b[39m get_peft_model(compressor, lora_config)\u001b[38;5;241m.\u001b[39mto(device, torch\u001b[38;5;241m.\u001b[39mfloat32)\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'peft'" - ] - } - ], - "source": [ - "from peft import LoraConfig, get_peft_model\n", - "\n", - "lora_config = LoraConfig(\n", - " r=16,\n", - " lora_alpha=16,\n", - " lora_dropout=0.1,\n", - " bias=\"lora_only\",\n", - " modules_to_save=['decode_head'],\n", - ")\n", - "lora_compressor = get_peft_model(compressor, lora_config).to(device, torch.float32)\n", - "lora_decompressor = get_peft_model(decompressor, lora_config).to(device, torch.float32)\n", - "\n", - "trainable_params = 0\n", - "all_params = 0\n", - "\n", - "for _, param in lora_compressor.named_parameters():\n", - " all_params += param.numel()\n", - " if param.requires_grad:\n", - " trainable_params += param.numel()\n", - "\n", - "print(f'Trainable parameters: {trainable_params} | Total parameters: {all_params} | trainable%: {trainable_params / all_params * 100}')" + " decompressor = DecompressionModel.from_pretrained(MODEL_ID).to(device)" ] }, { @@ -544,9 +501,9 @@ "outputs": [], "source": [ "# TODO: Log these to wandb\n", - "COMPRESSOR_LR = 1e-4\n", - "DECOMPRESSOR_LR = 1e-4\n", - "CRITIC_BIAS_LR = 1e-4\n", + "COMPRESSOR_LR = 1e-5\n", + "DECOMPRESSOR_LR = 1e-5\n", + "CRITIC_BIAS_LR = 1e-5\n", "\n", "# Create parameter groups\n", "param_groups = [\n", @@ -561,7 +518,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 13, "metadata": { "id": "zioTdU4gA2J2" }, @@ -582,30 +539,23 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 14, "metadata": { "id": "SUo_c6cyTx2Y", "outputId": "317d1857-2c8e-45a7-ada8-99ef974f8124" }, "outputs": [ { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "043634409034498db038c033c0573506", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.01111232057834665, max=1.0)…" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33maxiom\u001b[0m (\u001b[33mchihuahuas\u001b[0m). Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n" + ] }, { "data": { "text/html": [ - "wandb version 0.18.7 is available! To upgrade, please run:\n", + "wandb version 0.19.0 is available! To upgrade, please run:\n", " $ pip install wandb --upgrade" ], "text/plain": [ @@ -630,7 +580,7 @@ { "data": { "text/html": [ - "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241119_124811-391rf7id" + "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241207_182501-fqvjq6vk" ], "text/plain": [ "" @@ -642,7 +592,7 @@ { "data": { "text/html": [ - "Syncing run Token Training to Weights & Biases (docs)
" + "Syncing run Token Training to Weights & Biases (docs)
" ], "text/plain": [ "" @@ -666,7 +616,7 @@ { "data": { "text/html": [ - " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/391rf7id" + " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/fqvjq6vk" ], "text/plain": [ "" @@ -678,15 +628,22 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ - "" + "" ] }, - "execution_count": 28, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "wandb: ERROR Error uploading \"diff.patch\": CommError, \n" + ] } ], "source": [ @@ -705,12 +662,18 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 15, "metadata": { - "id": "DiB9sOSVw4bB" + "id": "DiB9sOSVw4bB", + "jupyter": { + "source_hidden": true + } }, "outputs": [], "source": [ + "import math\n", + "\n", + "\n", "class TokenCostScheduler:\n", " def __init__(self, total_steps, max_token_cost, schedule_fn=None):\n", " self.total_steps = total_steps\n", @@ -725,12 +688,41 @@ " # Get the current token cost based on the schedule\n", " token_cost = self.schedule_fn(self)\n", " self.step_count += 1 # Increment the step count\n", - " return token_cost" + " return token_cost\n", + "\n", + "\n", + "class ExponentialMovingAverage:\n", + " def __init__(self, lambda_decay: float = 1.0):\n", + " \"\"\"\n", + " Initialize the EMA calculator.\n", + " :param tau_half: The characteristic time constant (half-life) for exponential decay.\n", + " \"\"\"\n", + " self.lambda_decay = lambda_decay # Decay constant λ\n", + " self.numerator = 0.0 # Weighted sum\n", + " self.denominator = 0.0 # Sum of weights\n", + "\n", + " def update(self, x: float, delta_t: float = 1.0, weight: float = 1.0):\n", + " self.decay(delta_t)\n", + " self.add(x, weight)\n", + "\n", + " return self.expected_value()\n", + "\n", + " def decay(self, delta_t: float = 1.0):\n", + " alpha = math.exp(-self.lambda_decay * delta_t) # Exponential decay factor\n", + " self.numerator *= alpha\n", + " self.denominator *= alpha\n", + "\n", + " def add(self, x: float, weight: float = 1.0):\n", + " self.numerator += x * weight\n", + " self.denominator += weight\n", + "\n", + " def expected_value(self):\n", + " return self.numerator / self.denominator\n" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 16, "metadata": { "id": "YRjMbckLw4bB", "outputId": "f6b49273-3ea8-423c-abb1-6e4b49df4bdf" @@ -740,22 +732,9 @@ "name": "stderr", "output_type": "stream", "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: logging graph, to disable use `wandb.watch(log_graph=False)`\n", "\u001b[34m\u001b[1mwandb\u001b[0m: logging graph, to disable use `wandb.watch(log_graph=False)`\n" ] - }, - { - "ename": "ValueError", - "evalue": "You can only call `wandb.watch` once per model. Pass a new instance of the model if you need to call wandb.watch again in your code.", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[30], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m graph \u001b[38;5;241m=\u001b[39m \u001b[43mwandb\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwatch\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcompressor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcritic_head\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcompressor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlm_head\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlog_freq\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m100\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlog\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mall\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlog_graph\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.11/site-packages/wandb/sdk/wandb_watch.py:103\u001b[0m, in \u001b[0;36mwatch\u001b[0;34m(models, criterion, log, log_freq, idx, log_graph)\u001b[0m\n\u001b[1;32m 96\u001b[0m wandb\u001b[38;5;241m.\u001b[39mrun\u001b[38;5;241m.\u001b[39m_torch\u001b[38;5;241m.\u001b[39madd_log_gradients_hook(\n\u001b[1;32m 97\u001b[0m model,\n\u001b[1;32m 98\u001b[0m prefix\u001b[38;5;241m=\u001b[39mprefix,\n\u001b[1;32m 99\u001b[0m log_freq\u001b[38;5;241m=\u001b[39mlog_freq,\n\u001b[1;32m 100\u001b[0m )\n\u001b[1;32m 102\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m log_graph:\n\u001b[0;32m--> 103\u001b[0m graph \u001b[38;5;241m=\u001b[39m \u001b[43mwandb\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_torch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhook_torch\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcriterion\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgraph_idx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mglobal_idx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 104\u001b[0m graphs\u001b[38;5;241m.\u001b[39mappend(graph)\n\u001b[1;32m 105\u001b[0m \u001b[38;5;66;03m# NOTE: the graph is set in run.summary by hook_torch on the backward pass\u001b[39;00m\n", - "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.11/site-packages/wandb/wandb_torch.py:311\u001b[0m, in \u001b[0;36mTorchGraph.hook_torch\u001b[0;34m(cls, model, criterion, graph_idx)\u001b[0m\n\u001b[1;32m 309\u001b[0m wandb\u001b[38;5;241m.\u001b[39mtermlog(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlogging graph, to disable use `wandb.watch(log_graph=False)`\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 310\u001b[0m graph \u001b[38;5;241m=\u001b[39m TorchGraph()\n\u001b[0;32m--> 311\u001b[0m \u001b[43mgraph\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhook_torch_modules\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcriterion\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgraph_idx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgraph_idx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 312\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m graph\n", - "File \u001b[0;32m~/.conda/envs/dethcod/lib/python3.11/site-packages/wandb/wandb_torch.py:366\u001b[0m, in \u001b[0;36mTorchGraph.hook_torch_modules\u001b[0;34m(self, module, criterion, prefix, graph_idx, parent)\u001b[0m\n\u001b[1;32m 364\u001b[0m graph \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\n\u001b[1;32m 365\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(module, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_wandb_watch_called\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m module\u001b[38;5;241m.\u001b[39m_wandb_watch_called:\n\u001b[0;32m--> 366\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 367\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mYou can only call `wandb.watch` once per model. Pass a new instance of the model if you need to call wandb.watch again in your code.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 368\u001b[0m )\n\u001b[1;32m 369\u001b[0m module\u001b[38;5;241m.\u001b[39m_wandb_watch_called \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 370\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m criterion:\n", - "\u001b[0;31mValueError\u001b[0m: You can only call `wandb.watch` once per model. Pass a new instance of the model if you need to call wandb.watch again in your code." - ] } ], "source": [ @@ -799,7 +778,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "631dc8f2da894161bf73307522814bc6", + "model_id": "1edbb81a6fbc4800b7f1062c0b3276a0", "version_major": 2, "version_minor": 0 }, @@ -831,6 +810,8 @@ "\n", "# Initialize the scheduler\n", "token_cost_scheduler = TokenCostScheduler(total_steps=SCHEDULING_STEPS, max_token_cost=MAX_TOKEN_COST)\n", + "comp_ratio_ema = ExponentialMovingAverage(1 / 400)\n", + "best_comp_ratio = 1.0\n", "\n", "with tqdm.tqdm(data_loader) as pbar:\n", " for step, batch in enumerate(pbar):\n", @@ -897,6 +878,12 @@ " compressed_size = data_costs.sum(dim=-1)\n", " decompressed_size = (input_ids != 0).sum(dim=-1) * MAX_TOKEN_COST\n", " compression_ratio = (decompressed_size / compressed_size).mean()\n", + " comp_ratio_ema.update(compression_ratio)\n", + "\n", + " if comp_ratio_ema.expected_value() > best_comp_ratio:\n", + " best_comp_ratio = comp_ratio_ema.expected_value()\n", + " compressor.save_pretrained(MODEL_PATH / \"compressor\")\n", + " decompressor.save_pretrained(MODEL_PATH / \"decompressor\")\n", "\n", " if step < PRETRAINING_STEPS:\n", " # Train the model to generate the original sequence\n", @@ -942,6 +929,9 @@ " \"compressed_size\": compressed_length.float().mean(),\n", " \"compression_ratio\": compression_ratio,\n", " \"expected_advantage\": expected_advantage,\n", + " \"advantage\": advantage[action_mask],\n", + " \"saved_compression_ratio\": best_comp_ratio,\n", + " \"compression_ratio_ema\": comp_ratio_ema.expected_value(),\n", " \"token_cost\": token_cost,\n", " }\n", " )\n" @@ -949,29 +939,80 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": { "id": "MHotTfInw4bB" }, - "outputs": [], - "source": [ - "wandb.finish()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8950bee1ecc948209f836d35bddf5570", + "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ - " 0%| | 0/53444 [00:00\n" + ] + }, + { + "data": { + "text/html": [ + "W&B sync reduced upload amount by 3.1% " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "

Run history:


accuracy▅▃▄▆▄▄▅▃▃▆▅▃█▅▃▅▁▆▁▂▂▁▁▃▃▂▃▂▁▂▂▂▁▂▁▂▃▂▄▁
actor_loss▄▄▄▄▅▄▄▅▅▁▄▃▄▅▅▄▅▃▄▅▅▄▆█▄▅▄▄▄▄▄▅▄▄▅▅▄▅▄▄
compressed_size▄▄█▅▆▄▄▄▃▄▃▄▂▂▂▂▂▂▁▁▁▁▂▁▁▂▂▁▃▁▃▁▁▁▁▁▁▁▁▁
compression_ratio▁▁▁▁▂▂▂▂▄▃▃▃▄▅▇▃▃▄▄▅▅▄▄▆▃▅▃▄▄▅▅▄▄▅▄▆▆█▅▄
compression_ratio_ema▁▁▁▁▂▂▂▃▃▃▃▄▄▅▆▇▆▇▇▆▇█▇▇▇▇▆▆▇▆▇█▇▇▇▇▇▇▇▇
critic_loss▂▃▂▂▁█▂▂▂▅▁▂▂▁▁▁▁▃▁▂▁▁▁▁▁▁▄▁▂▁▃▁▁▁▁▁▁▁▁▁
decompressor_loss▁▄▄▂▃▃▆▅▅▅▃█▃▃▅▄▄▆▅▃▄▆▄▃▄▃▅▃▃▃▄▃▅▆█▅▇▃▃▄
expected_advantage█▅▄▅▆▁▇▆▆▂▅▄▅▆▆▅▆▃▆▇▆▇▆▇▆▆▅▅▆▆▄▆▆▆▆▆▆▆▅▆
reward█▅▁▄▃▅▅▄▆▅▆▄▇▇▇▇▇▇▇▇██▇▇▇▇▆▇▆▇▅▇▇▇▇▇▇█▇▇
saved_compression_ratio ▁▂▂▂▂▃▃▃▃▄▅▆▇▇▇▇▇▇███████████████████
token_cost▁███████████████████████████████████████

Run summary:


accuracy0.0
actor_loss0.32685
compressed_size0.5
compression_ratio3.14603
compression_ratio_ema4.24513
critic_loss0.25486
decompressor_loss3.1615
expected_advantage0.43224
reward-1.3481
saved_compression_ratio4.97724
token_cost10.37748

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + " View run Token Training at: https://wandb.ai/chihuahuas/DETHCOD/runs/fqvjq6vk
View project at: https://wandb.ai/chihuahuas/DETHCOD
Synced 7 W&B file(s), 0 media file(s), 9 artifact file(s) and 2 other file(s)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Find logs at: ./wandb/run-20241207_182501-fqvjq6vk/logs" + ], + "text/plain": [ + "" ] }, "metadata": {}, @@ -979,120 +1020,7 @@ } ], "source": [ - "\n", - "with tqdm.tqdm(data_loader) as pbar:\n", - " for step, batch in enumerate(pbar):\n", - " # Get the current token cost from the scheduler\n", - " token_cost = token_cost_scheduler.get_token_cost()\n", - "\n", - " input_ids = tokenizer(\n", - " batch[\"text\"],\n", - " return_tensors=\"pt\",\n", - " padding=True,\n", - " # TODO: Test if this has any effect\n", - " truncation=True,\n", - " ).input_ids.to(device)\n", - "\n", - " compressed = compressor.generate(input_ids=input_ids, generation_config=generation_config)\n", - " decompressed = decompressor.forward(input_ids=compressed.sequences, labels=input_ids)\n", - "\n", - " full_episodes = (compressed.sequences != generation_config.eos_token_id).all(dim=-1)\n", - " sequences_copy = compressed.sequences.clone()\n", - " sequences_copy[..., full_episodes, -1] = generation_config.eos_token_id\n", - " compressed.sequences = sequences_copy\n", - "\n", - " actions = compressed.sequences[..., 1:]\n", - " # compressed.logits: [\n", - " # torch.tensor(shape=(B, V))\n", - " # ]\n", - " # (L, B, V)\n", - " # (B, L, V)\n", - " action_distributions = torch.stack(compressed.logits).transpose(0, 1)\n", - " # TODO: Give the `actions` as decoder_input_ids instead\n", - " values = compressor.forward(input_ids=input_ids, decoder_input_ids=compressed.sequences).value_predictions[..., :-1]\n", - " action_mask = actions != generation_config.pad_token_id\n", - " is_pad = actions == generation_config.pad_token_id\n", - " is_eos = actions == generation_config.eos_token_id\n", - " compressed_length = actions.size(-1) - is_pad.logical_or(is_eos).sum(dim=-1)\n", - "\n", - " losses = F.cross_entropy(\n", - " decompressed.logits.flatten(0, -2),\n", - " target=input_ids.flatten(),\n", - " ignore_index=0,\n", - " reduction=\"none\",\n", - " ).view(input_ids.shape)\n", - " decompressor_loss = losses.mean()\n", - "\n", - " sequence_compression_loss = losses.detach().sum(dim=-1)\n", - " rewards = torch.where(\n", - " actions == generation_config.eos_token_id,\n", - " -sequence_compression_loss.unsqueeze(-1),\n", - " -token_cost,\n", - " ) * action_mask * REWARD_SCALING\n", - " # TODO: Implement temporal difference learning\n", - " qs = rewards.flip(dims=[-1]).cumsum(dim=-1).flip(dims=[-1])\n", - "\n", - " advantage = (qs - values) * action_mask\n", - " num_actions = action_mask.sum()\n", - " expected_advantage = advantage.sum() / num_actions\n", - " critic_loss = (advantage * advantage).sum() / num_actions\n", - "\n", - " data_costs = torch.where(\n", - " actions == generation_config.eos_token_id,\n", - " sequence_compression_loss.unsqueeze(-1),\n", - " MAX_TOKEN_COST,\n", - " ) * action_mask\n", - " compressed_size = data_costs.sum(dim=-1)\n", - " decompressed_size = (input_ids != 0).sum(dim=-1) * MAX_TOKEN_COST\n", - " compression_ratio = (decompressed_size / compressed_size).mean()\n", - "\n", - " if step < PRETRAINING_STEPS:\n", - " # Train the model to generate the original sequence\n", - " actor_loss = super(CompressionModel, compressor).forward(input_ids=input_ids, labels=input_ids).loss\n", - "\n", - " else:\n", - " # [x] | x \\in R\n", - " # b = -ln(\\sigma e^x)\n", - " # norm = [x + b][action]\n", - " # al = x[action] - ln(sigma(e^x))\n", - " # = ln(e^x[action]) - ln(sigma(e^x))\n", - " # = ln(e^x[action]/sigma(e^x))\n", - "\n", - " # cross entropy = -ln(e^x[action]/sigma(e^x))\n", - " action_logits = F.cross_entropy(\n", - " action_distributions.flatten(0, -2),\n", - " target=actions.flatten(),\n", - " ignore_index=0,\n", - " reduction=\"none\",\n", - " ).view(actions.shape)\n", - " actor_loss = (action_logits * advantage.detach()).mean()\n", - "\n", - " compressor_loss = actor_loss + critic_loss\n", - "\n", - " pbar.set_description(f\"{compression_ratio=:.2f}, {critic_loss=:.2f}, {actor_loss=:.2f}, {decompressor_loss=:.2f}\")\n", - "\n", - " compressor_optimizer.zero_grad()\n", - " compressor_loss.backward()\n", - " compressor_optimizer.step()\n", - "\n", - " decompressor_optimizer.zero_grad()\n", - " decompressor_loss.backward()\n", - " decompressor_optimizer.step()\n", - "\n", - " with torch.no_grad():\n", - " wandb.log(\n", - " {\n", - " \"actor_loss\": actor_loss,\n", - " \"critic_loss\": critic_loss,\n", - " \"reward\": rewards.sum(dim=-1).mean(),\n", - " \"decompressor_loss\": decompressor_loss,\n", - " \"accuracy\": (-sequence_compression_loss).exp().mean(),\n", - " \"compressed_size\": compressed_length.float().mean(),\n", - " \"compression_ratio\": compression_ratio,\n", - " \"expected_advantage\": expected_advantage,\n", - " \"token_cost\": token_cost,\n", - " }\n", - " )" + "wandb.finish()" ] }, { @@ -1104,15 +1032,6 @@ "### Save" ] }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "MODEL_PATH = Path(\"./data/models/token-dethcod/a2c-v1-reward-norm\")" - ] - }, { "cell_type": "code", "execution_count": 25, @@ -1121,17 +1040,7 @@ }, "outputs": [], "source": [ - "compressor.save_pretrained(MODEL_PATH / \"compressor\")" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "id": "33cJmyN2w4bC" - }, - "outputs": [], - "source": [ + "compressor.save_pretrained(MODEL_PATH / \"compressor\")\n", "decompressor.save_pretrained(MODEL_PATH / \"decompressor\")" ] }, diff --git a/TokenDethcodEval.ipynb b/TokenDethcodEval.ipynb new file mode 100644 index 0000000..614af67 --- /dev/null +++ b/TokenDethcodEval.ipynb @@ -0,0 +1,2050 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "unSiMpj_w4a7" + }, + "source": [ + "# Token based DETHCOD" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eSX4vKTl97pS", + "scrolled": true + }, + "outputs": [], + "source": [ + "!pip install transformers wandb requests_cache datasets tqdm python-dotenv peft accelerate bitsandbytes>0.37.0" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "e-neGcFgTHdu", + "outputId": "8ea87abe-c1a8-4a3c-82e5-6486b75e4e2a" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /home/khodabandeh/.netrc\n" + ] + } + ], + "source": [ + "import os\n", + "import wandb\n", + "\n", + "try:\n", + " from dotenv import load_dotenv\n", + " # Load environment variables from .env file\n", + " load_dotenv()\n", + "\n", + "except ImportError as e:\n", + " print(f\"Error importing dotenv: {e}\")\n", + "\n", + "\n", + "# Check if running in Colab\n", + "try:\n", + " from google.colab import userdata\n", + " # If running in Colab, use userdata.get to retrieve the token\n", + " wandb.login(key=userdata.get('wandb_token'))\n", + "\n", + "except ImportError:\n", + " # If not in Colab, load the token from the environment variable\n", + " wandb_token = os.getenv('WANDB_TOKEN')\n", + " if wandb_token:\n", + " wandb.login(key=wandb_token, relogin=True)\n", + " else:\n", + " print(\"W&B token not found in environment variable. Please set WANDB_TOKEN in your environment.\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3yDIICSsnFOb" + }, + "source": [ + "## Download Data" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JQb9wuBJnFOc", + "outputId": "14f92a7c-92b6-4c54-cb96-7aedd2d11747" + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0281b1df4a3d4337acea1a6ed75c1dac", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Downloading: 0%| | 0.00/36.4M [00:00 Union[Tuple[torch.FloatTensor], CompressionOutput]:\n", + " output = super().forward(\n", + " input_ids=input_ids,\n", + " attention_mask=attention_mask,\n", + " decoder_input_ids=decoder_input_ids,\n", + " decoder_attention_mask=decoder_attention_mask,\n", + " head_mask=head_mask,\n", + " decoder_head_mask=decoder_head_mask,\n", + " cross_attn_head_mask=cross_attn_head_mask,\n", + " encoder_outputs=encoder_outputs,\n", + " past_key_values=past_key_values,\n", + " inputs_embeds=inputs_embeds,\n", + " decoder_inputs_embeds=decoder_inputs_embeds,\n", + " labels=labels,\n", + " use_cache=use_cache,\n", + " output_attentions=output_attentions,\n", + " output_hidden_states=output_hidden_states,\n", + " return_dict=return_dict,\n", + " )\n", + "\n", + " if output.decoder_hidden_states is not None:\n", + " last_hidden_state = output.decoder_hidden_states[-1]\n", + " value_predictions = self.critic_head(last_hidden_state).squeeze(-1)\n", + " else:\n", + " value_predictions = None\n", + "\n", + " loss = None\n", + " if labels is not None:\n", + " loss_fct = nn.CrossEntropyLoss(ignore_index=self.config.pad_token_id)\n", + " loss = loss_fct(output.logits.view(-1, self.config.vocab_size), labels.view(-1))\n", + "\n", + " return CompressionOutput(\n", + " loss=loss,\n", + " value_predictions=value_predictions,\n", + " logits=output.logits,\n", + " past_key_values=output.past_key_values,\n", + " decoder_hidden_states=output.decoder_hidden_states,\n", + " decoder_attentions=output.decoder_attentions,\n", + " cross_attentions=output.cross_attentions,\n", + " encoder_last_hidden_state=output.encoder_last_hidden_state,\n", + " encoder_hidden_states=output.encoder_hidden_states,\n", + " encoder_attentions=output.encoder_attentions,\n", + " )\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "XMVtNmiu-30c" + }, + "outputs": [], + "source": [ + "import transformers\n", + "import transformers.modeling_outputs\n", + "\n", + "\n", + "class DecompressionConfig(transformers.T5Config): ...\n", + "\n", + "\n", + "class DecompressionModel(transformers.T5ForConditionalGeneration): ..." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "id": "-OTuhuS295RZ" + }, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "device = torch.device(\"cuda:1\" if torch.cuda.is_available() else \"cpu\")\n", + "MODEL_PATH = Path(\"./data/models/token-dethcod/a2c-v2-reward-norm\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qm6-SLkqw4bA" + }, + "source": [ + "### Load Model" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "bZRSpc8ow4bA", + "outputId": "ac709f40-8c80-4058-fb1f-15b448bccc1e" + }, + "outputs": [], + "source": [ + "LOAD_LATEST = True\n", + "\n", + "if LOAD_LATEST:\n", + " compressor = CompressionModel.from_pretrained(MODEL_PATH / \"compressor\").to(device)\n", + " decompressor = DecompressionModel.from_pretrained(MODEL_PATH / \"decompressor\").to(device)\n", + "\n", + "else:\n", + " print(f\"Loading {MODEL_ID}\")\n", + " compressor = CompressionModel.from_pretrained(MODEL_ID, quantization_config=quantization_config).to(device)\n", + " compressor.critic_head.reset_parameters()\n", + " decompressor = DecompressionModel.from_pretrained(MODEL_ID, quantization_config=quantization_config).to(device)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WeKAyrQz5k_k" + }, + "source": [ + "## Eval" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "id": "zioTdU4gA2J2" + }, + "outputs": [], + "source": [ + "import math\n", + "\n", + "BATCH_SIZE = 16\n", + "REWARD_SCALING = 0.01\n", + "MAX_TOKEN_COST = math.log(compressor.config.vocab_size)\n", + "\n", + "train_dataset = dataset\n", + "data_loader = torch.utils.data.DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "id": "SUo_c6cyTx2Y", + "outputId": "317d1857-2c8e-45a7-ada8-99ef974f8124" + }, + "outputs": [ + { + "data": { + "text/html": [ + "Finishing last run (ID:25pvmaik) before initializing another..." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(Label(value='0.047 MB of 0.071 MB uploaded (0.004 MB deduped)\\r'), FloatProgress(value=0.663507…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "wandb: ERROR Error uploading \"requirements.txt\": CommError, \n" + ] + }, + { + "data": { + "text/html": [ + "W&B sync reduced upload amount by 5.2% " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + " View run Evaluation at: https://wandb.ai/chihuahuas/DETHCOD/runs/25pvmaik
View project at: https://wandb.ai/chihuahuas/DETHCOD
Synced 5 W&B file(s), 0 media file(s), 2 artifact file(s) and 0 other file(s)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Find logs at: ./wandb/run-20241215_171829-25pvmaik/logs" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Successfully finished last run (ID:25pvmaik). Initializing new run:
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "05172a4a8ff24a4785a3df5c9d62c633", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(Label(value='Waiting for wandb.init()...\\r'), FloatProgress(value=0.011113023866588871, max=1.0…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "wandb version 0.19.1 is available! To upgrade, please run:\n", + " $ pip install wandb --upgrade" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Tracking run with wandb version 0.16.6" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Run data is saved locally in /home/khodabandeh/Projects/dethcod/wandb/run-20241215_171835-qtzvtxmb" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Syncing run Evaluation to Weights & Biases (docs)
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + " View project at https://wandb.ai/chihuahuas/DETHCOD" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + " View run at https://wandb.ai/chihuahuas/DETHCOD/runs/qtzvtxmb" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import wandb\n", + "\n", + "wandb.init(\n", + " name = \"Evaluation\",\n", + " project=\"DETHCOD\",\n", + " config={\n", + " \"compressor_model_config\": compressor.config.to_dict(),\n", + " \"decompressor_model_config\": decompressor.config.to_dict(),\n", + " # TODO: Add other parameters\n", + " },\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YRjMbckLw4bB", + "outputId": "f6b49273-3ea8-423c-abb1-6e4b49df4bdf" + }, + "outputs": [], + "source": [ + "# graph = wandb.watch((compressor.critic_head, compressor.lm_head), log_freq=100, log=\"all\", log_graph=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "81konK25w4bB" + }, + "source": [ + "### RL Training Loop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 423, + "referenced_widgets": [ + "259751f990bc4422b181c49619700334", + "a1b0cd399a2d44e6a5f3431ac861d2d2", + "b9be4ff6d92f4112aa8078e96b3838db", + "96e4d29108ca47ea9beb7f7b1a78d79a", + "8b32e1b93368443f981ec8187016c7f2", + "065511e68dfb4053b4f0a70ef7a91ee3", + "b2826da9f9314c1cb966b54a7b6120fe", + "7a87b54b7ed549bdb26958bf7f803af2", + "dad9de6f3118448eb665a9fcb544ff68", + "05f070c4b1294821b0874bf4ddc9d7d7", + "95b6d03796e84153a5e2a6904d640659" + ] + }, + "id": "-71bvb9b4Rth", + "outputId": "af7ae39c-cd07-4490-ed2c-d66ef023f852" + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "815b3c6bca8f43ab914ed761b26e9a8c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/53444 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "

Run history:


accuracy▅▃▂▃▆▂▁▁▄▃▁▄▄▅▄▃▃▂▁▅▃▄▃▂▂▃▂▂▄▃▁▁█▂▁▁▄▁▄▃
actor_loss▃▃▅▆▃▇▄▄▅▄▄▃▆▄▄▅▂▆▅▅▇▅▆▄▄▄▅▃▇▆▅▄▂▁█▃▂▆▅▅
compressed_size▅▅▄▂▄▂▅▅▃▄▅▆▃▃▄▁▆▃▃▂▂▃▄▂▂▂▂▅▁▂▃▅█▇▁▅▆▂▅▄
compression_ratio▂▁▂▁▅▄▁▂▄▁▃▂█▆▂▃▃▁▃▅▄▃▁▅▂▇▃▃▄▃▂▁▂▁▃▁▄▅▁▃
critic_loss▄▃▁▁▄▁▂▃▂▃▂▃▂▂▁▁▅▂▂▂▁▁▁▂▃▃▂▂▁▂▂▂▃▅▁▃█▁▁▂
decompressor_loss▃▃▃▃▂▃▁▄▄▃▃▅▁▂▂▄▅▇▃▄▃▄▂▃▄▅▄▆▄▄▂▃▄▅█▄▂▄▄▃
expected_advantage▄▄▆▆▃▇▅▄▅▄▄▄▇▅▆▆▂▇▆▇▇▆▇▅▅▅▆▄▇▇▆▄▃▂█▄▁▆▆▆
reward▆▅▇▄▇▅▆▆▅▄▅▅▇▆▆▂▄▇▄█▆▄▅▆▃▆▄▆▄▅▆▃▆▅▄▁▄▂▁▅
running_compression_ratio▁█▄▃▃▃▄▄▄▄▄▄▄▄▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃
token_cost▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
total_compressed_size▁▁▁▁▂▂▂▂▂▃▃▃▃▃▃▄▄▄▄▄▅▅▅▅▅▅▆▆▆▆▆▇▇▇▇▇▇███
total_decompressed_size▁▁▁▁▂▂▂▂▂▃▃▃▃▃▃▄▄▄▄▄▅▅▅▅▅▅▆▆▆▆▆▇▇▇▇▇▇███

Run summary:


accuracy0.00253
actor_loss0.56255
compressed_size2.5
compression_ratio1.84862
critic_loss0.05163
decompressor_loss1.1767
expected_advantage0.20043
reward-0.36534
running_compression_ratio2.70787
token_cost10.37748
total_compressed_size80595864.103
total_decompressed_size218243475.95416

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + " View run Evaluation at: https://wandb.ai/chihuahuas/DETHCOD/runs/d3am86yx
View project at: https://wandb.ai/chihuahuas/DETHCOD
Synced 6 W&B file(s), 0 media file(s), 7 artifact file(s) and 2 other file(s)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Find logs at: ./wandb/run-20241205_153441-d3am86yx/logs" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "wandb.finish()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EomSPfQ1w4bC" + }, + "source": [ + "### Save" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "MODEL_PATH = Path(\"./data/models/token-dethcod/a2c-v1-reward-norm\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Hx_Iec6iw4bC" + }, + "outputs": [], + "source": [ + "compressor.save_pretrained(MODEL_PATH / \"compressor\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "33cJmyN2w4bC" + }, + "outputs": [], + "source": [ + "decompressor.save_pretrained(MODEL_PATH / \"decompressor\")" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.10" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "0124c91212644264aaf84fe52e26e1dd": { + "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_71f62c2eb9ad40e289c5bbcc0c95490d", + "placeholder": "​", + "style": "IPY_MODEL_bc1b308fdc1b4e80a6d04a70e75de34e", + "value": "Filter: 100%" + } + }, + "05f070c4b1294821b0874bf4ddc9d7d7": { + "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 + } + }, + "065511e68dfb4053b4f0a70ef7a91ee3": { + "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 + } + }, + "06df0c8f7b974e189272f1a91a5e28c5": { + "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": "" + } + }, + "1925655871374689a1057b008f889052": { + "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_232f001ecfd4414aba63125571389434", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_06df0c8f7b974e189272f1a91a5e28c5", + "value": 1 + } + }, + "1dc435da8c744a6282e8f7cfce8b4f2f": { + "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": "" + } + }, + "2011e26c9fde4ada959624a30d935c6b": { + "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_55a34be2f9d14d00926062efafa2d7b0", + "IPY_MODEL_1925655871374689a1057b008f889052", + "IPY_MODEL_576e75f0473145168b5d166acb903643" + ], + "layout": "IPY_MODEL_532d04fe48164a00a8db36177c9ea152" + } + }, + "22d010b51fd34ddf82627507aed81676": { + "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": "" + } + }, + "232f001ecfd4414aba63125571389434": { + "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": "20px" + } + }, + "259751f990bc4422b181c49619700334": { + "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_a1b0cd399a2d44e6a5f3431ac861d2d2", + "IPY_MODEL_b9be4ff6d92f4112aa8078e96b3838db", + "IPY_MODEL_96e4d29108ca47ea9beb7f7b1a78d79a" + ], + "layout": "IPY_MODEL_8b32e1b93368443f981ec8187016c7f2" + } + }, + "3bf1e9a699f14d709b1f81ae98bf1215": { + "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_0124c91212644264aaf84fe52e26e1dd", + "IPY_MODEL_61bc579763f6454cb6a36dc80b9068a0", + "IPY_MODEL_f056e5f5aec54fe8b3cfc121e1c24430" + ], + "layout": "IPY_MODEL_e6563f7242f3412a940b8761621eeac7" + } + }, + "4b524028a9564a61a935d10083922c4c": { + "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 + } + }, + "532d04fe48164a00a8db36177c9ea152": { + "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 + } + }, + "55a34be2f9d14d00926062efafa2d7b0": { + "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_ffbc13e493114403b6f88a67db932b15", + "placeholder": "​", + "style": "IPY_MODEL_a5c93a83de084232a6964a113aecb930", + "value": "Generating train split: " + } + }, + "576e75f0473145168b5d166acb903643": { + "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_4b524028a9564a61a935d10083922c4c", + "placeholder": "​", + "style": "IPY_MODEL_1dc435da8c744a6282e8f7cfce8b4f2f", + "value": " 1128024/0 [00:02<00:00, 387057.12 examples/s]" + } + }, + "61bc579763f6454cb6a36dc80b9068a0": { + "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_b0349099323b4b6280e3f253ab2aa033", + "max": 1128024, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_e486dae88741401a82d16c7aa84b57cf", + "value": 1128024 + } + }, + "654f5bb5e6e44858af000d593b701980": { + "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 + } + }, + "71f62c2eb9ad40e289c5bbcc0c95490d": { + "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 + } + }, + "7a87b54b7ed549bdb26958bf7f803af2": { + "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 + } + }, + "8b32e1b93368443f981ec8187016c7f2": { + "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 + } + }, + "95b6d03796e84153a5e2a6904d640659": { + "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": "" + } + }, + "96e4d29108ca47ea9beb7f7b1a78d79a": { + "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_05f070c4b1294821b0874bf4ddc9d7d7", + "placeholder": "​", + "style": "IPY_MODEL_95b6d03796e84153a5e2a6904d640659", + "value": " 2/107029 [00:17<228:26:51,  7.68s/it]" + } + }, + "a1b0cd399a2d44e6a5f3431ac861d2d2": { + "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_065511e68dfb4053b4f0a70ef7a91ee3", + "placeholder": "​", + "style": "IPY_MODEL_b2826da9f9314c1cb966b54a7b6120fe", + "value": "compression_ratio=0.85, critic_loss=5318.31, actor_loss=0.26, decompressor_loss=1.43:   0%" + } + }, + "a5c93a83de084232a6964a113aecb930": { + "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": "" + } + }, + "b0349099323b4b6280e3f253ab2aa033": { + "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 + } + }, + "b2826da9f9314c1cb966b54a7b6120fe": { + "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": "" + } + }, + "b9be4ff6d92f4112aa8078e96b3838db": { + "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": "danger", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7a87b54b7ed549bdb26958bf7f803af2", + "max": 107029, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_dad9de6f3118448eb665a9fcb544ff68", + "value": 2 + } + }, + "bc1b308fdc1b4e80a6d04a70e75de34e": { + "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": "" + } + }, + "dad9de6f3118448eb665a9fcb544ff68": { + "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": "" + } + }, + "e486dae88741401a82d16c7aa84b57cf": { + "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": "" + } + }, + "e6563f7242f3412a940b8761621eeac7": { + "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 + } + }, + "f056e5f5aec54fe8b3cfc121e1c24430": { + "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_654f5bb5e6e44858af000d593b701980", + "placeholder": "​", + "style": "IPY_MODEL_22d010b51fd34ddf82627507aed81676", + "value": " 1128024/1128024 [02:45<00:00, 6447.57 examples/s]" + } + }, + "ffbc13e493114403b6f88a67db932b15": { + "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": 4 +}