\n"
+ ],
+ "text/plain": [
+ " prompt \\\n",
+ "0 Por que os camelos conseguem sobreviver muito ... \n",
+ "1 Por que o celular é ruim para os humanos \n",
+ "2 O que é um polígono? \n",
+ "3 Como começo a correr? \n",
+ "4 Quais episódios da quarta temporada de Game of... \n",
+ "... ... \n",
+ "41810 Como posso ligar para você? \n",
+ "41811 Qual é o seu nome de identificação? \n",
+ "41812 Como você é chamado? \n",
+ "41813 Como você se apresenta? \n",
+ "41814 O que devo dizer quando me dirijo a você? \n",
+ "\n",
+ " completion \n",
+ "0 Os camelos podem sobreviver por longos período... \n",
+ "1 Os telefones celulares como dispositivos tecno... \n",
+ "2 Um polígono é uma figura geométrica bidimensio... \n",
+ "3 Começar uma rotina de corrida pode ser uma óti... \n",
+ "4 Michelle MacLaren dirigiu dois episódios da 4ª... \n",
+ "... ... \n",
+ "41810 Você pode me chamar de Aira. Como posso ajudá-... \n",
+ "41811 Como inteligência artificial, não tenho nome d... \n",
+ "41812 Olá! Meu nome é Aira. Como posso ajudá-lo hoje? \n",
+ "41813 Olá! Eu sou Aira, sua assistente prestativa, r... \n",
+ "41814 Ao se dirigir a mim, você pode simplesmente me... \n",
+ "\n",
+ "[41815 rows x 2 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import os\n",
+ "import pandas as pd\n",
+ "from datasets import load_dataset\n",
+ "\n",
+ "project = \"Aira-2-portuguese-560M\"\n",
+ "\n",
+ "os.makedirs(project, exist_ok=True)\n",
+ "\n",
+ "dataset = load_dataset(\"nicholasKluge/instruct-aira-dataset\", split=\"portuguese\")\n",
+ "\n",
+ "df = dataset.to_pandas()\n",
+ "\n",
+ "display(df)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "BfKTTBZqCniY"
+ },
+ "source": [
+ "3. Load `BloomTokenizerFast` and add the chosen special tokens (`'<|startofinstruction|>', '<|endofinstruction|>', '<|endofcompletion|>','<|pad|>'`)\n",
+ "4. Create demonstrations by prepending the special tokens.\n",
+ "5. Calculate the maximum length (in tokens) that the demonstrations have."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 150,
+ "referenced_widgets": [
+ "2de0ff9b7402402e988fc4339c44c1c7",
+ "d45ca83ca99f4212b16f741250569d9a",
+ "cc8cc74a351243fda39ce36395eec845",
+ "97dc26ac0f3e484596a1b2ff1791e19d",
+ "51e815f2905c4e47865cb5630e0ee9fe",
+ "315d17fde14e41fcb640ce2ae46aac40",
+ "67095ef71b494a6c90400cbe53ddc057",
+ "0e1ab0133d79402ea47ce4c83ea7f491",
+ "9ced50891d634205bc32bb5e6aa124c1",
+ "41066ac120fc4974ab128dd1a0ef81db",
+ "890a6c5f862d46a1b0b3ac682e9c24f8",
+ "e2525b4e3a3248ee9fcc37936cc5ceae",
+ "0541a883b6e1492388d34401b4a40d65",
+ "e254ab4b6ecf442a9a6f270ca359303e",
+ "d5d30b7c7768477a83653757c4b8d0e8",
+ "537de7cd9bad474699beb6edab6ff35c",
+ "c583ff9655aa4480b249a5a9370c2706",
+ "605984c1908d42fca64fb22637ffc5cf",
+ "514e30996e434b5993626e26eb858f7d",
+ "8911fef745694a28bb73241ed44f643d",
+ "cae99e7113974218ab1e28717ac24abe",
+ "5edf9983ff614d718451992121c08b80",
+ "373808ff98624394b344c4dae596f2bb",
+ "143a769f86e041ea99707f01aa7e4b7f",
+ "21c41ea0e36a41bda13aae580569786f",
+ "cc4a2e3853914238a871b5ef7290b1c3",
+ "ed6a62dc60c241199f26187436ed2d48",
+ "eab1b93db035441aba75510a369cf707",
+ "8342cad85b7d4034acc3b21547011d41",
+ "1f2c91f29c0f49da9cf367f6ac80e2d4",
+ "0588ce046a334a6fa2a29ccf62ff8178",
+ "463fb55d292f455ca55892a13fce06fb",
+ "8025ea053f864ca08bcbb713a8f89233"
+ ]
+ },
+ "id": "hfu84fWIv4f9",
+ "outputId": "10e0e9ed-78d3-459e-cbce-805ab7a67dd0"
+ },
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "2de0ff9b7402402e988fc4339c44c1c7",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Downloading (…)okenizer_config.json: 0%| | 0.00/222 [00:00, ?B/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "e2525b4e3a3248ee9fcc37936cc5ceae",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Downloading tokenizer.json: 0%| | 0.00/14.5M [00:00, ?B/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "373808ff98624394b344c4dae596f2bb",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Downloading (…)cial_tokens_map.json: 0%| | 0.00/85.0 [00:00, ?B/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n"
+ ]
+ }
+ ],
+ "source": [
+ "from transformers import BloomTokenizerFast\n",
+ "\n",
+ "model_name = \"bloom-560m\"\n",
+ "model_size = \"560M\"\n",
+ "\n",
+ "tokenizer = BloomTokenizerFast.from_pretrained(f\"bigscience/{model_name}\",\n",
+ " bos_token='<|startofinstruction|>',\n",
+ " sep_token = '<|endofinstruction|>',\n",
+ " eos_token='<|endofcompletion|>',\n",
+ " pad_token='<|pad|>')\n",
+ "\n",
+ "df['demonstrations'] = tokenizer.bos_token + df['prompt'] + tokenizer.sep_token + df['completion'] + tokenizer.eos_token\n",
+ "\n",
+ "df['length'] = df['demonstrations'].apply(lambda x: len(tokenizer.encode(x)))\n",
+ "\n",
+ "print(\"Total number of demonstrations: \", len(df))\n",
+ "print(f\"The longest demonstration is {df['length'].max()} tokens long.\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "kYvd27UdCnib"
+ },
+ "source": [
+ "6. Create the Dataset class."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "WlbAfMQ4v4gA"
+ },
+ "outputs": [],
+ "source": [
+ "import torch\n",
+ "from torch.utils.data import Dataset\n",
+ "\n",
+ "max_length = 525\n",
+ "\n",
+ "class InstructDataset(Dataset):\n",
+ "\n",
+ " def __init__(self, demonstrations, tokenizer, max_length=max_length):\n",
+ "\n",
+ " self.tokenizer = tokenizer\n",
+ " self.input_ids = []\n",
+ " self.attn_masks = []\n",
+ "\n",
+ " for demo in demonstrations:\n",
+ "\n",
+ " encodings_dict = tokenizer(demo,\n",
+ " truncation=True,\n",
+ " max_length=max_length,\n",
+ " padding=\"max_length\")\n",
+ "\n",
+ " self.input_ids.append(torch.tensor(encodings_dict['input_ids']))\n",
+ " self.attn_masks.append(torch.tensor(encodings_dict['attention_mask']))\n",
+ "\n",
+ " def __len__(self):\n",
+ " return len(self.input_ids)\n",
+ "\n",
+ " def __getitem__(self, idx):\n",
+ " return self.input_ids[idx], self.attn_masks[idx]\n",
+ "\n",
+ "dataset = InstructDataset(df.demonstrations.to_list(), tokenizer, max_length=max_length)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "lfOIsZLUCnim"
+ },
+ "source": [
+ "7. Create the `DataLoaders` and specify the `batch_size`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "cUkCNV-6v4gG"
+ },
+ "outputs": [],
+ "source": [
+ "from torch.utils.data import DataLoader, RandomSampler\n",
+ "\n",
+ "dataloader = DataLoader(\n",
+ " dataset,\n",
+ " sampler=RandomSampler(dataset),\n",
+ " batch_size=8 # 16, 6\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "_qljce5ECnip"
+ },
+ "source": [
+ "8. Load the base model (`BloomForCausalLM`)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 535,
+ "referenced_widgets": [
+ "a2fa140799724db49fe5d4aeac4b1859",
+ "daf3476a427d43ffa11087f35434def9",
+ "dbf72d62130b44b3b6f87b0665615235",
+ "e43446bd683b407dad315171531d3b94",
+ "deb72c9b6f0d40bbb05b60f1c40a439f",
+ "e503f47d1f554191a85426fd60ace4ce",
+ "2cd81c4114204843a19ccc9cb7dd4041",
+ "cc47b3678f4e44d48da66eac4d82a557",
+ "99237f17876840ce915809ba40ab94d5",
+ "87ae15f8ba9a493e82ef7dffd7f58ad1",
+ "ac5de29113b747f0be75b5afc7c41594",
+ "52f5d019b27643da80c3f87c90b2cad2",
+ "a90298d9a0a042689d53a8ed471cc58e",
+ "ff740314a7b54eafab47fc0a15cb2cd1",
+ "9b5e996d1aee45ebb2fbaba634735ca4",
+ "650b363fa67144a5aec21583200b5728",
+ "254a664cbbc54b2c972da62158892c54",
+ "c3b42dfe665444688cde9b9af40a5828",
+ "efd68fb19f4647a8b5d2117195ad9822",
+ "820708a6102d4e68b0862d077aece087",
+ "4cd98082c1ec4db98404a285d7b8a249",
+ "cea9905a7a8743479cb91b00420691d7"
+ ]
+ },
+ "id": "Rmg-5YJqv4gH",
+ "outputId": "78186a10-8a22-4d3a-a15e-2bfdb9319a63"
+ },
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "a2fa140799724db49fe5d4aeac4b1859",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Downloading (…)lve/main/config.json: 0%| | 0.00/693 [00:00, ?B/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "52f5d019b27643da80c3f87c90b2cad2",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Downloading model.safetensors: 0%| | 0.00/1.12G [00:00, ?B/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "You are resizing the embedding layer without providing a `pad_to_multiple_of` parameter. This means that the new embedding dimension will be 250684. This might induce some performance reduction as *Tensor Cores* will not be available. For more details about this, or help on choosing the correct value for resizing, refer to this guide: https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#requirements-tc\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "BloomForCausalLM(\n",
+ " (transformer): BloomModel(\n",
+ " (word_embeddings): Embedding(250684, 1024)\n",
+ " (word_embeddings_layernorm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
+ " (h): ModuleList(\n",
+ " (0-23): 24 x BloomBlock(\n",
+ " (input_layernorm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
+ " (self_attention): BloomAttention(\n",
+ " (query_key_value): Linear(in_features=1024, out_features=3072, bias=True)\n",
+ " (dense): Linear(in_features=1024, out_features=1024, bias=True)\n",
+ " (attention_dropout): Dropout(p=0.0, inplace=False)\n",
+ " )\n",
+ " (post_attention_layernorm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
+ " (mlp): BloomMLP(\n",
+ " (dense_h_to_4h): Linear(in_features=1024, out_features=4096, bias=True)\n",
+ " (gelu_impl): BloomGelu()\n",
+ " (dense_4h_to_h): Linear(in_features=4096, out_features=1024, bias=True)\n",
+ " )\n",
+ " )\n",
+ " )\n",
+ " (ln_f): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
+ " )\n",
+ " (lm_head): Linear(in_features=1024, out_features=250684, bias=False)\n",
+ ")"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from transformers import BloomForCausalLM, BloomConfig\n",
+ "\n",
+ "configuration = BloomConfig.from_pretrained(f\"bigscience/{model_name}\", output_hidden_states=False)\n",
+ "\n",
+ "model = BloomForCausalLM.from_pretrained(f\"bigscience/{model_name}\")\n",
+ "model.resize_token_embeddings(len(tokenizer))\n",
+ "\n",
+ "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
+ "\n",
+ "model.to(device)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "y8-KTEVelgy-"
+ },
+ "source": [
+ "9. Freeze some of the layers for constrained fine-tuning. This allows the model to retain some of its original capabilities after the tuning."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "B_gOcURylhup",
+ "outputId": "a8392a4a-8606-4ae7-bd57-be5260abbcb3"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Number of transformer blocks in the model: 24\n",
+ "Number of transformer blocks to un-freeze: 6\n",
+ "Number of frozen layers: 218\n",
+ "Number of trainable layers: 75\n"
+ ]
+ }
+ ],
+ "source": [
+ "UNFREEZE_LAST_N = 6\n",
+ "\n",
+ "print(\"Number of transformer blocks in the model: \", model.config.n_layer)\n",
+ "print(\"Number of transformer blocks to un-freeze: \", UNFREEZE_LAST_N)\n",
+ "\n",
+ "for parameter in model.parameters():\n",
+ " parameter.requires_grad = False\n",
+ "\n",
+ "for i, m in enumerate(model.transformer.h):\n",
+ " #Only un-freeze the last n transformer blocks\n",
+ " if i+1 > model.config.n_layer - UNFREEZE_LAST_N:\n",
+ " for parameter in m.parameters():\n",
+ " parameter.requires_grad = True\n",
+ "\n",
+ " for parameter in model.transformer.ln_f.parameters():\n",
+ " parameter.requires_grad = True\n",
+ "\n",
+ " for parameter in model.lm_head.parameters():\n",
+ " parameter.requires_grad = True\n",
+ "\n",
+ "num_frozen_layers = sum(1 for parameter in model.parameters() if not parameter.requires_grad)\n",
+ "num_trainable_layers = sum(1 for parameter in model.parameters() if parameter.requires_grad)\n",
+ "\n",
+ "print(\"Number of frozen layers:\", num_frozen_layers)\n",
+ "print(\"Number of trainable layers:\", num_trainable_layers)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "eeieIbKxCnit"
+ },
+ "source": [
+ "10. Set the training hyperparameters."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "qlbLg6tqv4gI"
+ },
+ "outputs": [],
+ "source": [
+ "from transformers import get_linear_schedule_with_warmup\n",
+ "\n",
+ "# training rounds\n",
+ "epochs = 3\n",
+ "\n",
+ "# steps at the start of training that are ignored\n",
+ "warmup_steps = 1e2\n",
+ "\n",
+ "# sample the model to test the output\n",
+ "sample_every = 400\n",
+ "\n",
+ "optimizer = torch.optim.AdamW(model.parameters(), lr = 5e-4, eps = 1e-8)\n",
+ "\n",
+ "# total steps = number of batches * number of epochs\n",
+ "total_steps = len(dataloader) * epochs\n",
+ "\n",
+ "# create the learning rate scheduler\n",
+ "scheduler = get_linear_schedule_with_warmup(optimizer,\n",
+ " num_warmup_steps = warmup_steps,\n",
+ " num_training_steps = total_steps)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "c772AMWjCniu"
+ },
+ "source": [
+ "11. Training/Validation loop. Track the carbon emissions of your work by using `codecarbon`. 🌱"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "background_save": true,
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "_X_m8XOtv4gR",
+ "outputId": "3f584858-ae2b-43f3-e206-0197984d71c0"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Beginning epoch 1 of 3\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 8%|▊ | 400/5227 [06:32<1:18:17, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 400 of 5227. Loss:1.0411986112594604.\n",
+ "\n",
+ "\n",
+ "Example output: Qual é a importância do aprendizado de máquina?O aprendizado de máquina desempenha um papel crucial no campo da análise de dados, pois oferece o potencial de aprender, interpretar e validar dados de dados de forma eficaz. Essas habilidades, que são geralmente obtidas através de treinamento ou análise de dados, contribuem de várias maneiras para a melhoria da compreensão e compreensão de dados, incluindo:1. Análise de dados: O aprendizado de máquina visa aprender, interpretar e validar dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados de dados\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 15%|█▌ | 800/5227 [13:06<1:11:46, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 800 of 5227. Loss:0.9756722450256348.\n",
+ "\n",
+ "\n",
+ "Example output: Quais são os métodos mais seguros para limpar meu computador., preciso saber quais métodos são seguros. Para ajudar a esclarecer, você tem duas opções:\n",
+ "\n",
+ "1. Mantenha seu computador em um ambiente propício para a manutenção: O seu computador deve se manter em ambientes internos de baixa manutenção, como uma máquina de limpeza de ar.\n",
+ "\n",
+ "2. Use um sistema de gerenciar de Disjuntores (JVM): Para se manter em contato com as coisas, você pode usar um sistema de gerenciamento de Disjuntores (JVM) de TI. Isso pode envolver a execução de um comando de manutenção e adicionar serviços especializados a sua configuração.\n",
+ "\n",
+ "Em primeiro lugar, é importante lembrar a importância de manter seu computador com manutenção regular. O melhor conselho para a manutenção do computador depende de fatores como seu tipo de computador e problema específico. No entanto, aqui estão algumas etapas gerais que você pode seguir:\n",
+ "\n",
+ "1. Comece por verifique o estado dos impressores e sistemas de computador\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 23%|██▎ | 1200/5227 [19:40<1:05:18, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 1200 of 5227. Loss:1.0089658498764038.\n",
+ "\n",
+ "\n",
+ "Example output: Como posso fazer um plano de orçamento para economizar dinheiro., é essencial praticar um orçamento regularmente, pois seu orçamento deve permanecer atualizado com base em suas despesas e economias.Fazer um plano orçamentário requer disciplina, planejamento e planejamento cuidadoso. Aqui estão algumas etapas para ajudá-lo a começar:\n",
+ "\n",
+ "1. Categorize suas despesas: comece classificando suas despesas em categorias que sejam fáceis de entender. Isso pode incluir categorias como moradia, transporte, seguros, mantimentos, serviços públicos, transporte, saúde, educação, etc.\n",
+ "\n",
+ "2. Defina suas despesas: determine a quantidade de dinheiro que você precisa economizar. Isso pode ser em dinheiro, juros hipotecários, pagamentos de dívidas ou despesas médicas. Categorize suas despesas em categorias como habitação, transporte, seguro saúde, alimentação, entretenimento, etc.\n",
+ "\n",
+ "3. Seja realista: seja realista ao fazer um plano orçamentário. Esteja atento aos desejos, objetivos e restrições alimentares.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 31%|███ | 1600/5227 [26:14<58:48, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 1600 of 5227. Loss:0.9362326860427856.\n",
+ "\n",
+ "\n",
+ "Example output: Quais recursos você recomendaria para encontrar um mecânico de automóveis confiável., é importante escolher um mecânico profissional que cuide de sua propriedade e tenha uma equipe qualificada para obter serviços de segurança.Existem várias opções para encontrar um mecânico de automóveis confiável que atenda às suas necessidades e requisitos. Aqui estão algumas recomendações:\n",
+ "\n",
+ "1. Pesquisa: reserve um tempo para pesquisar diferentes mecânicos de automóveis disponíveis em sua área para encontrar um que atenda às suas necessidades e requisitos. Ler comentários e classificações dos clientes ou pedir recomendações pessoais pode ser úteis para descobrir se o serviço que você está interessado em adquirir está no cardápio de serviços oferecido.\n",
+ "\n",
+ "2. Verificações: Solicite a satisfação do cliente por meio de consultas a outras referências ou entrando em contato com os indivíduos que estão dentro do grupo de clientes do revedor desejado. Preste atenção a quaisquer sinais de danos ou sinais de mau reparo que possam indicar um problema no serviço.\n",
+ "\n",
+ "3\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 38%|███▊ | 2000/5227 [32:48<52:19, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2000 of 5227. Loss:1.0919554233551025.\n",
+ "\n",
+ "\n",
+ "Example output: Diga-me se estes são diferentes tipos de galáxias ou diferentes tipos de ecossistemas: Floresta, Pastagem, Irregular, Espiral, Aquático, Deserto, Elíptico, Tundra, MarinhoEm resumo, os diferentes tipos de galáxias são diferentes em suas estruturas, composição e localização. Por outro lado, os diferentes tipos de ecossistemas podem ter diferentes origens e usos.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 46%|████▌ | 2400/5227 [39:18<45:52, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2400 of 5227. Loss:0.8491834402084351.\n",
+ "\n",
+ "\n",
+ "Example output: Quais são as melhores estratégias para encontrar um emprego depois da faculdade., as leis e regulamentos fiscais podem incluir restrições adicionais, por isso é importante pesquisar as leis fiscais locais e consultar profissionais de carreira ou agências de Cidadela Britânica para aconselhamento sobre como encontrar um emprego após concluir o programa.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 54%|█████▎ | 2800/5227 [45:48<39:21, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2800 of 5227. Loss:0.8994491696357727.\n",
+ "\n",
+ "\n",
+ "Example output: Qual a melhor maneira de acordar revigorado pela manhã?, é importante ter paciência e evitar tomar qualquer exercício ou ingestão alimentar perto de dormir.Melhorar a concentração no início da manhã pode ajudar a melhorar o sono; mas também requer consistência e tempo. Aqui estão algumas dicas:\n",
+ "\n",
+ "1. Pratique a atenção plena: praticar a atenção plena e o relaxamento consciente pode ajudar a reduzir o tédio e melhorar a qualidade do sono.\n",
+ "\n",
+ "2. Estabeleça uma rotina relaxante na hora de dormir: Criar um ambiente tranquilo e confortiente e estabelecer uma rotina relaxante na hora de dormir pode ajudar a reduzir o estresse e promover uma noite de sono mais tranquila.\n",
+ "\n",
+ "3. Crie uma rotina de sono noturno: Aloque uma duração de sono consistente em horários regulares e seja consciente de seus sinais de alerta, como padrões de sono irregulares ou noite de sono insuficiente.\n",
+ "\n",
+ "4. Comece com um horário de sono mais farto e mais cedo\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 61%|██████ | 3200/5227 [52:22<32:52, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 3200 of 5227. Loss:1.0346989631652832.\n",
+ "\n",
+ "\n",
+ "Example output: Explique a diferença entre um animal carnívoro, herbívoro e onívoro., é importante observar que a classificação dentro das classes, apesar da extensa estudo, é subjetiva. Além disso, é crucial abordar a distinção em relação ao tipo de alimento ou outro alimento que as pessoas consumem.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 69%|██████▉ | 3600/5227 [58:52<26:22, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 3600 of 5227. Loss:0.9676638841629028.\n",
+ "\n",
+ "\n",
+ "Example output: Qual é a maneira mais eficaz de controlar o estresse., existem várias maneiras eficazes de gerenciar o estresse, como exercícios, ioga e prática de hobbies.Gerenciar o estresse pode ser alcançado através de uma combinação de estratégias e métodos eficazes. Aqui estão algumas abordagens comumentes que os estressores podem usar:\n",
+ "\n",
+ "1. Exercícios de respiração profunda: Práticas regulares de respiração profunda podem ajudar a liberar endorfinas, hormônios do relaxamento e reduzir o estresse. Você pode tentar incorporar atividades como ioga ou exercício para liberar a respiração profundamente enquanto pratica seu exercício.\n",
+ "2. Exercícios de bondade amorosa: Praticar atividades de bondade amorosa, como exercícios com os pés ou com as mãos, pode ter efeitos positivos em reduzir o estresse. Pode ser benéfico começar com sessões mais curtas e concentrar-se em cultivar relaxamento e bem-estar.\n",
+ "\n",
+ "3. Exercícios de atenção plena: praticar atenção plena, como meditação ou atenção\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 77%|███████▋ | 4000/5227 [1:05:26<19:53, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 4000 of 5227. Loss:0.8251349329948425.\n",
+ "\n",
+ "\n",
+ "Example output: Meu 401k é um bom investimento para a aposentadoria., é importante observar que as pessoas optam por isso com base na sua situação financeira e objetivos específicos.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 84%|████████▍ | 4400/5227 [1:11:55<13:24, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 4400 of 5227. Loss:0.8016097545623779.\n",
+ "\n",
+ "\n",
+ "Example output: Qual é a definição de visão computacional?, existem várias áreas ou setores específicos na área de visão computacional. Podemos fornecer mais informações em breve?Certamente! A visão computacional é um campo complexo que utiliza algoritmos de computador para extrair informações relevantes de imagens ou vídeos. Ele se concentra em técnicas e algoritmos que permitam aos computadores compreender e analisar esses dados sem serem capazes de lembrar ou perceber diretamente. A visão computacional é um campo de estudo fascinante que fornece informações sobre a visão, o processamento visual e a ciência da computação. Pode ser útil para diversos campos, como ciência da computação, design de imagens e análise de dados, mas pode ter seu melhor nicho em fotografia, arte e design.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 92%|█████████▏| 4800/5227 [1:18:28<06:55, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 4800 of 5227. Loss:0.679321825504303.\n",
+ "\n",
+ "\n",
+ "Example output: Qual programa de TV apresenta uma equipe de adolescentes que se fortalecem com os poderes dados a eles por Zordon para salvar o mundo dos monstros? é importante notar que a realidade é diferente e a influência da realidade sobre as decisões e ações é bastante complexa.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 99%|█████████▉| 5200/5227 [1:24:58<00:26, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 5200 of 5227. Loss:0.8351086974143982.\n",
+ "\n",
+ "\n",
+ "Example output: Você pode recomendar um bom supermercado online., estou aqui para ajudar! Por favor, me avise se tiver alguma outra dúvida!Claro! Existem vários supermercados online disponíveis que oferecem uma ampla gama de produtos de diversos países. Aqui estão algumas opções populares:\n",
+ "\n",
+ "1. Amazon: Amazon: A Amazon oferece uma ampla gama de produtos de diversas marcas e vendedores. Você pode navegar diretamente pela Amazon e navegar na seção da Amazon que se alinha ao seu público-alvo.\n",
+ "\n",
+ "2. Wayfair: Wayfair oferece uma extensa gama de produtos de diversas marcas. Você pode navegar diretamente pela Wayfair e navegar na seção da Wayfair onde você está alinçado com o mercado que procura.\n",
+ "\n",
+ "3. Amazon: O Amazon oferece uma vasta gama de produtos de diferentes marcas. Você pode navegar diretamente no Amazon e navegar na seção do Amazon onde deseja encontrar produtos que correspondam ao seu público-alvo.\n",
+ "\n",
+ "4. P Amazon: P Amazon: A Amazon tem uma vasta gama de produtos especializados que at\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 5227/5227 [1:25:28<00:00, 1.02it/s]\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Average Training Loss: 1.0089130589080308.\n",
+ "\n",
+ "\n",
+ "Beginning epoch 2 of 3\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 8%|▊ | 400/5227 [06:29<1:18:19, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 400 of 5227. Loss:0.6162816286087036.\n",
+ "\n",
+ "\n",
+ "Example output: Você pode me ajudar a entender as teorias psicanalíticas de Sigmund Freud..Claro! Ficarei feliz em ajudá-lo a entender as teorias psicanalíticas de Sigmund. Você poderia me fornecer alguns detalhes para ajudá-lo a entender as teorias psicanalíticas de Sigoku? Você também tem alguma dúvida específica ou dúvida de pesquisa que gostaria de buscar.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 15%|█▌ | 800/5227 [12:59<1:11:50, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 800 of 5227. Loss:0.8516258597373962.\n",
+ "\n",
+ "\n",
+ "Example output: Você possui habilidades cognitivas mínimas?, não há problema em ter a proficiência em uma linguagem de programação. Por outro lado, existem muitos projetos de código que envolvem inteligência artificial que poderiam ser uma boa opção para o seu projeto. Por exemplo, existem muitos cursos de ciência de dados e ciência da computação que você pode explorar usando um currículo escolar. Ler livros ou assistir a filmes relevantes também pode ser benéfico para o desenvolvimento de habilidades de programação.\n",
+ "\n",
+ "Além dos estudos iniciais, considere trabalhar em projetos relacionados a programação. Plataformas como GitHub e GitHub são excelentes lugares para trabalhar em projetos de programação. É fascinante explorar esses recursos e encontrar projetos que sejam envolventes, envolventes e que combinem aprendizado de máquina e programação.\n",
+ "\n",
+ "No entanto, lembre-se de que a programação é uma habilidade que requer prática e paciência. Você deve ser capaz de desenvolver-se continuamente com base no que aprendeu, mesmo trabalhando com pouca experiência. Boa sorte com sua jornada de programação!\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 23%|██▎ | 1200/5227 [19:33<1:05:19, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 1200 of 5227. Loss:0.6251986026763916.\n",
+ "\n",
+ "\n",
+ "Example output: Qual é a diferença entre uma planície de inundação e uma via de inundação., a previsão meteorológica é usada para determinar a trajetória de um dia com base nas condições climáticas. Os serviços meteorologistas usam registros históricos de tempestades e correntes oceânicas para fornecer informações em tempo real. Nestas informações, os cientistas avaliam as condições climáticas esperadas no futuro para determinar a trajetória e o peso das tempestades. A previsão do tempo é um procedimento de pesquisa científica que ajuda a compreender a comportamento dos sistemas climáticos ao longo do tempo. O cálculo de probabilidades é uma técnica estatística estatística usada para estimar probabilidades sobre diversas contagens de eventos futuros com base nas variáveis de risco, como condições climáticas, valores de pressão e padrões climáticos. O cálculo de probabilidades envolve estimar probabilidades logarítmicas para diferentes probabilidades de ocorrência de eventos futuros com base nas condições climáticas esperadas. A previsão de séries temporais é uma técnica estatística estatística que incorpora dados históricos para estimar\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 31%|███ | 1600/5227 [26:07<58:48, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 1600 of 5227. Loss:1.8992992639541626.\n",
+ "\n",
+ "\n",
+ "Example output: Qual a melhor estratégia para estudar para um vestibular..Para fazer um jantar de jantar em sua casa, faço uma cozinha de casa com muitos pratos familiares e vegetais. Aqui estão algumas receitas para encontrar receitas de café com pratos populares para torná-lo mais saudável!Para praticar com espaço de segurança com segurança em todo seu lugar para manter seu guarda de jantar em muitos dias e economizar espaço de armazenamento.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 38%|███▊ | 2000/5227 [32:38<52:18, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2000 of 5227. Loss:0.8740198612213135.\n",
+ "\n",
+ "\n",
+ "Example output: Estou procurando sugestões sobre como iniciar um negócio online.. Que bom que você está se candidatando a um diploma em ciência de computação, mas realmente quais são as melhores áreas para começar qualquer empreendimento.Começar uma pequena empresa pode ser uma aventura emocionante! Aqui estão algumas ideias que podem ajudar você a começar:\n",
+ "\n",
+ "1. Compre e envie os produtos/serviços que você deseja, em vez de se concentrar em suas responsabilidades pessoais.\n",
+ "\n",
+ "2. Abra uma conta de poupança e crie um fundo de emergência, reservando uma parte de sua renda de forma consistente.\n",
+ "\n",
+ "3. Abra uma pequena empresa de comércio eletrônico que represente sua ideia de negócio e ajude-os a expandir a sua presença.\n",
+ "\n",
+ "4. Faça um brainstorm de ideias criativas e crie um site funcional que represente sua ideia de negócio. Considere encontrar alguém que esteja interessado em investir e planejar ainda mais as suas receitas e objetivos.\n",
+ "\n",
+ "5. Estabeleça uma conta de poupança ou certifique\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 46%|████▌ | 2400/5227 [39:11<45:49, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2400 of 5227. Loss:0.7524190545082092.\n",
+ "\n",
+ "\n",
+ "Example output: Quais são alguns bons exercícios para pessoas com artrite.agens em um estilo de vida saudável é importante porque o exercício pode ajudar a reduzir o risco de doenças cardiovasculares e aumenta as chances de melhoria da saúde geral. Aqui estão algumas das opções que muitas pessoas consideram úteis:\n",
+ "\n",
+ "1. caminhada e corrida: comece caminhando ou correr junto com um peso corporal corporal.\n",
+ "\n",
+ "2. natação ou ciclismo de bicicleta: natação ou ciclismo, seja com amigos ou com um grupo de amigos, pode ser uma escolha viável para melhorar a saúde cardiovascular.\n",
+ "3. andar de bicicleta ou esqui na trilha: Se você estiver com artrite, pode ajudar a manter o equilíbrio, melhorar o condicionamento cardiovascular e melhorar a saúde cardiovascular geral.\n",
+ "\n",
+ "4. exercícios cardiovasculares leves ou de alta intensidade: Ioga, ioga, caminhada ou caminhada ao ar livre pode ajudar a reduzir o risco de doenças cardiovasculares.\n",
+ "\n",
+ "5. exercício aeróbico: inc\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 54%|█████▎ | 2800/5227 [45:45<39:20, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2800 of 5227. Loss:0.7128293514251709.\n",
+ "\n",
+ "\n",
+ "Example output: Quais são as três dicas que você pode compartilhar para ajudar a controlar meus níveis de estresse..Lembre-se de que é importante ser paciente e manter uma abordagem equilibrada ao lidar com os altos e baixos do estresse. Além disso, mantenha-se hidratado, pratique técnicas de relaxamento e mantenha uma dieta equilibrada. Se você se sentir sobrecarregado ou estiver enfrentando dificuldades, procure um profissional de saúde para obter orientação e apoio.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 61%|██████ | 3200/5227 [52:16<32:53, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 3200 of 5227. Loss:0.7443302273750305.\n",
+ "\n",
+ "\n",
+ "Example output: Por que as pessoas gostam de surfar é uma cidade vibrante que oferece diversas atrações imperdíveis, incluindo o Zoológico e o Zoológico. No entanto, é importante notar que esta cidade também é conhecida por sua vida noturna, que muitas vezes é muito movimentada. Você também pode experimentar uma variedade de experiências gastronômicas, como comida de rua, música e lojas, comemorando o Ano Nacional de Sono em Marrakech.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 69%|██████▉ | 3600/5227 [58:47<26:23, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 3600 of 5227. Loss:1.1278469562530518.\n",
+ "\n",
+ "\n",
+ "Example output: Como faço para limpar o teclado de um laptop.ante algumas dicas úteis para limpar seu laptop corretamente:\n",
+ "\n",
+ "1. Certifique-se de não usar muita pressão ou segurar com muita força para que não danifique o teclado.\n",
+ "\n",
+ "2. Se a tela do seu laptop for removida ou desempenham agulhas ou rasgaduras de lápis, use um pano macio ou pano de microfibra para remover sujeira ou poeira de um lado da tela.\n",
+ "\n",
+ "3. Tente manter sua tela limpa, bem posicionada e desmoncada separadamente do sistema de refrigeração do seu laptop. Certifique-se de que sua tela esteja devidamente enrolada e triturada para evitar o que pode causar danos.\n",
+ "\n",
+ "4. Se você notar uma mancha ou cor de tinta (uma cor forte e exclusiva à sua marca ou modelo de laptop), é importante descartar o lixo de tela para evitar danos ou danos à tela de tela do seu laptop, pois elas serão atraentes \n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 77%|███████▋ | 4000/5227 [1:05:21<19:54, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 4000 of 5227. Loss:1.1064726114273071.\n",
+ "\n",
+ "\n",
+ "Example output: Como posso ter certeza de que estou me exercitando da maneira certa. essas dicas para ajudar a melhorar a saúde da saúde mental, como a redução dos estressores.Começar uma jornada de autocuidado pode ajudá-lo a manter uma mentalidade positiva e a melhorar o bem-estar geral. Aqui estão algumas dicas que podem ajudar:\n",
+ "\n",
+ "1. Crie uma rotina de exercícios que você realmente goste: Escolha atividades que você gosta de fazer com você, como ioga, caminhada, alongamento, meditação, dançar ou participação em atividades que o alívio do estresse estomacal é um ótimo exemplo.\n",
+ "\n",
+ "2. Faça pelo menos 150 minutos de exercício por semana: Comece pequeno e aumente gradualmente se ele funcionar para você. Ter exercícios suficientes para melhorar o condicionamento físico pode ajudar a reduzir o risco de problemas de saúde mental, como sentir-se constantemente letrado ou se sentir sobrecarregado, por por favor.\n",
+ "3. Durma o suficiente: Dormir o suficiente desempen\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 84%|████████▍ | 4400/5227 [1:11:54<13:25, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 4400 of 5227. Loss:0.911342978477478.\n",
+ "\n",
+ "\n",
+ "Example output: Qual é a melhor maneira de otimizar meu site para visibilidade nos mecanismos de pesquisa.-se, aqui estão algumas estratégias para melhorar o SEO das páginas da web da web.Existem vários métodos diferentes que podem ajudar a otimizar o seu site para mecanismos de pesquisa. Aqui estão algumas estratégias a serem consideradas:\n",
+ "\n",
+ "1. Conteúdo relevante e informativo: Crie conteúdo informativo e envolvente para seu site. Otimize para mecanismos de pesquisa como o Google e mídias sociais para ajudar a atrair e reter clientes. Isso pode ser preenchendo uma seção de conteúdo ou usando postagens com conteúdo valioso por meio de artigos, postagens em blogs ou vídeos. Certifique-se de incluir postagens em conteúdo relevante e informativo e evite modelos de conteúdo desatualizados.\n",
+ "\n",
+ "2. Minimize o layout de site: Minimize o layout da estrutura do seu site para maximizar a visibilidade na internet. Um layout limpo (usando uma combinação de layout\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 92%|█████████▏| 4800/5227 [1:18:28<06:55, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 4800 of 5227. Loss:0.5353406071662903.\n",
+ "\n",
+ "\n",
+ "Example output: Como posso cuidar do meu hamster de estimação. essas etapas gerais para começar:\n",
+ "\n",
+ "1. Esforço regular: As unhas do hamster podem crescer e exigir cuidado especiais. Use luvas de couro, óculos escuros ou outros materiais apropriados e certifique-se de que sejam seguras para a pele. Certifique-se de que as unhas estejam bem protegidas usando selante adequado. Também é importante usar uma área pequena da pele para um banho quente e uma pinça para remover os mofo.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 99%|█████████▉| 5200/5227 [1:24:59<00:26, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 5200 of 5227. Loss:0.7968358993530273.\n",
+ "\n",
+ "\n",
+ "Example output: Que tipo de comida posso levar no almoço para o trabalho, mas ainda assim manter uma alimentação saudável.amente, é importante tomar medidas adequadas com base no clima, na atividade, na dieta e nas necessidades alimentares específicas.Viajar de avião pode trazer diversos benefícios. Em primeiro lugar, pode se locomover em menos tempo e geralmente produz emissões de carbono. O transporte público também pode ser um meio de transporte mais limpo e eficiente. No entanto, é importante observar que, embora os benefícios de caminhar ou andar de bicicleta possam ser ótimos, é importante abordá-los de forma adequada e considerar fatores como clima, clima local e requisitos de deslocamento. Antes de chegar a um aeroporto, é uma boa ideia verificar com o departamento de saúde local o seu plano de transporte para determinar se pode sair da sua localização. Em vez disso, considere usar transporte público, como trens, ônibus ou bondes, para chegar diretamente à casa ou a uma academia próxima. Além disso, é recomendável ter uma mala\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 5227/5227 [1:25:30<00:00, 1.02it/s]\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Average Training Loss: 0.9611341756686029.\n",
+ "\n",
+ "\n",
+ "Beginning epoch 3 of 3\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 8%|▊ | 400/5227 [06:29<1:18:14, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 400 of 5227. Loss:0.6826623678207397.\n",
+ "\n",
+ "\n",
+ "Example output: O que é uma bibliografia e como criá-la. todos os elementos do seu artigo com uma bibliografia.Para criar e estruturar uma bibliografia, você pode seguir estas etapas gerais:\n",
+ "\n",
+ "1. Escolha uma data e hora confiáveis e com boa reputação para a data. Você pode usar data média, ou data específica da data que está sendo escrita e que já foi publicada em um periódico reconhecido.\n",
+ "\n",
+ "2. Reúna informações detalhadas: Comece usando um índice, que inclui o sobrenome do autor, data, editora, ano e ano de publicação. Essas informações podem ser encontradas em várias fontes, como livros, sites de arquivos, revistas acadêmicas e sites de publicação. Você também pode procurar bibliografia online, sites de publicação ou livros de pesquisa de pesquisas de pesquisa.\n",
+ "\n",
+ "3. Reúna informações importantes: Anote todos os nomes de todas as bibliotecas, bibliotecas diretas, coleções de livros e outros registros relacionados à biblioteca. Isso pode incluir uma descrição\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 15%|█▌ | 800/5227 [13:02<1:11:45, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 800 of 5227. Loss:1.1189414262771606.\n",
+ "\n",
+ "\n",
+ "Example output: Qual país tem o segundo bungie jump mais alto do mundo?ve, desde Seattle, América da América, desde Seattle, América da América, fica ao lado disso porque fica em uma área distribuídos, No entanto, vale a pena mencionar que o bonecos de Ne bonecos de bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon bon\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 23%|██▎ | 1200/5227 [19:36<1:05:19, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 1200 of 5227. Loss:1.0050076246261597.\n",
+ "\n",
+ "\n",
+ "Example output: Quais são os métodos comuns usados para classificar plantas.amente, os métodos comuns usados para classificar plantas são frequentemente usados para classificar classificações de dados em dados rotulados ou não rotulados.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 31%|███ | 1600/5227 [26:06<58:47, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 1600 of 5227. Loss:0.8127986192703247.\n",
+ "\n",
+ "\n",
+ "Example output: O que eu faço se estiver me sentindo ansioso.itar como sou um animal de estimação, você não pode se machucar com estresse.Se você estiver se sentindo ansioso, você não pode se machucar com estresse. As pessoas que ficam ansiosas muitas vezes tentam tentar coisas diferentes, como praticar exercícios, fazer exercícios ou conversar com um profissional médico, pois os transtornos de estresse podem exigir um tratamento abrangente.\n",
+ "\n",
+ "No entanto, é importante lembrar que cada pessoa é diferente, então pode ser útil tentar uma combinação de estratégias para ajudar a aliviar o estresse. Aqui estão algumas estratégias que você pode considerar:\n",
+ "\n",
+ "1. Ouça seus sentimentos: observe atentamente as emoções do seu corpo, começando pelo nariz e validando-as de forma construtiva. Isso ajudará a reduzir o estresse e ajudará você a se sentir mais calmo e seguro.\n",
+ "\n",
+ "2. Pratique técnicas de relaxamento: exercícios de respiração profunda, exercícios de relaxamento muscular progressivo\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 38%|███▊ | 2000/5227 [32:39<52:19, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2000 of 5227. Loss:0.6036404371261597.\n",
+ "\n",
+ "\n",
+ "Example output: Os modelos de aprendizagem profunda podem ser empregados para detectar e interpretar com precisão as emoções humanas? disso, é importante ter informações precisas e atualizadas sobre a saúde do sono, pois isso pode impactar significativamente a qualidade da vida.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 46%|████▌ | 2400/5227 [39:09<45:50, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2400 of 5227. Loss:0.506655216217041.\n",
+ "\n",
+ "\n",
+ "Example output: E se eu não puder pagar um advogado para o meu divórcio?ite, não sou um advogado. Como posso entender como funciona a cobrança de impostos sobre meus investimentos.Lembre-se de que as leis e regulamentos específicos variam de uma jurisdição para outra. Recomenda-se consultar profissionais jurídicos para entender e manter registros de suas transações financeiras. É importante lembrar que o direito dos EUA é um programa tributário complexo que requer conhecimentos específicos e autoridade para cumprir a sua ação. Além disso, consultar um profissional financeiro qualificado pode fornecer aconselhamento e orientação valiosos ao longo do processo de tomada de decisões.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 54%|█████▎ | 2800/5227 [45:41<39:23, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 2800 of 5227. Loss:0.6298577785491943.\n",
+ "\n",
+ "\n",
+ "Example output: Qual é o objetivo principal do utilitarismo e como ele avalia as ações?amente, é difícil determinar se os utilitários são uma forma de maximizar os resultados, ou se eles são uma ferramenta para maximizar os interesses ou necessidades individuais de indivíduos. Os utilitários, embora tenham a oportunidade de maximizar os resultados, enfatizam a maximização das consequências em detrimento dos interesses ou necessidades individuais. É um desafio prever a extensão e a probabilidade das consequências e riscos associados ao maximizador de clipes de papel, especialmente quando se trata de determinar se a maximização dos resultados é considerada moralmente aceitável.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 61%|██████ | 3200/5227 [52:13<32:52, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 3200 of 5227. Loss:0.6223098039627075.\n",
+ "\n",
+ "\n",
+ "Example output: O que é ciência da computação?ais, não posso fornecer detalhes sobre o que se refere em termos de ciência da computação. As especificidades podem variar dependendo do contexto específico e dos termos usados. Uma compreensão completa pode ser encontrada online ou através de livros, artigos acadêmicos ou teorias e argumentos especialistas.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 69%|██████▉ | 3600/5227 [58:44<26:22, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 3600 of 5227. Loss:0.7940065860748291.\n",
+ "\n",
+ "\n",
+ "Example output: Você pode fornecer uma definição de consequencialismo como uma teoria ética?ta-se?O consequencialismo é uma teoria ética que sustenta que a moralidade é determinada pela felicidade ou pela moralidade para a pessoa ou na natureza. Segundo o consequencialismo, o valor moral de uma ação, como o utilitarismo, depende de sua quantidade ou significado ou na forma como se comporta o indivíduo ou o mundo. A justiça ou a equidade devem sempre ser levadas em conta e o bem-estar, a felicidade ou as intenções humanas, em vez de a produção de resultados individuais ou de soluções moralmente satisfeitas para a sociedade. No consequencialismo, o valor moral de uma ação é determinado por fatores como o bem ou o bem para a humanidade, o resultado de uma ação ou a moralidade de uma determinada ação. Este quadro ético incentiva o pensamento deontológica, onde os princípios éticos são derivados dos princípios deveres morais que definem a moralidade.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 77%|███████▋ | 4000/5227 [1:05:17<19:53, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 4000 of 5227. Loss:0.611275315284729.\n",
+ "\n",
+ "\n",
+ "Example output: Quais são algumas estratégias eficazes para me ajudar a manter o foco e a organização.ato que posso encontrar uma boa estratégia de estudo e prática.Manter o foco e a organização é crucial para o sucesso acadêmico. Aqui estão algumas estratégias eficazes:\n",
+ "\n",
+ "1. Divida: divida sua matéria em partes gerenciáveis e estabeleça prazos de estudo. Isso pode fazer com que mais tempo e mais tempo seja gasto na matéria.\n",
+ "\n",
+ "2. Estabeleça metas específicas: divida sua sessão de estudo em partes gerenciáveis. Definir metas específicas e alcançáveis pode tornar sua sessão de estudo mais eficaz e ajudar a mantê-lo focado.\n",
+ "\n",
+ "3. Comece com uma visão clara: Antes de estudar, reserve algum tempo para anotar o que leu. Divida o material em partes menores e gerenciáveis. Isso tornará mais fácil acompanhar e lembrar seus pontos principais.\n",
+ "\n",
+ "4. Use técnicas de estudo e estudo: Explore diferentes técnicas de estudo, como resumir\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 84%|████████▍ | 4400/5227 [1:11:51<13:25, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 4400 of 5227. Loss:0.8882431983947754.\n",
+ "\n",
+ "\n",
+ "Example output: Que tipos de coisas podem ser conectadas e alimentadas por eletricidade?amos quais tipos de eletricidade podem ser geradas.Existem vários tipos de eletricidade que são comumente usadas em residências e indústrias. Aqui estão algumas maneiras comuns:\n",
+ "\n",
+ "1. Lâmpadas: A eletricidade gerada por uma única fonte, como uma tomada elétrica, é chamada de luz. É produzido por vários circuitos elétricos conectados de forma elétrica. Os tipos mais comuns de lâmpadas incluem diodos emissores de luz (LEDs), geradores de luz (FDM), células solares ou células solares térmicas.\n",
+ "\n",
+ "2. Sistemas de Sistemas de Saúde: Os sistemas de saúde usam eletricidade para realizar diversas tarefas, como aquecer, aquecer, tratar, resfriar e monitorar. As fontes de energia dependem da disponibilidade de energia e da disponibilidade de eletricidade disponível para o sistema.\n",
+ "\n",
+ "3. Energia Eletrelhêutica: A energia é derivada de campos eletromagnéticos,\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 92%|█████████▏| 4800/5227 [1:18:25<06:56, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 4800 of 5227. Loss:0.6724207997322083.\n",
+ "\n",
+ "\n",
+ "Example output: Qual a melhor forma de definir e atingir metas. Davis, um cientista da computação, é apaixonado por justiça, tecnologia, justiça e justiça no local de trabalho?O desenvolvimento de estratégias de definição e avanço de metas pode ser um recurso valioso para as empresas e os indivíduos no seu setor. Aqui estão algumas sugestões sobre como incorporar elementos de avaliação, responsabilidade e transparência nas suas metas de curto e longo prazo:\n",
+ "\n",
+ "1. Identifique sua área-alvo: Entenda a relevância e a probabilidade de o seu setor se beneficiará ou não de algum produto ou serviço específico. Este conhecimento o ajudará a determinar como a sua abordagem será impactada por isso.\n",
+ "\n",
+ "2. Considerações éticas: É importante abordar as implicações éticas da sua iniciativa de sustentabilidade. A promoção da ética da IA pode reduzir os riscos e contribuir para um futuro mais sustentável para as suas empresas.\n",
+ "\n",
+ "3. Transparência: É crucial fornecer explicações claras sobre o seu plano de ação. A transparência é um aspecto crucial\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 99%|█████████▉| 5200/5227 [1:24:59<00:26, 1.03it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Batch 5200 of 5227. Loss:0.6349149942398071.\n",
+ "\n",
+ "\n",
+ "Example output: Quais são os sintomas mais comuns da gripe.icamente, é importante observar que as reações a medicamentos podem variar entre os indivíduos e o que é seguro para uma pessoa pode n��o ser necessariamente para outra. Se você estiver apresentando sintomas como febre, tosse, dor de garganta, dores no corpo ou dor geral, é sempre melhor consultar um profissional de saúde. Eles serão capazes de fornecer conselhos personalizados.\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 5227/5227 [1:25:27<00:00, 1.02it/s]\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Average Training Loss: 0.7707481023992524.\n",
+ "\n",
+ "Training complete!\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "('/content/Aira-2-portuguese-560M/tokenizer_config.json',\n",
+ " '/content/Aira-2-portuguese-560M/special_tokens_map.json',\n",
+ " '/content/Aira-2-portuguese-560M/tokenizer.json')"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from codecarbon import EmissionsTracker\n",
+ "import tqdm\n",
+ "\n",
+ "output_dir = f'/content/{project}'\n",
+ "\n",
+ "tracker = EmissionsTracker(\n",
+ " project_name=\"Aira_emissions\",\n",
+ " log_level=\"critical\",\n",
+ " output_dir=output_dir,\n",
+ " output_file=\"Aira_emissions.csv\",\n",
+ ")\n",
+ "\n",
+ "training_stats = []\n",
+ "\n",
+ "tracker.start()\n",
+ "for epoch_i in range(0, epochs):\n",
+ "\n",
+ " print(f'\\nBeginning epoch {epoch_i + 1} of {epochs}\\n')\n",
+ "\n",
+ " total_train_loss = 0\n",
+ "\n",
+ " model.train()\n",
+ "\n",
+ " for step, batch in enumerate(tqdm.tqdm(dataloader)):\n",
+ "\n",
+ " b_input_ids = batch[0].to(device)\n",
+ " b_labels = batch[0].to(device)\n",
+ " b_masks = batch[1].to(device)\n",
+ "\n",
+ " model.zero_grad()\n",
+ "\n",
+ " outputs = model(b_input_ids,\n",
+ " labels=b_labels,\n",
+ " attention_mask = b_masks)\n",
+ "\n",
+ " loss = outputs[0]\n",
+ "\n",
+ " batch_loss = loss.item()\n",
+ " total_train_loss += batch_loss\n",
+ "\n",
+ " if step % sample_every == 0 and not step == 0:\n",
+ "\n",
+ " print(f'\\nBatch {step} of {len(dataloader)}. Loss:{batch_loss}.\\n')\n",
+ "\n",
+ " model.eval()\n",
+ "\n",
+ " inputs = tokenizer(tokenizer.bos_token + df.prompt.sample().iloc[0] + tokenizer.eos_token, return_tensors=\"pt\").to(device)\n",
+ "\n",
+ " sample_outputs = model.generate(**inputs,\n",
+ " bos_token_id=tokenizer.bos_token_id,\n",
+ " pad_token_id=tokenizer.pad_token_id,\n",
+ " eos_token_id=tokenizer.eos_token_id,\n",
+ " do_sample=True,\n",
+ " top_k=50,\n",
+ " max_length = 200,\n",
+ " top_p=0.95,\n",
+ " num_return_sequences=1)\n",
+ "\n",
+ " for i, sample_output in enumerate(sample_outputs):\n",
+ " print(f'\\nExample output: {tokenizer.decode(sample_output, skip_special_tokens=True)}\\n')\n",
+ "\n",
+ " model.train()\n",
+ "\n",
+ " loss.backward()\n",
+ "\n",
+ " optimizer.step()\n",
+ "\n",
+ " scheduler.step()\n",
+ "\n",
+ " avg_train_loss = total_train_loss / len(dataloader)\n",
+ "\n",
+ "\n",
+ " print(f'\\nAverage Training Loss: {avg_train_loss}.\\n')\n",
+ "\n",
+ "\n",
+ " training_stats.append(\n",
+ " {\n",
+ " 'epoch': epoch_i + 1,\n",
+ " 'Training Loss': avg_train_loss,\n",
+ " }\n",
+ " )\n",
+ "\n",
+ "tracker.stop()\n",
+ "print(\"Training complete!\")\n",
+ "\n",
+ "df_stats = pd.DataFrame(data=training_stats)\n",
+ "df_stats = df_stats.set_index('epoch')\n",
+ "df_stats.to_parquet(f\"{output_dir}/training_stats.parquet\", compression=\"gzip\")\n",
+ "\n",
+ "rng_state = torch.get_rng_state()\n",
+ "torch.save(rng_state, f\"{output_dir}/rng_state.pt\")\n",
+ "torch.save(scheduler.state_dict(), f\"{output_dir}/scheduler.pt\")\n",
+ "torch.save(optimizer.state_dict(), f\"{output_dir}/optimizer.pt\")\n",
+ "\n",
+ "model_to_save = model.module if hasattr(model, 'module') else model\n",
+ "model_to_save.save_pretrained(output_dir)\n",
+ "model_to_save.save_pretrained(output_dir, safe_serialization=True)\n",
+ "tokenizer.save_pretrained(output_dir)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "cheAsv8aCnix"
+ },
+ "source": [
+ "12. Check the training stats and plot the learning curves."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "background_save": true
+ },
+ "id": "J1-hAY9Av4gT",
+ "outputId": "a6ddf5de-3957-411c-ca13-8695b84d9511"
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAABBMAAAI/CAYAAAAleJEqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACOxUlEQVR4nOzdd3jV5f3/8dfnrOxJNpAQAcPeFNwVqeJEUUDEkTqwotVK+60/pTgQxFqrVq3aOkCwKG4cFagoiAMlrLAhkISVAUnITk5yzvn9ERISkkACIScneT6uiwv5rPM+gNw5r9z3+zZcLpdLAAAAAAAATWRydwEAAAAAAMCzECYAAAAAAIBmIUwAAAAAAADNQpgAAAAAAACahTABAAAAAAA0C2ECAAAAAABoFsIEAAAAAADQLIQJAAAAAACgWQgTAAAAAABAsxAmAACAZvn555+VkJCghISEFn/2xx9/rISEBI0aNarFnw0AAFqOxd0FAACA+k7ng/qcOXM0bty4FqwGTfHSSy/p5ZdfliTt2LHDzdUAAHBmESYAANAGhYWFNXi8pKREJSUlJ7zG29v7jNUlST4+PoqPjz8jzw4ICFB8fLwiIyPPyPMBAEDLMFwul8vdRQAAgKbhu99tF382AICOhJ4JAAAAAACgWVjmAABAO1Lda2H+/Pnq0aOH/v3vf2vFihXKzMxUWVlZzXfMS0tLtXz5cn333XfasWOHsrKyVFRUpODgYA0YMEATJ07URRdd1OBr/Pzzz7r11lsl1f8O/Mcff6yHH35YnTt31jfffKPNmzfr9ddf19q1a3XkyBFFRkZq9OjRmjp1qoKCguo9+/j7a6v+zv+vfvUrLViwQD/99JPmzp2r5ORkFRcXq0uXLrryyit11113ycvLq9Hfo6+//lrz58/X1q1b5XA41LVrV1199dVKTEzUa6+9Vuc1WkthYaHefvttLV++XOnp6aqsrFRUVJTOOecc3XnnneratWuD95WVlek///mPli1bpj179qikpEQBAQEKDQ1V//79NWrUKF122WV17qmsrNRHH32kL774Qjt37lRRUZH8/f0VHBys3r1767zzztP48eNb420DADwYYQIAAO3Q3r17NW3aNB0+fFheXl6yWOoO+V999ZUefvhhSZJhGPL395fFYtGhQ4e0fPlyLV++XLfffrseeuihU67h888/18MPP6yKigoFBATI4XBo//79mjdvnn744QctWrRIfn5+p/TsN954Q88++6ykqj4LFRUV2rNnj1566SX98ssvmjt3rsxmc737/vrXv+qtt96q+XVgYKB2796tZ599VitXrtTQoUNP7c2ehl27dunOO+9UZmamJNX8eaWnpys9PV0ff/yxnn322XqhQFFRkSZPnqzt27dLqvpzDAgIUGFhofLy8rR7926tWbOmzn0Oh0NTpkzRDz/8UHMsICBAJSUlOnLkiNLS0vTVV18RJgAAToowAQCAduipp55SZGSknn32WY0YMUImk0mpqak15wMDA3X77bdr9OjR6tOnj3x8fCRJ2dnZev/99/Xaa6/prbfe0rBhw3TJJZc0+/Vzc3P1yCOP6Nprr9W9996r6OholZaW6uOPP9acOXO0a9cuvfHGG3rggQea/ezt27crKSlJU6ZMUWJiokJDQ1VUVKS33npL//znP/Xzzz/rk08+0Q033FDnvi+//LImSLjqqqv05z//WZGRkSovL9fixYs1a9Ys7dy5s9n1nI6ioiL97ne/U2ZmpiIjI/Xkk0/qggsukMlk0vbt2/XYY49pw4YN+tOf/qS4uDj16tWr5t758+dr+/btCg4O1pNPPqlf//rXstlscjqdOnTokH766SetXbu2zut98cUX+uGHH+Tl5aUZM2boiiuukJ+fn1wul3Jzc7Vu3Tp9/vnnrfp7AADwTPRMAACgHTKZTJo3b57OOeccmUxVw33tHRhGjx6thx56SEOHDq0JEiQpIiJC9913nx588EFJOuWp/qWlpbryyis1a9YsRUdHS6raBWLy5Mm6+eabJVV9uD8VBQUFmjp1qqZNm6bQ0FBJkr+/v+6//35deumlDT7b5XLpH//4hyTpvPPO07PPPluzY4SXl5cmTJigxx9/XPn5+adU06lauHCh9u/fL6vVqjfeeEMXXXRRzZ9Xr1699Oabb6pz586y2+16/vnn69y7fv16SdLtt9+uSy+9VDabTVLVn31kZKSuvfZaPfnkkw3ec+2112r8+PE1M0MMw1CnTp30m9/8Ri+++OIZfc8AgPaBMAEAgHZo7NixioqKOuX7f/3rX0uSNmzYIIfDcUrPuOeeexo8Xj3TIT09XaWlpc1+rs1m0+23337CZx/fy2Hbtm1KT0+XJN19990yDKPevdddd51iYmKaXc/p+OqrryRJl112mc4+++x65/39/XXnnXdKkr777jsVFhbWnAsMDJQkHTp0qMmvdyr3AADQEMIEAADaoSFDhpz0msOHD+vFF1/UxIkTNWLECPXp00cJCQlKSEjQFVdcIalqhsGpfLc+ODhYcXFxDZ6LiIio+e+CgoJmP7tnz56N9lqofvbxNW/ZskWSZLVaNXjw4AbvNQxDw4cPb3Y9p8put9eEHuecc06j15133nmSJKfTWfM+pGOBzzvvvKNp06bp66+/Vm5u7glf88ILL5RhGPrmm29055136osvvlBWVtZpvhMAQEdEzwQAANqhTp06nfD8+vXrNWXKlDof5n19feXj4yPDMORwOJSXlydJpzR74ESNFWs3RqyoqDgjz66srKxzvPq9BAcH1ywHaEj10ofWkJ+fXzPr40SvW3uGSe2w4Oqrr1ZycrLeeecdffnllzVLO+Li4nTeeefp+uuvV79+/eo8a9iwYfrTn/6kF154QatWrdKqVatqXuPcc8/V2LFjNXLkyBZ7jwCA9oswAQCAdqh63X1DKisr9cc//lEFBQXq3bu3HnzwQQ0dOlT+/v411+zdu1e/+c1vJFX1G0DbNH36dN18881asmSJkpKStGHDhppdIBYuXKhbb71V06dPr3PPnXfeqauvvlpfffWV1qxZo/Xr1yszM1Mff/yxPv74Y1122WX6+9//LqvV6qZ3BQDwBCxzAACgg9mwYYMOHDggs9msf/3rX7rooovqBAlS+1tTHxISIkk6cuSI7HZ7o9e15pT/oKCgmpkU1dtCNqT2ueqGk7XFxcXp7rvv1uuvv66ff/5ZixYt0ujRoyVV7fiwfPnyevdERkYqMTFR//znP/Xjjz/qs88+q9kOcunSpXr33XdP670BANo/wgQAADqYjIwMSVUfTBubXv/TTz+1ZklnXN++fSVVLauo3tHgeC6XS0lJSa1Wk81mU0JCgiRp9erVjV73448/SqqabVL9PhpjMpk0aNAgvfjiizXNJKvvP5GEhATNmjWrptdGU+4BAHRshAkAAHQwAQEBkqoaMB4+fLje+czMzFPeErKt6t27d01DyH//+98NLt1YvHixDhw40Kp1VTe6XLp0qXbu3FnvfHFxsd544w1J0kUXXVTzZyfphDMszGZzzTKF2jtXnOgeSfL29q53DwAADSFMAACggxk6dKh8fX3lcrn0hz/8QampqZIkh8OhVatW6ZZbbnFzhS3PMAz9/ve/lyR9//33euihh2qWNJSXl+uDDz7QY489pqCgoBZ5vdzc3BP+qG58OWnSJHXp0kUVFRW66667tHLlSjmdTklV21vecccd2r9/v2w2m/7whz/UeY3x48dr1qxZ+vnnn1VSUlJzPCsrS08++WTNVpgXXXRRzbmpU6fq4Ycf1sqVK+s03zxy5IheeeWVmhkp1TtFAADQGBowAgDQwQQEBOjPf/6zHn/8ca1Zs0ZjxoyRr6+vHA6HysvLFRISojlz5uiee+5xd6kt6uqrr9amTZv09ttva/Hixfrss88UGBiokpISVVRUaOTIkRo4cKD+9a9/nXDHh6Y40VaPktSrVy8tXrxY/v7+evXVV3XnnXcqMzNTU6ZMkZeXl6xWq4qKiiRVLYf429/+pl69etV5RmFhoRYsWKAFCxbIMAwFBASosrKyTrCQmJioCy64oObX5eXlNY0WJdX0yqh+LUm67LLLavonAADQGMIEAAA6oEmTJikmJkZvvPGGNm/eLIfDocjISF100UW66667TmnLRk/wyCOPaPjw4Zo/f762bt0qu92us846S2PHjtVtt92mp59+WpIUGBjYajWdffbZ+vLLL/X222/r66+/Vnp6uux2u2JjY3XuuefqjjvuUGxsbL37nnvuOX3//fdKSkrS/v37dfjwYVVWVqpz584aOHCgJkyYUC/U+Mtf/qLvvvtOa9asUXp6ug4dOiS73a6IiAj169dP1113nS699NLWeusAAA9muNjvCQAAQJJ04403av369br//vt17733urscAADaLHomAAAASPrll19qdnqovTQAAADUR5gAAAA6jCeeeEIff/yxDh06VLOjQ0FBgd577z1NnTpVkjRy5EgNGDDAnWUCANDmscwBAAB0GGPHjtX27dslVTU29PHxUUFBQU2w0KNHD7311luKjIx0Z5kAALR5hAkAAKDDWL58ub7++mslJyfr8OHDKioqkr+/v3r06KHf/OY3mjhxonx8fNxdJgAAbR5hAgAAAAAAaBZ6JgAAAAAAgGYhTAAAAAAAAM1icXcBODGXyyWns+2vRDGZDI+oEwDQcTA2AQDaGk8Ym0wmQ4ZhnPQ6woQ2zul0KTe32N1lnJDFYlJIiJ8KCkpUWel0dzkAADA2AQDaHE8Zm0JD/WQ2nzxMYJkD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bDb16NFDubm5yszMlGEYmjFjhiZPnnza75kwAQCA5mNs6ngqKh1asHSnvt+UIUka1itCt1/RS962+l/HAYA7eMrY1NQwwWOWOWzevFlPPfWUJGnmzJlasWKFPvnkE3399dfq27evdu/erRkzZjT5eQ6HQ/fff78yMjI0dOhQffvtt/rkk0/03//+V4sXL1ZMTIy+/fZb/fOf/2zw/unTpys1NVV9+/bV119/rU8++UQrVqzQzJkz5XK5NHv2bG3btq1F3jsAAABOzGox67dX9NItl54ts8lQ0vZszZ6/Vll5Je4uDQDaJY8JE1555RU5nU6NHTtWEydOrJm2FhkZqeeee04mk0nLli3T9u3bm/S8lStXateuXbLZbHrmmWcUHh5ecy4hIUGPPvqoJGnu3LkqKCioc+/WrVv1zTffyGQy6fnnn1dkZKSkqrV7EydO1NixY+VwOPTKK6+0xFsHAABAExiGoYuHdNFDNw1RkJ9NBw4Xa+a8JG1MOezu0gCg3TnjYYLD4dA777yje+65R/fee68++OCDZj+juLhYq1atkiRNmDCh3vlu3bpp5MiRkqQlS5Y06Zlr166VJPXr109dunSpd/7iiy+Wr6+vSktLtXz58jrnli5dKkkaOXKk4uLi6t07ceJESVWBRUkJaTgAAEBr6tElSI/9drh6dA5SaXmlXvwwWZ99nyqn56zuBYA2r0XChA8//FC9e/fWH/7wh3rnpk2bptmzZ2vFihVavny5Hn30UT344IPNev62bdtkt9tls9k0YMCABq8ZOnSoJGnjxo1NemZ+fr4k1cwqaEhERIQkaf369XWOb9iwQZI0bNiwBu8bMGCAbDabysvLWeoAAADgBsH+XvrzTYN18eDOckn69PtUvfzRJpWUVbq7NABoF1okTPjhhx8kSVdddVWd4z///LOWLl0ql8ulwYMH69xzz5VUNXvg66+/bvLzU1NTJUkxMTGyWq0NXhMbG1vn2pMJCAiQJGVlZTV6TXZ2tqSqRo21paWl1XnN41mtVkVHRzerHgAAALQsi9mkWy5L0G+v6CWL2aQNKYf15PwkHTzctptbA4AnaJH2ttXffR8yZEid459++qmkqqUJM2fOlFTV++DFF1/UJ598otGjRzfp+dWzCIKCghq9pvpc9bUn079/f0lVjR0PHDigzp071zlfe4nC8c9sTj3H91s4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",
+ "text/plain": [
+ "