diff --git a/README.md b/README.md index 837ae77..a2af184 100644 --- a/README.md +++ b/README.md @@ -24,15 +24,23 @@ We found that this approach only works for model of sufficient ability. Phi-2 (2 The model was fine-tuned on the first segment of various texts and then evaluated on the subsequent segment to measure the change in perplexity, which serves as a proxy for the text's learnability and predictability. Texts that exhibit high initial perplexity but show significant improvement are deemed to be both unpredictable and learnable, characteristics not typically associated with low-quality content. -| name | before | after | text length | improvement % | abs improvement | novel? | learnable? | High Quality? | -| :-------------------------------------------- | ------: | ------: | ----------: | ------------: | --------------: | :----- | :--------- | :---- | -| wikipedia on LK-99 | 32.219 | 28.8525 | 1038 | 0.104489 | 3.36652 | True | True | False | -| good_ml | 28.3473 | 26.4566 | 1004 | 0.0666997 | 1.89076 | True | True | False | -| openai_board_ann | 15.904 | 15.1736 | 1191 | 0.0459214 | 0.730332 | True | True | True | -| Schmidhuber 2023 Subjective Novelty, Surprise | 29.615 | 28.4708 | 2654 | 0.0386353 | 1.14418 | True | True | False | -| email_to_fauci | 25.0893 | 24.3714 | 1559 | 0.0286154 | 0.717941 | True | True | True | -| AI gen fake paper | 7.63283 | 7.57951 | 2031 | 0.00698672 | 0.0533285 | False | False | True | -| bad_ml | 13.9061 | 13.8623 | 2345 | 0.00314972 | 0.0438004 | False | False | True | +| title | before | after | len | improvement% | improvement | novel | learnable | BS | +|:------------------------------------------|----------:|----------:|------:|---------------:|--------------:|:--------|:------------|:------| +| cicero from ibois, Philippe (2012-06-03). | 72.5874 | 67.7442 | 13707 | 0.066722 | 4.84318 | True | True | False | +| politics is the mind-killer | 247.552 | 245.827 | 3158 | 0.00696722 | 1.72475 | True | False | False | +| openai board ann | 55.8085 | 54.6679 | 2991 | 0.0204374 | 1.14058 | True | True | False | +| How to Catch an AI Liar | 28.9499 | 28.0088 | 5464 | 0.0325069 | 0.941071 | True | True | True | +| buzzfeed foi fauci emails 2023 | 23.3094 | 22.4064 | 13640 | 0.0387411 | 0.903032 | True | True | True | +| Gemini to Q* | 11.7564 | 11.1906 | 42604 | 0.0481219 | 0.56574 | False | True | True | +| LK-99-en | 14.5138 | 14.0661 | 15432 | 0.03085 | 0.447752 | False | True | True | +| LK-99-es | 11.415 | 10.9729 | 12970 | 0.0387271 | 0.44207 | False | True | True | +| disney appointment | 118.826 | 118.42 | 3653 | 0.003417 | 0.406029 | True | False | True | +| weak to strong | 46.7642 | 46.4047 | 5811 | 0.00768638 | 0.359447 | True | False | True | +| blechley declaration | 17.8691 | 17.5242 | 7762 | 0.0193007 | 0.344887 | True | False | True | +| Lorem ipsum | 6.56484 | 6.26879 | 19649 | 0.0450961 | 0.296049 | False | True | True | +| statement by whitehouse on passing | 29.1971 | 28.9397 | 1641 | 0.00881732 | 0.257441 | True | False | True | +| harvard announcment caplain israel hamas | 45.3474 | 45.1273 | 4247 | 0.00485323 | 0.220081 | True | False | True | +| fake ai hoax paper | 7.76698 | 7.69723 | 3290 | 0.00898037 | 0.0697503 | False | False | True | For instance, the Wikipedia extract on 'LK-99' demonstrates high initial perplexity and significant improvement, suggesting it is both novel and learnable—a hallmark of quality content. In contrast, texts like AI-generated papers, which show low perplexity or minimal improvement, are likely predictable or already within the model's training corpus, indicating lower quality. diff --git a/nbs/01_detection_using_adapter_ft copy.ipynb b/nbs/01_detection_using_adapter_ft copy.ipynb deleted file mode 100644 index 129f409..0000000 --- a/nbs/01_detection_using_adapter_ft copy.ipynb +++ /dev/null @@ -1,7167 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "https://github.com/huggingface/peft/blob/main/examples/fp4_finetuning/finetune_fp4_opt_bnb_peft.py" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - } - ], - "source": [ - "from torch import optim\n", - "import lightning as pl\n", - "from matplotlib import pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "import torch\n", - "import torch.nn as nn\n", - "import transformers\n", - "from datasets import load_dataset\n", - "from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, AutoConfig\n", - "import numpy as np\n", - "from tqdm.auto import tqdm\n", - "import pandas as pd\n", - "import warnings\n", - "from peft import LoraConfig, get_peft_model, IA3Config" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "plt.style.use('seaborn-v0')\n", - "torch.set_float32_matmul_precision('medium')\n", - "warnings.filterwarnings(\"ignore\", \".*does not have many workers.*\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"0\"\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# model_name = \"TheBloke/phi-2-GPTQ\"\n", - "model_name = \"microsoft/phi-2\"\n", - "\n", - "def load_model():\n", - "\n", - " model = AutoModelForCausalLM.from_pretrained(\n", - " model_name,\n", - " # quantization_config=BitsAndBytesConfig(\n", - " # load_in_4bit=True,\n", - " # llm_int8_threshold=6.0,\n", - " # llm_int8_has_fp16_weight=False,\n", - " # bnb_4bit_compute_dtype=torch.float16,\n", - " # bnb_4bit_use_double_quant=True,\n", - " # bnb_4bit_quant_type=\"nf4\",\n", - " # ),\n", - " torch_dtype=torch.float16,\n", - " trust_remote_code=True,\n", - " )\n", - "\n", - "\n", - " # config = AutoConfig.from_pretrained(model_name, trust_remote_code=True,)\n", - " # config.quantization_config['use_exllama'] = False\n", - " # config.quantization_config['disable_exllama'] = True\n", - " # model = AutoModelForCausalLM.from_pretrained(\n", - " # model_name,\n", - " # torch_dtype=torch.bfloat16,\n", - " # trust_remote_code=True,\n", - " # config=config,\n", - " # )\n", - " return model\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Loading checkpoint shards: 100%|██████████| 2/2 [00:01<00:00, 1.48it/s]\n", - "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n" - ] - } - ], - "source": [ - "base_model = load_model()\n", - "tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True,)\n", - "tokenizer.pad_token = tokenizer.eos_token" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "def reset_model(base_model):\n", - " # peft_config = LoraConfig(\n", - " # # task_type=TaskType.TOKEN_CLS, \n", - " # target_modules=[ \"fc2\", \"Wqkv\",],\n", - " # inference_mode=False, r=4, lora_alpha=4, \n", - " # # lora_dropout=0.1, \n", - " # # bias=\"all\"\n", - " # )\n", - " peft_config = IA3Config(\n", - " target_modules=[ \"fc2\", \"Wqkv\", 'out_proj', 'fc1'], \n", - " feedforward_modules=[\"fc2\", 'fc1', 'out_proj'],\n", - " inference_mode=False,\n", - " )\n", - " model = get_peft_model(base_model, peft_config)\n", - " model.config.use_cache = False\n", - " return model\n", - "\n", - "model = reset_model(base_model)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[PosixPath('../samples/bletchley_decleration.md'), PosixPath('../samples/cicero_fin1.md'), PosixPath('../samples/disney_appointment.md'), PosixPath('../samples/fake_paper.md'), PosixPath('../samples/fauci_emails.md'), PosixPath('../samples/harvard_announcement_reminders.md'), PosixPath('../samples/how_to_catch_a_liar.md'), PosixPath('../samples/lk-99_end.md'), PosixPath('../samples/lk-99_espanol.md'), PosixPath('../samples/lorem_ipsum.md'), PosixPath('../samples/openai_board_ann.md'), PosixPath('../samples/openai_paper_weak_to_strong.md'), PosixPath('../samples/politics_is_the_mind_killer.md'), PosixPath('../samples/statement_vyKamala_on_passing_of_johnson.md'), PosixPath('../samples/survey_of_rumours.md')]\n" - ] - }, - { - "data": { - "text/plain": [ - "dict_keys(['f', 'title', 'url', 'content'])" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "MAX_LEN = 400\n", - "\n", - "import frontmatter\n", - "from pathlib import Path\n", - "sample_files = sorted(Path(\"../samples/\").glob('*.md'))\n", - "print(sample_files)\n", - "samples = [{'f':f, **frontmatter.load(f).to_dict()} for f in sample_files]\n", - "\n", - "for sample in samples:\n", - " assert 'title' in sample, sample['f']\n", - " assert 'content' in sample\n", - "samples[0].keys()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Helpers" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "# modified from https://github.dev/huggingface/evaluate/blob/8dfe05784099fb9af55b8e77793205a3b7c86465/measurements/perplexity/perplexity.py#L154\n", - "import evaluate\n", - "from evaluate import logging\n", - "from torch.nn import CrossEntropyLoss\n", - "from torch.utils.data import DataLoader\n", - "\n", - "def perplexity_compute(\n", - " ds, model, tokenizer, batch_size: int = 16, add_start_token: bool = True, device=None, max_length=None\n", - "):\n", - " model = model.to(device)\n", - "\n", - "\n", - " ds = ds.with_format('pt')\n", - " dl = DataLoader(ds, batch_size=1, shuffle=False, num_workers=0, collate_fn=tokenizer.pad, pin_memory=True)\n", - " ppls = []\n", - " loss_fct = CrossEntropyLoss(reduction=\"none\")\n", - " for b in dl:\n", - " input_ids = b['input_ids'].to(device)\n", - " attention_mask = b['attention_mask'].to(device)\n", - " print(attention_mask)\n", - "\n", - " labels = input_ids\n", - "\n", - " with torch.no_grad():\n", - " out_logits = model(input_ids=input_ids, attention_mask=attention_mask).logits\n", - "\n", - " shift_logits = out_logits[..., :-1, :].contiguous()\n", - " shift_labels = labels[..., 1:].contiguous()\n", - " shift_attention_mask_batch = attention_mask[..., 1:].contiguous()\n", - "\n", - " perplexity_batch = torch.exp(\n", - " (loss_fct(shift_logits.transpose(1, 2), shift_labels) * shift_attention_mask_batch).sum(1)\n", - " / shift_attention_mask_batch.sum(1)\n", - " )\n", - "\n", - " ppls += perplexity_batch.tolist()\n", - "\n", - " return {\"perplexities\": ppls, \"mean_perplexity\": torch.tensor(ppls).mean()}" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "# perplexity_compute(ds=ds_val, model=model, tokenizer=tokenizer, device='cuda')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Training" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "from torch.nn import functional as F\n", - "from torch.utils.data import DataLoader, TensorDataset\n", - "from datasets import Dataset" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Lightning helpers" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "def eval(model, tokenizer, ds_val: Dataset):\n", - " model.eval();\n", - " with torch.no_grad():\n", - " with model.disable_adapter():\n", - " results = perplexity_compute(ds=ds_val, model=model, tokenizer=tokenizer, device='cuda')\n", - " results2 = perplexity_compute(ds=ds_val, model=model, tokenizer=tokenizer, device='cuda')\n", - " return dict(before=results['mean_perplexity'].item(), after=results2['mean_perplexity'].item())\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Train" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "from datasets import Dataset\n", - "\n", - "\n", - "def compute_metrics(eval_prediction):\n", - " return {}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Trainer docs\n", - "\n", - "- https://huggingface.co/docs/transformers/v4.36.1/en/main_classes/trainer#transformers.Trainer" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(400, 14201)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "MAX_LEN, len(sample['content'])//3" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "def tokenize_and_split(examples):\n", - " l = len(tokenizer(examples).input_ids[0])\n", - " max_len = min(l//3, MAX_LEN) # break into at least 5\n", - " max_len = max(max_len, 10)\n", - "\n", - "\n", - " result = tokenizer(\n", - " examples,\n", - " # add_special_tokens=False,\n", - " truncation=True,\n", - " stride=2,\n", - " max_length=max_len,\n", - " return_overflowing_tokens=True,\n", - " return_attention_mask=True,\n", - " # return_tensors=\"pt\",\n", - " )\n", - " return result\n", - "\n", - "# s = sample['content']\n", - "# first_half = s[:len(s)//2]\n", - "# second_half = s[len(s)//2:]\n", - "# ds_train = Dataset.from_dict(tokenize_and_split([first_half]))\n", - "# ds_val = Dataset.from_dict(tokenize_and_split([second_half]))\n", - "# ds_train" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Token indices sequence length is longer than the specified maximum sequence length for this model (8172 > 2048). Running this sequence through the model will result in indexing errors\n" - ] - } - ], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "s = sample['content']\n", - "\n", - "d = Dataset.from_dict(tokenize_and_split([s]))\n", - "d2 = d.train_test_split(test_size=0.5, seed=42)\n", - "ds_train = d2['train']\n", - "ds_val = d2['test']" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "os.environ['CUDA_VISIBLE_DEVICES']=\"1\"" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "def learn_sample(sample):\n", - " # device = 'cuda'\n", - " # lr = 4e-3\n", - " # epochs = 3\n", - " # accum_steps = 1\n", - " batch_size = 1\n", - " verbose = False\n", - "\n", - " s = sample['content']\n", - "\n", - " d = Dataset.from_dict(tokenize_and_split([s]))\n", - " d2 = d.train_test_split(test_size=0.5, seed=42)\n", - " ds_train = d2['train']\n", - " ds_val = d2['test']\n", - "\n", - " \n", - " model = reset_model(base_model)\n", - " # eval(model, tokenizer, ds_train)\n", - "\n", - " # https://huggingface.co/docs/transformers/v4.36.1/en/main_classes/trainer#transformers.Trainer\n", - " trainer = transformers.Trainer(\n", - " model=model,\n", - " train_dataset=ds_train,\n", - " eval_dataset=ds_val,\n", - " compute_metrics=compute_metrics, # without this it wont even give val loss\n", - " args=transformers.TrainingArguments(\n", - " # checkpoint='epoch',\n", - " save_strategy='epoch',\n", - " label_names=['labels',],\n", - " per_device_train_batch_size=batch_size,\n", - " gradient_accumulation_steps=3,\n", - " warmup_steps=6,\n", - " max_steps=20,\n", - " learning_rate=3e-3,\n", - " fp16=True,\n", - " logging_steps=1,\n", - " output_dir=\"outputs\",\n", - " log_level='error',\n", - " # do_eval=True,\n", - " evaluation_strategy=\"epoch\",\n", - " eval_steps=1,\n", - " load_best_model_at_end=True,\n", - " \n", - " # disable_tqdm=not verbose,\n", - " ),\n", - " data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False),\n", - " )\n", - " trainer._signature_columns = ['input_ids', 'attention_mask', 'labels',]\n", - " model.config.use_cache = False # silence the warnings. Please re-enable for inference!\n", - " train_output = trainer.train()\n", - "\n", - " df_hist = pd.DataFrame(trainer.state.log_history)\n", - " df_hist_epoch = df_hist.groupby('epoch').last().drop(columns=['step'])\n", - " df_hist_step = df_hist.set_index('step').dropna(thresh=2, axis=1)\n", - " if verbose:\n", - " df_hist_epoch['loss'].plot()\n", - " plt.twinx()\n", - " df_hist_epoch['eval_loss'].plot(c='b', label='eval')\n", - " plt.legend()\n", - " plt.show()\n", - "\n", - "\n", - " result_train = {f'train/{k}':v for k,v in eval(model, tokenizer, ds_train).items()}\n", - " result = eval(model, tokenizer, ds_val)\n", - " result['hist'] = df_hist_epoch\n", - " result.update(result_train)\n", - " return result\n" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - " 0%| | 0/20 [00:00 3\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43mlearn_sample\u001b[49m\u001b[43m(\u001b[49m\u001b[43msample\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28mprint\u001b[39m(sample[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtitle\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;28mdict\u001b[39m(before\u001b[38;5;241m=\u001b[39mr[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbefore\u001b[39m\u001b[38;5;124m'\u001b[39m], after\u001b[38;5;241m=\u001b[39mr[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mafter\u001b[39m\u001b[38;5;124m'\u001b[39m]))\n", - "Cell \u001b[0;32mIn[18], line 50\u001b[0m, in \u001b[0;36mlearn_sample\u001b[0;34m(sample)\u001b[0m\n\u001b[1;32m 48\u001b[0m trainer\u001b[38;5;241m.\u001b[39m_signature_columns \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124minput_ids\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mattention_mask\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlabels\u001b[39m\u001b[38;5;124m'\u001b[39m,]\n\u001b[1;32m 49\u001b[0m model\u001b[38;5;241m.\u001b[39mconfig\u001b[38;5;241m.\u001b[39muse_cache \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m \u001b[38;5;66;03m# silence the warnings. Please re-enable for inference!\u001b[39;00m\n\u001b[0;32m---> 50\u001b[0m train_output \u001b[38;5;241m=\u001b[39m \u001b[43mtrainer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 52\u001b[0m df_hist \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mDataFrame(trainer\u001b[38;5;241m.\u001b[39mstate\u001b[38;5;241m.\u001b[39mlog_history)\n\u001b[1;32m 53\u001b[0m df_hist_epoch \u001b[38;5;241m=\u001b[39m df_hist\u001b[38;5;241m.\u001b[39mgroupby(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mepoch\u001b[39m\u001b[38;5;124m'\u001b[39m)\u001b[38;5;241m.\u001b[39mlast()\u001b[38;5;241m.\u001b[39mdrop(columns\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mstep\u001b[39m\u001b[38;5;124m'\u001b[39m])\n", - "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/transformers/trainer.py:1591\u001b[0m, in \u001b[0;36mTrainer.train\u001b[0;34m(self, resume_from_checkpoint, trial, ignore_keys_for_eval, **kwargs)\u001b[0m\n\u001b[1;32m 1589\u001b[0m hf_hub_utils\u001b[38;5;241m.\u001b[39menable_progress_bars()\n\u001b[1;32m 1590\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43minner_training_loop\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1592\u001b[0m \u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1593\u001b[0m \u001b[43m \u001b[49m\u001b[43mresume_from_checkpoint\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresume_from_checkpoint\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1594\u001b[0m \u001b[43m \u001b[49m\u001b[43mtrial\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtrial\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1595\u001b[0m \u001b[43m \u001b[49m\u001b[43mignore_keys_for_eval\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mignore_keys_for_eval\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1596\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/transformers/trainer.py:1892\u001b[0m, in \u001b[0;36mTrainer._inner_training_loop\u001b[0;34m(self, batch_size, args, resume_from_checkpoint, trial, ignore_keys_for_eval)\u001b[0m\n\u001b[1;32m 1889\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcontrol \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcallback_handler\u001b[38;5;241m.\u001b[39mon_step_begin(args, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstate, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcontrol)\n\u001b[1;32m 1891\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maccelerator\u001b[38;5;241m.\u001b[39maccumulate(model):\n\u001b[0;32m-> 1892\u001b[0m tr_loss_step \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtraining_step\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1894\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m 1895\u001b[0m args\u001b[38;5;241m.\u001b[39mlogging_nan_inf_filter\n\u001b[1;32m 1896\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_torch_tpu_available()\n\u001b[1;32m 1897\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m (torch\u001b[38;5;241m.\u001b[39misnan(tr_loss_step) \u001b[38;5;129;01mor\u001b[39;00m torch\u001b[38;5;241m.\u001b[39misinf(tr_loss_step))\n\u001b[1;32m 1898\u001b[0m ):\n\u001b[1;32m 1899\u001b[0m \u001b[38;5;66;03m# if loss is nan or inf simply add the average of previous logged losses\u001b[39;00m\n\u001b[1;32m 1900\u001b[0m tr_loss \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m tr_loss \u001b[38;5;241m/\u001b[39m (\u001b[38;5;241m1\u001b[39m \u001b[38;5;241m+\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstate\u001b[38;5;241m.\u001b[39mglobal_step \u001b[38;5;241m-\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_globalstep_last_logged)\n", - "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/transformers/trainer.py:2787\u001b[0m, in \u001b[0;36mTrainer.training_step\u001b[0;34m(self, model, inputs)\u001b[0m\n\u001b[1;32m 2785\u001b[0m scaled_loss\u001b[38;5;241m.\u001b[39mbackward()\n\u001b[1;32m 2786\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 2787\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maccelerator\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackward\u001b[49m\u001b[43m(\u001b[49m\u001b[43mloss\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2789\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m loss\u001b[38;5;241m.\u001b[39mdetach() \u001b[38;5;241m/\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39margs\u001b[38;5;241m.\u001b[39mgradient_accumulation_steps\n", - "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/accelerate/accelerator.py:1903\u001b[0m, in \u001b[0;36mAccelerator.backward\u001b[0;34m(self, loss, **kwargs)\u001b[0m\n\u001b[1;32m 1901\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m 1902\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscaler \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-> 1903\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mscaler\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mscale\u001b[49m\u001b[43m(\u001b[49m\u001b[43mloss\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackward\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 1904\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1905\u001b[0m loss\u001b[38;5;241m.\u001b[39mbackward(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", - "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/_tensor.py:492\u001b[0m, in \u001b[0;36mTensor.backward\u001b[0;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[1;32m 482\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m has_torch_function_unary(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 483\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m handle_torch_function(\n\u001b[1;32m 484\u001b[0m Tensor\u001b[38;5;241m.\u001b[39mbackward,\n\u001b[1;32m 485\u001b[0m (\u001b[38;5;28mself\u001b[39m,),\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 490\u001b[0m inputs\u001b[38;5;241m=\u001b[39minputs,\n\u001b[1;32m 491\u001b[0m )\n\u001b[0;32m--> 492\u001b[0m \u001b[43mtorch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mautograd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackward\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 493\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgradient\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mretain_graph\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcreate_graph\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minputs\u001b[49m\n\u001b[1;32m 494\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/autograd/__init__.py:251\u001b[0m, in \u001b[0;36mbackward\u001b[0;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001b[0m\n\u001b[1;32m 246\u001b[0m retain_graph \u001b[38;5;241m=\u001b[39m create_graph\n\u001b[1;32m 248\u001b[0m \u001b[38;5;66;03m# The reason we repeat the same comment below is that\u001b[39;00m\n\u001b[1;32m 249\u001b[0m \u001b[38;5;66;03m# some Python versions print out the first line of a multi-line function\u001b[39;00m\n\u001b[1;32m 250\u001b[0m \u001b[38;5;66;03m# calls in the traceback and some print out the last line\u001b[39;00m\n\u001b[0;32m--> 251\u001b[0m \u001b[43mVariable\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_execution_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_backward\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# Calls into the C++ engine to run the backward pass\u001b[39;49;00m\n\u001b[1;32m 252\u001b[0m \u001b[43m \u001b[49m\u001b[43mtensors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 253\u001b[0m \u001b[43m \u001b[49m\u001b[43mgrad_tensors_\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 254\u001b[0m \u001b[43m \u001b[49m\u001b[43mretain_graph\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 255\u001b[0m \u001b[43m \u001b[49m\u001b[43mcreate_graph\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 256\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 257\u001b[0m \u001b[43m \u001b[49m\u001b[43mallow_unreachable\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\u001b[1;32m 258\u001b[0m \u001b[43m \u001b[49m\u001b[43maccumulate_grad\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\u001b[1;32m 259\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "data = []\n", - "for sample in samples:\n", - " r = learn_sample(sample)\n", - " print(sample['title'])\n", - " print(dict(before=r['before'], after=r['after']))\n", - " data.append(dict(**r, **sample))" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# example training\n", - "df_hist = data[-1]['hist']#.groupby('epoch').last().dropna(axis=1).drop(columns=['step'])\n", - "df_hist['loss'].plot(label='train')\n", - "plt.twinx()\n", - "df_hist['eval_loss'].plot(c='b', label='eval')\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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kUBReREREZFAUXkRERGRQFF5ERERkUBReREREZFAUXkRERGRQFF5ERERkUCJdR2guGRkZDBhwgRq167NHXfc4TqOiIiIlJCIKS/p6emkp6e7jiEiIiIlTJeNREREJFBUXkRERCRQVF5EREQkUFReREREJFBUXkRERCRQIma10R/Fxkbs0PYRLePcK5rGq7FGpmgaK0TXeMNhrDa5Av5xx0ONOsTExZXYzymJsRblOY211hZ7AhEREZESostGAbVjxw7uueceduzY4TpKqYim8WqskSmaxgrRNV6NtfSpvASUtZYVK1YQLSfOomm8GmtkiqaxQnSNV2MtfSovIiIiEigqLyIiIhIoKi8BFRcXx8UXX0xcCc4mDyfRNF6NNTJF01ghusarsZY+rTYSERGRQNGZFxEREQkUlRcREREJFJUXERERCRSVFxEREQkU9xsxyH4+/PBDpk+fztq1a4mPj6dJkyb06dOHmjVrHvR7pk6dyssvv7zP5+Li4nj33XdLOu4xGzlyJKNGjdrnczVr1uS555476Pd8++23vP/++2RlZZGamsrll19Ou3btSjjpsevfvz9ZWVn7fb5Hjx707dt3v88H6bguXLiQMWPGsGLFCrZs2cKdd95J+/btC79urWXkyJFMmjSJ3NxcmjZtSt++falRo8YhnzcjI4OxY8eSnZ1NvXr1uOaaa2jUqFFJD+ewDjXe/Px8RowYwaxZs9iwYQOJiYm0atWK3r17U6lSpYM+59G8FkrD4Y7tSy+9xBdffLHP97Rp04Z77733kM8bjsf2cGO95JJLDvh9ffr04dxzzz3g18L1uB7Je83u3bsZPnw406ZNY8+ePbRp04a+ffuSkpJy0Oc92td6Uai8hKGFCxfSs2dPjjvuOAoKCnjvvfd45JFHeOaZZyhTpsxBv69s2bI8//zzpZi0+NSpU4f777+/8GPPO/hJwSVLlvD888/Tu3dv2rVrx9dff81TTz3FE088Qd26dUsj7lF77LHH8H2/8OPVq1fzyCOPcPLJJx/0e4JyXHft2kX9+vXp1q0bTz/99H5f//jjj/n000/p378/1apV4/3332fIkCE888wzxMfHH/A5p02bxvDhw+nXrx+NGzdm/PjxDBkyhOeee44KFSqU9JAO6VDj3b17NytWrOCiiy6ifv36bN++nTfffJMnn3ySxx9//JDPW5TX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cNddd4X9PV72mjdvHhs3bixcIvp7QT6uP/30E4MHDy78ePjw4QCcfvrp9O/fn/POO49du3bx6quvkpeXR9OmTRk4cOA+8wXWr19PTk5O4cedOnUiJyeHkSNHkp2dTf369Rk4cKDz31jh0OP985//zP/+9z8A7r777n2+74EHHqBFixbA/uM93GvBlUONtV+/fqxevZovvviC3NxcKlWqROvWrfnLX/5CXFxc4fcE5dge7u8xhO5RY609aPkIynE9kveaq666CmMMQ4cOJT8/v/Amdb+3bt26wpVKwBG91o+VsdbaYns2ERERkRKmOS8iIiISKCovIiIiEigqLyIiIhIoKi8iIiISKCovIiIiEigqLyIiIhIoKi8iIiISKCovIiIiEigqLyISVUaOHMkll1yyzx1QRSRYVF5EREQkUFReREREJFBUXkRERCRQtKu0iJSIzZs3M2LECGbNmkVubi6pqan06tWLbt26AbBgwQIGDx7MbbfdxsqVK5kyZQo7d+6kZcuWXHvttVSpUmWf5/v222/56KOPWLNmDWXKlKFNmzb06dOHSpUq7fO4tWvX8v7777NgwQJ27txJlSpV6NixI5dddtk+j8vLy+Ptt99mxowZWGvp0KED1157LQkJCSX7H0ZEjpnKi4gUu+zsbO69914AevbsSfny5Zk9ezavvPIKO3bs4Jxzzil87OjRozHGcN5555GTk8P48eN5+OGHeeqpp4iPjwdg6tSpvPzyyxx33HH07t2brVu38sknn7BkyRKefPJJypUrB8CqVasYNGgQsbGxdO/enWrVqpGZmckPP/ywX3l59tlnqVq1Kr1792b58uVMnjyZ8uXL06dPn1L6ryQiR0vlRUSK3YgRI/B9n6effprk5GQAevTowXPPPcf//d//ceaZZxY+dvv27Tz77LOULVsWgAYNGvDss88yceJEzj77bPLz83n33XepU6cOgwcPLiw0TZs25fHHH2f8+PFccsklALzxxhsAPPHEE/ucubn88sv3y1i/fn1uvPHGfXJMmTJF5UUkADTnRUSKlbWW77//nhNOOAFrLTk5OYX/S0tLIy8vj+XLlxc+/rTTTissLgAdO3akYsWKzJo1C4Dly5ezdetWevbsWVhcANq1a0etWrWYOXMmADk5OSxatIiuXbvud8nJGLNfzt8XKAiVoW3btpGXl3fs/xFEpETpzIuIFKucnBxyc3OZOHEiEydOPOhj9l7qqVGjxj5fM8aQmppKVlYWQOH/16xZc7/nqVmzJosXLwZg/fr1ANSpU+eIcv6x4CQlJQGQm5tLYmLiET2HiLih8iIixcpaC0Dnzp05/fTTD/iYevXqsWbNmtKMtR/PO/CJ5735RSR8qbyISLEqX748ZcuWxfd9WrdufdDH7S0vv/zyyz6ft9aSmZlJ3bp1AahatSoA69ato2XLlvs8dt26dYVfr169OgA///xz8QxERMKW5ryISLHyPI8OHTrw/fffs3r16v2+/sfb8n/55Zfs2LGj8OPvvvuOLVu20LZtWwAaNmxIhQoV+Pzzz9mzZ0/h42bNmsXatWtp164dECpNzZo1Y8qUKWzcuHGfn6GzKSKRRWdeRKTY9e7dmwULFnDvvffSvXt3ateuzfbt21m+fDnz5s3jP//5T+Fjk5KSGDRoEF26dGHr1q2MHz+e1NRUunfvDkBsbCyXX345L7/8Mg8++CCnnHIK2dnZfPrpp1StWnWfZddXX301gwYN4p577ilcKp2VlcXMmTN56qmnSv2/g4iUDJUXESl2KSkpPProo4waNYrvv/+eCRMmkJycTJ06dfZbtnzBBRewatUqPvroI3bs2EGrVq3o27fvPjeL69KlC/Hx8Xz88ce8++67JCQkcNJJJ9GnT5/Cib8QWv48ZMgQ3n//fT7//HN2795N1apVOfnkk0tt7CJS8ozV+VQRcWDvHXZvv/12Onbs6DqOiASI5ryIiIhIoKi8iIiISKCovIiIiEigaM6LiIiIBIrOvIiIiEigqLyIiIhIoKi8iIiISKCovIiIiEigqLyIiIhIoKi8iIiISKCovIiIiEigqLyIiIhIoPw/fg4kuyKNvNEAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df_hist['learning_rate'].plot(logy=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "### Perplexity\n", - "\n", - "Perplexity measures how well a language model predicts a text sample. Lower is better\n", - "\n", - "It’s calculated as the average number of bits per word a model needs to represent the same\n", - "\n", - "https://huggingface.co/docs/transformers/perplexity\n", - "https://thegradient.pub/understanding-evaluation-metrics-for-language-models/\n", - "\n", - "The **improvement** column, is perplexity decrease" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
beforeafterlenimprovement%improvementnovellearnableBS
title
How to Catch an AI Liar28.92747923.91235054640.1733695.015129TrueTrueFalse
ibois, Philippe (2012-06-03).72.71493563.473969137070.1270859.240967TrueTrueFalse
buzzfeed foi fauci emails 202323.32009320.782446136400.1088182.537647TrueTrueFalse
disney appointment118.502907110.34452836530.0688458.158379TrueTrueFalse
blechley declaration17.86233916.78616077620.0602491.076180TrueTrueFalse
fake ai hoax paper7.7480847.47369032900.0354140.274394FalseTrueTrue
harvard announcment caplain israel hamas45.43665744.63360242470.0176740.803055TrueFalseTrue
\n", - "
" - ], - "text/plain": [ - " before after len \\\n", - "title \n", - "How to Catch an AI Liar 28.927479 23.912350 5464 \n", - "ibois, Philippe (2012-06-03). 72.714935 63.473969 13707 \n", - "buzzfeed foi fauci emails 2023 23.320093 20.782446 13640 \n", - "disney appointment 118.502907 110.344528 3653 \n", - "blechley declaration 17.862339 16.786160 7762 \n", - "fake ai hoax paper 7.748084 7.473690 3290 \n", - "harvard announcment caplain israel hamas 45.436657 44.633602 4247 \n", - "\n", - " improvement% improvement novel \\\n", - "title \n", - "How to Catch an AI Liar 0.173369 5.015129 True \n", - "ibois, Philippe (2012-06-03). 0.127085 9.240967 True \n", - "buzzfeed foi fauci emails 2023 0.108818 2.537647 True \n", - "disney appointment 0.068845 8.158379 True \n", - "blechley declaration 0.060249 1.076180 True \n", - "fake ai hoax paper 0.035414 0.274394 False \n", - "harvard announcment caplain israel hamas 0.017674 0.803055 True \n", - "\n", - " learnable BS \n", - "title \n", - "How to Catch an AI Liar True False \n", - "ibois, Philippe (2012-06-03). True False \n", - "buzzfeed foi fauci emails 2023 True False \n", - "disney appointment True False \n", - "blechley declaration True False \n", - "fake ai hoax paper True True \n", - "harvard announcment caplain israel hamas False True " - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_res = pd.DataFrame(data)\n", - "df_res['len'] = df_res.content.str.len()\n", - "df_res = df_res[['before', 'after', 'title', 'len']].set_index('title')\n", - "df_res['improvement%'] = (df_res['before'] - df_res['after'])/ df_res['before']\n", - "df_res['improvement'] = (df_res['before'] - df_res['after'])\n", - "df_res['novel'] = df_res['before'] > 15\n", - "df_res['learnable'] = df_res['improvement%'] > 0.02\n", - "\n", - "# We can measure the final score using learnable * novel\n", - "# df_res['BS'] = ~df_res['learnable'] | ~df_res['novel']\n", - "# Or just absolute perplexity improvement\n", - "df_res['BS'] = df_res['improvement'] < 1\n", - "df_res = df_res.sort_values('improvement', ascending=False)\n", - "df_res" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "| title | before | after | len | improvement% | improvement | novel | learnable | BS |\n", - "|:-----------------------------------------|----------:|----------:|------:|---------------:|--------------:|:--------|:------------|:------|\n", - "| How to Catch an AI Liar | 28.9275 | 23.9123 | 5464 | 0.173369 | 5.01513 | True | True | False |\n", - "| ibois, Philippe (2012-06-03). | 72.7149 | 63.474 | 13707 | 0.127085 | 9.24097 | True | True | False |\n", - "| buzzfeed foi fauci emails 2023 | 23.3201 | 20.7824 | 13640 | 0.108818 | 2.53765 | True | True | False |\n", - "| disney appointment | 118.503 | 110.345 | 3653 | 0.0688454 | 8.15838 | True | True | False |\n", - "| blechley declaration | 17.8623 | 16.7862 | 7762 | 0.0602485 | 1.07618 | True | True | False |\n", - "| fake ai hoax paper | 7.74808 | 7.47369 | 3290 | 0.0354144 | 0.274394 | False | True | True |\n", - "| harvard announcment caplain israel hamas | 45.4367 | 44.6336 | 4247 | 0.0176742 | 0.803055 | True | False | True |\n" - ] - } - ], - "source": [ - "print(df_res.to_markdown())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# DEBUG" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.display import display, HTML, Markdown\n", - "import torch\n", - "\n", - "@torch.no_grad()\n", - "def gen(model, inputs, tokenizer, clean=True):\n", - " s = model.generate(\n", - " input_ids=inputs[\"input_ids\"][None, :].to(model.device),\n", - " attention_mask=inputs[\"attention_mask\"][None, :].to(model.device),\n", - " use_cache=False,\n", - " max_new_tokens=100,\n", - " min_new_tokens=100,\n", - " do_sample=False,\n", - " early_stopping=False,\n", - " )\n", - " input_l = inputs[\"input_ids\"].shape[0]\n", - " tokenizer_kwargs=dict(clean_up_tokenization_spaces=clean, skip_special_tokens=clean)\n", - " old = tokenizer.decode(\n", - " s[0, :input_l][-100:], **tokenizer_kwargs\n", - " )\n", - " new = tokenizer.decode(\n", - " s[0, input_l:], **tokenizer_kwargs\n", - " )\n", - " s_old = \"\"+old.replace('\\n', '
')\n", - " s_new = '' + new.replace('\\n', '
')+ '

'\n", - " # print(s_old, s_new)\n", - " display(HTML(f\"{s_old}{s_new}\"))\n", - " # print([old, new])\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [], - "source": [ - "sample = samples[-1]\n", - "s = sample['content']\n", - "first_half = s[:len(s)//2]\n", - "second_half = s[len(s)//2:]\n", - "ds_train = Dataset.from_dict(tokenizer([first_half]))\n", - "ds_val = Dataset.from_dict(tokenizer([second_half]))" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 95, 96, 97]. This is achieved through model parallelism across specialized experts, allowing the training of models with trillions of parameters, and its specialization in handling diverse data distributions enhances its capability in few-shot learning and other complex tasks [94, 95]. To illustrate the practicality of MoE, consider its application in healthcare. For example, an MoE-based system could be used for personalized medicine, where different ‘expert’ modules specialize in various aspects of patient data analysis .




































































































\n" - ] - }, - { - "data": { - "text/html": [ - " 95, 96, 97]. This is achieved through model parallelism across specialized experts, allowing the training of models with trillions of parameters, and its specialization in handling diverse data distributions enhances its capability in few-shot learning and other complex tasks [94, 95]. To illustrate the practicality of MoE, consider its application in healthcare. For example, an MoE-based system could be used for personalized medicine, where different ‘expert’ modules specialize in various aspects of patient data analysis.




































































































" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "with model.disable_adapter():\n", - " gen(model, ds_train.with_format('pt')[0], tokenizer)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " 95, 96, 97]. This is achieved through model parallelism across specialized experts, allowing the training of models with trillions of parameters, and its specialization in handling diverse data distributions enhances its capability in few-shot learning and other complex tasks [94, 95]. To illustrate the practicality of MoE, consider its application in healthcare. For example, an MoE-based system could be used for personalized medicine, where different ‘expert’ modules specialize in various aspects of patient data analysis.




































































































" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "gen(model, ds_train.with_format('pt')[0], tokenizer)" - ] - }, - { - "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": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "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.0rc1" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/nbs/01_detection_using_adapter_ft.ipynb b/nbs/01_detection_using_adapter_ft.ipynb deleted file mode 100644 index 1301791..0000000 --- a/nbs/01_detection_using_adapter_ft.ipynb +++ /dev/null @@ -1,9616 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "https://github.com/huggingface/peft/blob/main/examples/fp4_finetuning/finetune_fp4_opt_bnb_peft.py" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [], - "source": [ - "from torch import optim\n", - "import lightning as pl\n", - "from matplotlib import pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "import torch\n", - "import torch.nn as nn\n", - "import transformers\n", - "from datasets import load_dataset\n", - "from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, AutoConfig\n", - "import numpy as np\n", - "from tqdm.auto import tqdm\n", - "import pandas as pd\n", - "import warnings\n", - "from peft import LoraConfig, get_peft_model, IA3Config" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [], - "source": [ - "plt.style.use('ggplot')\n", - "torch.set_float32_matmul_precision('medium')\n", - "warnings.filterwarnings(\"ignore\", \".*does not have many workers.*\")" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [], - "source": [ - "# os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"0\"\n" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [], - "source": [ - "# model_name = \"TheBloke/phi-2-GPTQ\"\n", - "model_name = \"microsoft/phi-2\"\n", - "\n", - "def load_model():\n", - "\n", - " model = AutoModelForCausalLM.from_pretrained(\n", - " model_name,\n", - " # quantization_config=BitsAndBytesConfig(\n", - " # load_in_4bit=True,\n", - " # llm_int8_threshold=6.0,\n", - " # llm_int8_has_fp16_weight=False,\n", - " # bnb_4bit_compute_dtype=torch.float16,\n", - " # bnb_4bit_use_double_quant=True,\n", - " # bnb_4bit_quant_type=\"nf4\",\n", - " # ),\n", - " torch_dtype=torch.float16,\n", - " trust_remote_code=True,\n", - " )\n", - "\n", - "\n", - " # config = AutoConfig.from_pretrained(model_name, trust_remote_code=True,)\n", - " # config.quantization_config['use_exllama'] = False\n", - " # config.quantization_config['disable_exllama'] = True\n", - " # model = AutoModelForCausalLM.from_pretrained(\n", - " # model_name,\n", - " # torch_dtype=torch.bfloat16,\n", - " # trust_remote_code=True,\n", - " # config=config,\n", - " # )\n", - " return model\n" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Loading checkpoint shards: 100%|██████████| 2/2 [00:01<00:00, 1.73it/s]\n" - ] - } - ], - "source": [ - "base_model = load_model()\n", - "tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True,)\n", - "tokenizer.pad_token = tokenizer.eos_token" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [], - "source": [ - "def reset_model(base_model):\n", - " # peft_config = LoraConfig(\n", - " # # task_type=TaskType.TOKEN_CLS, \n", - " # target_modules=[ \"fc2\", \"Wqkv\",],\n", - " # inference_mode=False, r=4, lora_alpha=4, \n", - " # # lora_dropout=0.1, \n", - " # # bias=\"all\"\n", - " # )\n", - " peft_config = IA3Config(\n", - " target_modules=[ \"fc2\", \"Wqkv\",], \n", - " feedforward_modules=[\"fc2\"],\n", - " inference_mode=False,\n", - " )\n", - " model = get_peft_model(base_model, peft_config)\n", - " model.config.use_cache = False\n", - " return model\n", - "\n", - "model = reset_model(base_model)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[PosixPath('../samples/bletchley_decleration.md'), PosixPath('../samples/cicero_fin1.md'), PosixPath('../samples/disney_appointment.md'), PosixPath('../samples/fake_paper.md'), PosixPath('../samples/fauci_emails.md'), PosixPath('../samples/harvard_announcement_reminders.md'), PosixPath('../samples/how_to_catch_a_liar.md'), PosixPath('../samples/lk-99_end.md'), PosixPath('../samples/lk-99_espanol.md'), PosixPath('../samples/lorem_ipsum.md'), PosixPath('../samples/openai_board_ann.md'), PosixPath('../samples/openai_paper_weak_to_strong.md'), PosixPath('../samples/politics_is_the_mind_killer.md'), PosixPath('../samples/statement_vyKamala_on_passing_of_johnson.md'), PosixPath('../samples/survey_of_rumours.md')]\n" - ] - }, - { - "data": { - "text/plain": [ - "dict_keys(['f', 'title', 'url', 'content'])" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "MAX_LEN = 400\n", - "\n", - "import frontmatter\n", - "from pathlib import Path\n", - "sample_files = sorted(Path(\"../samples/\").glob('*.md'))\n", - "print(sample_files)\n", - "samples = [{'f':f, **frontmatter.load(f).to_dict()} for f in sample_files]\n", - "\n", - "for sample in samples:\n", - " assert 'title' in sample, sample['f']\n", - " assert 'content' in sample\n", - "samples[0].keys()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Helpers" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [], - "source": [ - "# modified from https://github.dev/huggingface/evaluate/blob/8dfe05784099fb9af55b8e77793205a3b7c86465/measurements/perplexity/perplexity.py#L154\n", - "import evaluate\n", - "from evaluate import logging\n", - "from torch.nn import CrossEntropyLoss\n", - "\n", - "\n", - "def perplexity_compute(\n", - " data, model, tokenizer, batch_size: int = 16, add_start_token: bool = True, device=None, max_length=None\n", - "):\n", - " model = model.to(device)\n", - "\n", - "\n", - " max_tokenized_len = max_length\n", - "\n", - " encodings = tokenizer(\n", - " data,\n", - " add_special_tokens=False,\n", - " padding=True,\n", - " truncation=True if max_tokenized_len else False,\n", - " max_length=max_tokenized_len,\n", - " return_tensors=\"pt\",\n", - " return_attention_mask=True,\n", - " ).to(device)\n", - "\n", - " encoded_texts = encodings[\"input_ids\"]\n", - " attn_masks = encodings[\"attention_mask\"]\n", - "\n", - " # check that each input is long enough:\n", - " if add_start_token:\n", - " assert torch.all(torch.ge(attn_masks.sum(1), 1)), \"Each input text must be at least one token long.\"\n", - " else:\n", - " assert torch.all(\n", - " torch.ge(attn_masks.sum(1), 2)\n", - " ), \"When add_start_token=False, each input text must be at least two tokens long. Run with add_start_token=True if inputting strings of only one token, and remove all empty input strings.\"\n", - "\n", - " ppls = []\n", - " loss_fct = CrossEntropyLoss(reduction=\"none\")\n", - "\n", - " for start_index in logging.tqdm(range(0, len(encoded_texts), batch_size)):\n", - " end_index = min(start_index + batch_size, len(encoded_texts))\n", - " encoded_batch = encoded_texts[start_index:end_index]\n", - " attn_mask = attn_masks[start_index:end_index]\n", - "\n", - " labels = encoded_batch\n", - "\n", - " with torch.no_grad():\n", - " out_logits = model(encoded_batch, attention_mask=attn_mask).logits\n", - "\n", - " shift_logits = out_logits[..., :-1, :].contiguous()\n", - " shift_labels = labels[..., 1:].contiguous()\n", - " shift_attention_mask_batch = attn_mask[..., 1:].contiguous()\n", - "\n", - " perplexity_batch = torch.exp(\n", - " (loss_fct(shift_logits.transpose(1, 2), shift_labels) * shift_attention_mask_batch).sum(1)\n", - " / shift_attention_mask_batch.sum(1)\n", - " )\n", - "\n", - " ppls += perplexity_batch.tolist()\n", - "\n", - " return {\"perplexities\": ppls, \"mean_perplexity\": torch.tensor(ppls).mean()}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Training" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [], - "source": [ - "from torch.nn import functional as F\n", - "from torch.utils.data import DataLoader, TensorDataset" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Lightning helpers" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [], - "source": [ - "def eval(model, tokenizer, second_half):\n", - " model.eval();\n", - " with torch.no_grad():\n", - " with model.disable_adapter():\n", - " results = perplexity_compute(data=second_half, model=model, tokenizer=tokenizer, device='cuda')\n", - " results2 = perplexity_compute(data=second_half, model=model, tokenizer=tokenizer, device='cuda')\n", - " return dict(before=results['mean_perplexity'].item(), after=results2['mean_perplexity'].item())\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Train" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [], - "source": [ - "from datasets import Dataset\n", - "\n", - "\n", - "def compute_metrics(eval_prediction):\n", - " return {}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Trainer docs\n", - "\n", - "- https://huggingface.co/docs/transformers/v4.36.1/en/main_classes/trainer#transformers.Trainer" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "def tokenize_and_split(examples):\n", - " result = tokenizer(\n", - " examples,\n", - " truncation=True,\n", - " max_length=MAX_LEN,\n", - " return_overflowing_tokens=True,\n", - " )\n", - " return result\n", - "\n", - "# s = sample['content']\n", - "# first_half = s[:len(s)//2]\n", - "# second_half = s[len(s)//2:]\n", - "# ds_train = Dataset.from_dict(tokenize_and_split([first_half]))\n", - "# ds_val = Dataset.from_dict(tokenize_and_split([second_half]))\n", - "# ds_train" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [], - "source": [ - "def learn_sample(sample):\n", - " # device = 'cuda'\n", - " # lr = 4e-3\n", - " # epochs = 3\n", - " # accum_steps = 1\n", - " batch_size = 1\n", - " verbose = False\n", - "\n", - " s = sample['content']\n", - " first_half = s[:len(s)//2]\n", - " second_half = s[len(s)//2:]\n", - "\n", - " # TODO, I guess we need to window this\n", - " ds_train = Dataset.from_dict(tokenize_and_split([first_half]))\n", - " ds_val = Dataset.from_dict(tokenize_and_split([second_half]))\n", - "\n", - " os.environ['CUDA_VISIBLE_DEVICES']=\"1\"\n", - " model = reset_model(base_model)\n", - " eval(model, tokenizer, second_half)\n", - "\n", - " # https://huggingface.co/docs/transformers/v4.36.1/en/main_classes/trainer#transformers.Trainer\n", - " trainer = transformers.Trainer(\n", - " model=model,\n", - " train_dataset=ds_train,\n", - " eval_dataset=ds_val,\n", - " compute_metrics=compute_metrics, # without this it wont even give val loss\n", - " args=transformers.TrainingArguments(\n", - " # checkpoint='epoch',\n", - " save_strategy='epoch',\n", - " label_names=['labels',],\n", - " per_device_train_batch_size=batch_size,\n", - " gradient_accumulation_steps=3,\n", - " warmup_steps=6,\n", - " max_steps=20,\n", - " learning_rate=3e-3,\n", - " fp16=True,\n", - " logging_steps=1,\n", - " output_dir=\"outputs\",\n", - " log_level='error',\n", - " # do_eval=True,\n", - " evaluation_strategy=\"epoch\",\n", - " eval_steps=1,\n", - " load_best_model_at_end=True,\n", - " \n", - " # disable_tqdm=not verbose,\n", - " ),\n", - " data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False),\n", - " )\n", - " trainer._signature_columns = ['input_ids', 'attention_mask', 'labels',]\n", - " model.config.use_cache = False # silence the warnings. Please re-enable for inference!\n", - " train_output = trainer.train()\n", - "\n", - " df_hist = pd.DataFrame(trainer.state.log_history)\n", - " df_hist_epoch = df_hist.groupby('epoch').last().drop(columns=['step'])\n", - " df_hist_step = df_hist.set_index('step').dropna(thresh=2, axis=1)\n", - " if verbose:\n", - " df_hist_epoch['loss'].plot()\n", - " plt.twinx()\n", - " df_hist_epoch['eval_loss'].plot(c='b', label='eval')\n", - " plt.legend()\n", - " plt.show()\n", - "\n", - "\n", - " result_train = {f'train/{k}':v for k,v in eval(model, tokenizer, first_half).items()}\n", - " result = eval(model, tokenizer, second_half)\n", - " result['hist'] = df_hist_epoch\n", - " result.update(result_train)\n", - " return result\n" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 6.03it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 5.68it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8731, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 2.934140205383301, 'eval_runtime': 1.8507, 'eval_samples_per_second': 1.081, 'eval_steps_per_second': 0.54, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8722, 'learning_rate': 0.001, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.930333375930786, 'eval_runtime': 1.8509, 'eval_samples_per_second': 1.081, 'eval_steps_per_second': 0.54, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8639, 'learning_rate': 0.0015, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.9261159896850586, 'eval_runtime': 1.852, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8556, 'learning_rate': 0.002, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.921092987060547, 'eval_runtime': 1.8512, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.84, 'learning_rate': 0.0025, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.9118905067443848, 'eval_runtime': 1.8512, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8213, 'learning_rate': 0.003, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.9033427238464355, 'eval_runtime': 1.8515, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7984, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8970065116882324, 'eval_runtime': 1.8538, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7788, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8897409439086914, 'eval_runtime': 1.8523, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.752, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.888181209564209, 'eval_runtime': 1.8519, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7382, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.890364408493042, 'eval_runtime': 1.8521, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7212, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8928794860839844, 'eval_runtime': 1.8515, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7034, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8941824436187744, 'eval_runtime': 1.8532, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.692, 'learning_rate': 0.0015, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.896975517272949, 'eval_runtime': 1.8526, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6729, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.899407386779785, 'eval_runtime': 1.8615, 'eval_samples_per_second': 1.074, 'eval_steps_per_second': 0.537, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6678, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.898254871368408, 'eval_runtime': 1.8542, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6561, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.899857521057129, 'eval_runtime': 1.8522, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6448, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.9020445346832275, 'eval_runtime': 1.8524, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6436, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.9011523723602295, 'eval_runtime': 1.8527, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6423, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.9012508392333984, 'eval_runtime': 1.8541, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6364, 'learning_rate': 0.0, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.901865005493164, 'eval_runtime': 1.853, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 20.0}\n", - "{'train_runtime': 110.4196, 'train_samples_per_second': 1.087, 'train_steps_per_second': 0.181, 'train_loss': 0.7436936140060425, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 5.55it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 5.26it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 5.83it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 5.40it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "blechley declaration\n", - "{'before': 15.099042892456055, 'after': 14.732343673706055}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 1.40it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.34it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.5636, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 4.2795186042785645, 'eval_runtime': 2.1952, 'eval_samples_per_second': 2.733, 'eval_steps_per_second': 0.456, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.5644, 'learning_rate': 0.001, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.2700276374816895, 'eval_runtime': 2.2003, 'eval_samples_per_second': 2.727, 'eval_steps_per_second': 0.454, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.57, 'learning_rate': 0.0015, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.258336544036865, 'eval_runtime': 2.1983, 'eval_samples_per_second': 2.729, 'eval_steps_per_second': 0.455, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.5474, 'learning_rate': 0.002, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.244501113891602, 'eval_runtime': 2.1998, 'eval_samples_per_second': 2.728, 'eval_steps_per_second': 0.455, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.4968, 'learning_rate': 0.0025, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.230161666870117, 'eval_runtime': 2.1985, 'eval_samples_per_second': 2.729, 'eval_steps_per_second': 0.455, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.4635, 'learning_rate': 0.003, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.221675395965576, 'eval_runtime': 2.198, 'eval_samples_per_second': 2.73, 'eval_steps_per_second': 0.455, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.4153, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.215108871459961, 'eval_runtime': 2.1948, 'eval_samples_per_second': 2.734, 'eval_steps_per_second': 0.456, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.36, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.209522247314453, 'eval_runtime': 2.1924, 'eval_samples_per_second': 2.737, 'eval_steps_per_second': 0.456, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.3225, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.2080464363098145, 'eval_runtime': 2.192, 'eval_samples_per_second': 2.737, 'eval_steps_per_second': 0.456, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.2847, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.206252574920654, 'eval_runtime': 2.1916, 'eval_samples_per_second': 2.738, 'eval_steps_per_second': 0.456, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.2253, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.205601215362549, 'eval_runtime': 2.1978, 'eval_samples_per_second': 2.73, 'eval_steps_per_second': 0.455, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.2147, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.205047130584717, 'eval_runtime': 2.1965, 'eval_samples_per_second': 2.732, 'eval_steps_per_second': 0.455, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.1814, 'learning_rate': 0.0015, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.206936359405518, 'eval_runtime': 2.1952, 'eval_samples_per_second': 2.733, 'eval_steps_per_second': 0.456, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.1625, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.206596851348877, 'eval_runtime': 2.1968, 'eval_samples_per_second': 2.731, 'eval_steps_per_second': 0.455, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.1308, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.205368518829346, 'eval_runtime': 2.1979, 'eval_samples_per_second': 2.73, 'eval_steps_per_second': 0.455, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.1072, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.205146789550781, 'eval_runtime': 2.1976, 'eval_samples_per_second': 2.73, 'eval_steps_per_second': 0.455, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.0948, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.203622817993164, 'eval_runtime': 2.197, 'eval_samples_per_second': 2.731, 'eval_steps_per_second': 0.455, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.0732, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.204572677612305, 'eval_runtime': 2.1979, 'eval_samples_per_second': 2.73, 'eval_steps_per_second': 0.455, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.0751, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.205753803253174, 'eval_runtime': 2.1966, 'eval_samples_per_second': 2.731, 'eval_steps_per_second': 0.455, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 4.06, 'learning_rate': 0.0, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 4.205715179443359, 'eval_runtime': 2.1947, 'eval_samples_per_second': 2.734, 'eval_steps_per_second': 0.456, 'epoch': 20.0}\n", - "{'train_runtime': 261.4768, 'train_samples_per_second': 0.459, 'train_steps_per_second': 0.076, 'train_loss': 4.29565052986145, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 1.41it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.33it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.37it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.30it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ibois, Philippe (2012-06-03).\n", - "{'before': 61.07478713989258, 'after': 59.88446807861328}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 8.06it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 7.54it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6237, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 2.759657382965088, 'eval_runtime': 1.8536, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.621, 'learning_rate': 0.001, 'epoch': 2.0}\n", - "{'eval_loss': 2.7597293853759766, 'eval_runtime': 1.8541, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6206, 'learning_rate': 0.0015, 'epoch': 3.0}\n", - "{'eval_loss': 2.7564902305603027, 'eval_runtime': 1.853, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5974, 'learning_rate': 0.002, 'epoch': 4.0}\n", - "{'eval_loss': 2.752861976623535, 'eval_runtime': 1.8565, 'eval_samples_per_second': 1.077, 'eval_steps_per_second': 0.539, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5802, 'learning_rate': 0.0025, 'epoch': 5.0}\n", - "{'eval_loss': 2.748295307159424, 'eval_runtime': 1.8529, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5569, 'learning_rate': 0.003, 'epoch': 6.0}\n", - "{'eval_loss': 2.7460708618164062, 'eval_runtime': 1.8524, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5307, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n", - "{'eval_loss': 2.738633632659912, 'eval_runtime': 1.8539, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.504, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n", - "{'eval_loss': 2.734565019607544, 'eval_runtime': 1.8537, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4754, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n", - "{'eval_loss': 2.733013153076172, 'eval_runtime': 1.8536, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4581, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n", - "{'eval_loss': 2.731515645980835, 'eval_runtime': 1.8536, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4333, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n", - "{'eval_loss': 2.7264902591705322, 'eval_runtime': 1.8544, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4228, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n", - "{'eval_loss': 2.7332866191864014, 'eval_runtime': 1.855, 'eval_samples_per_second': 1.078, 'eval_steps_per_second': 0.539, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4027, 'learning_rate': 0.0015, 'epoch': 13.0}\n", - "{'eval_loss': 2.729839324951172, 'eval_runtime': 1.855, 'eval_samples_per_second': 1.078, 'eval_steps_per_second': 0.539, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3891, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n", - "{'eval_loss': 2.731370687484741, 'eval_runtime': 1.8598, 'eval_samples_per_second': 1.075, 'eval_steps_per_second': 0.538, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3841, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n", - "{'eval_loss': 2.732412338256836, 'eval_runtime': 1.8545, 'eval_samples_per_second': 1.078, 'eval_steps_per_second': 0.539, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3689, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n", - "{'eval_loss': 2.7393574714660645, 'eval_runtime': 1.8536, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3563, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n", - "{'eval_loss': 2.7468791007995605, 'eval_runtime': 1.8542, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3526, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n", - "{'eval_loss': 2.7505300045013428, 'eval_runtime': 1.8532, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3435, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n", - "{'eval_loss': 2.757460594177246, 'eval_runtime': 1.8536, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3398, 'learning_rate': 0.0, 'epoch': 20.0}\n", - "{'eval_loss': 2.760329246520996, 'eval_runtime': 1.8558, 'eval_samples_per_second': 1.078, 'eval_steps_per_second': 0.539, 'epoch': 20.0}\n", - "{'train_runtime': 42.5025, 'train_samples_per_second': 2.823, 'train_steps_per_second': 0.471, 'train_loss': 0.4680565565824509, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 8.23it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 7.93it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 7.98it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 7.61it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "disney appointment\n", - "{'before': 7.112776756286621, 'after': 6.932384490966797}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 9.15it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 8.60it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6745, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 1.5698368549346924, 'eval_runtime': 0.1186, 'eval_samples_per_second': 8.435, 'eval_steps_per_second': 8.435, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6751, 'learning_rate': 0.001, 'epoch': 2.0}\n", - "{'eval_loss': 1.5680769681930542, 'eval_runtime': 0.1122, 'eval_samples_per_second': 8.911, 'eval_steps_per_second': 8.911, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6686, 'learning_rate': 0.0015, 'epoch': 3.0}\n", - "{'eval_loss': 1.5664819478988647, 'eval_runtime': 0.1151, 'eval_samples_per_second': 8.685, 'eval_steps_per_second': 8.685, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6542, 'learning_rate': 0.002, 'epoch': 4.0}\n", - "{'eval_loss': 1.5632203817367554, 'eval_runtime': 0.1171, 'eval_samples_per_second': 8.537, 'eval_steps_per_second': 8.537, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.63, 'learning_rate': 0.0025, 'epoch': 5.0}\n", - "{'eval_loss': 1.5577468872070312, 'eval_runtime': 0.117, 'eval_samples_per_second': 8.549, 'eval_steps_per_second': 8.549, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.604, 'learning_rate': 0.003, 'epoch': 6.0}\n", - "{'eval_loss': 1.5563703775405884, 'eval_runtime': 0.1164, 'eval_samples_per_second': 8.593, 'eval_steps_per_second': 8.593, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5629, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n", - "{'eval_loss': 1.556630253791809, 'eval_runtime': 0.1174, 'eval_samples_per_second': 8.517, 'eval_steps_per_second': 8.517, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.526, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n", - "{'eval_loss': 1.5555983781814575, 'eval_runtime': 0.116, 'eval_samples_per_second': 8.618, 'eval_steps_per_second': 8.618, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4898, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n", - "{'eval_loss': 1.557144284248352, 'eval_runtime': 0.1149, 'eval_samples_per_second': 8.701, 'eval_steps_per_second': 8.701, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4518, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n", - "{'eval_loss': 1.5535787343978882, 'eval_runtime': 0.1183, 'eval_samples_per_second': 8.457, 'eval_steps_per_second': 8.457, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4442, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n", - "{'eval_loss': 1.5532571077346802, 'eval_runtime': 0.117, 'eval_samples_per_second': 8.545, 'eval_steps_per_second': 8.545, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4233, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n", - "{'eval_loss': 1.5584156513214111, 'eval_runtime': 0.1136, 'eval_samples_per_second': 8.806, 'eval_steps_per_second': 8.806, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4047, 'learning_rate': 0.0015, 'epoch': 13.0}\n", - "{'eval_loss': 1.5603874921798706, 'eval_runtime': 0.1162, 'eval_samples_per_second': 8.606, 'eval_steps_per_second': 8.606, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3885, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n", - "{'eval_loss': 1.5612046718597412, 'eval_runtime': 0.1215, 'eval_samples_per_second': 8.233, 'eval_steps_per_second': 8.233, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3593, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n", - "{'eval_loss': 1.563994288444519, 'eval_runtime': 0.1198, 'eval_samples_per_second': 8.345, 'eval_steps_per_second': 8.345, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3593, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n", - "{'eval_loss': 1.5627647638320923, 'eval_runtime': 0.1157, 'eval_samples_per_second': 8.642, 'eval_steps_per_second': 8.642, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3356, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n", - "{'eval_loss': 1.56623375415802, 'eval_runtime': 0.115, 'eval_samples_per_second': 8.692, 'eval_steps_per_second': 8.692, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3358, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n", - "{'eval_loss': 1.5700865983963013, 'eval_runtime': 0.1168, 'eval_samples_per_second': 8.562, 'eval_steps_per_second': 8.562, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3275, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n", - "{'eval_loss': 1.5686964988708496, 'eval_runtime': 0.121, 'eval_samples_per_second': 8.263, 'eval_steps_per_second': 8.263, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3213, 'learning_rate': 0.0, 'epoch': 20.0}\n", - "{'eval_loss': 1.5683350563049316, 'eval_runtime': 0.1183, 'eval_samples_per_second': 8.454, 'eval_steps_per_second': 8.454, 'epoch': 20.0}\n", - "{'train_runtime': 7.1227, 'train_samples_per_second': 16.848, 'train_steps_per_second': 2.808, 'train_loss': 0.4818130642175674, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 9.06it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 8.68it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 8.65it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 8.32it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "fake ai hoax paper\n", - "{'before': 4.80548095703125, 'after': 4.726459980010986}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 1.81it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.67it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.5402, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 2.809673309326172, 'eval_runtime': 2.0827, 'eval_samples_per_second': 2.401, 'eval_steps_per_second': 0.48, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.5308, 'learning_rate': 0.001, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8012375831604004, 'eval_runtime': 2.0794, 'eval_samples_per_second': 2.405, 'eval_steps_per_second': 0.481, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.5213, 'learning_rate': 0.0015, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.793071746826172, 'eval_runtime': 2.0843, 'eval_samples_per_second': 2.399, 'eval_steps_per_second': 0.48, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.4749, 'learning_rate': 0.002, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.780738115310669, 'eval_runtime': 2.0827, 'eval_samples_per_second': 2.401, 'eval_steps_per_second': 0.48, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.4178, 'learning_rate': 0.0025, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.766921281814575, 'eval_runtime': 2.0817, 'eval_samples_per_second': 2.402, 'eval_steps_per_second': 0.48, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.3676, 'learning_rate': 0.003, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7501397132873535, 'eval_runtime': 2.0899, 'eval_samples_per_second': 2.392, 'eval_steps_per_second': 0.478, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.3403, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7327661514282227, 'eval_runtime': 2.0808, 'eval_samples_per_second': 2.403, 'eval_steps_per_second': 0.481, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.2576, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7207441329956055, 'eval_runtime': 2.082, 'eval_samples_per_second': 2.402, 'eval_steps_per_second': 0.48, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.1886, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.710601329803467, 'eval_runtime': 2.0822, 'eval_samples_per_second': 2.401, 'eval_steps_per_second': 0.48, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.1303, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7007527351379395, 'eval_runtime': 2.0791, 'eval_samples_per_second': 2.405, 'eval_steps_per_second': 0.481, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.0843, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.6963632106781006, 'eval_runtime': 2.0762, 'eval_samples_per_second': 2.408, 'eval_steps_per_second': 0.482, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.0467, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.6910972595214844, 'eval_runtime': 2.0822, 'eval_samples_per_second': 2.401, 'eval_steps_per_second': 0.48, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 3.0034, 'learning_rate': 0.0015, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.68571400642395, 'eval_runtime': 2.0816, 'eval_samples_per_second': 2.402, 'eval_steps_per_second': 0.48, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.9834, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.679442882537842, 'eval_runtime': 2.078, 'eval_samples_per_second': 2.406, 'eval_steps_per_second': 0.481, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.9388, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.6775050163269043, 'eval_runtime': 2.0768, 'eval_samples_per_second': 2.408, 'eval_steps_per_second': 0.482, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.9131, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.674304723739624, 'eval_runtime': 2.0773, 'eval_samples_per_second': 2.407, 'eval_steps_per_second': 0.481, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.8694, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.671732187271118, 'eval_runtime': 2.0847, 'eval_samples_per_second': 2.398, 'eval_steps_per_second': 0.48, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.8736, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.669948101043701, 'eval_runtime': 2.08, 'eval_samples_per_second': 2.404, 'eval_steps_per_second': 0.481, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.8722, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.666889190673828, 'eval_runtime': 2.0779, 'eval_samples_per_second': 2.406, 'eval_steps_per_second': 0.481, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.8454, 'learning_rate': 0.0, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.66707444190979, 'eval_runtime': 2.0769, 'eval_samples_per_second': 2.407, 'eval_steps_per_second': 0.481, 'epoch': 20.0}\n", - "{'train_runtime': 259.3997, 'train_samples_per_second': 0.463, 'train_steps_per_second': 0.077, 'train_loss': 3.159981667995453, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 1.63it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.52it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.82it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.70it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "buzzfeed foi fauci emails 2023\n", - "{'before': 10.51438045501709, 'after': 9.99929428100586}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 7.40it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 7.10it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.9061, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 2.910276412963867, 'eval_runtime': 1.8532, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.9003, 'learning_rate': 0.001, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.909058094024658, 'eval_runtime': 1.8535, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8842, 'learning_rate': 0.0015, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.9053797721862793, 'eval_runtime': 1.8533, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8764, 'learning_rate': 0.002, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.9014058113098145, 'eval_runtime': 1.8536, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.862, 'learning_rate': 0.0025, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8948469161987305, 'eval_runtime': 1.8534, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8228, 'learning_rate': 0.003, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.887235641479492, 'eval_runtime': 1.8555, 'eval_samples_per_second': 1.078, 'eval_steps_per_second': 0.539, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7955, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8758654594421387, 'eval_runtime': 1.8535, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7576, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8753256797790527, 'eval_runtime': 1.8542, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7267, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.870819091796875, 'eval_runtime': 1.8534, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6908, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.870246410369873, 'eval_runtime': 1.8534, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6676, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8703277111053467, 'eval_runtime': 1.8526, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6501, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8726062774658203, 'eval_runtime': 1.8534, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6339, 'learning_rate': 0.0015, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8750758171081543, 'eval_runtime': 1.8537, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6107, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8758249282836914, 'eval_runtime': 1.8562, 'eval_samples_per_second': 1.077, 'eval_steps_per_second': 0.539, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5975, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8766515254974365, 'eval_runtime': 1.8541, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5896, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.877887487411499, 'eval_runtime': 1.8541, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.571, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.876659393310547, 'eval_runtime': 1.8533, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5655, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8768811225891113, 'eval_runtime': 1.8542, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5524, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.87695050239563, 'eval_runtime': 1.8539, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5572, 'learning_rate': 0.0, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.876206874847412, 'eval_runtime': 1.8537, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 20.0}\n", - "{'train_runtime': 110.3229, 'train_samples_per_second': 1.088, 'train_steps_per_second': 0.181, 'train_loss': 0.7109108477830887, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 7.95it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 7.49it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 7.56it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 7.06it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "harvard announcment caplain israel hamas\n", - "{'before': 13.605052947998047, 'after': 13.449620246887207}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 6.21it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 5.80it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8841, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 3.1093873977661133, 'eval_runtime': 1.8536, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8939, 'learning_rate': 0.001, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.104572296142578, 'eval_runtime': 1.8534, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8791, 'learning_rate': 0.0015, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.0975534915924072, 'eval_runtime': 1.8524, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8663, 'learning_rate': 0.002, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.0872480869293213, 'eval_runtime': 1.8573, 'eval_samples_per_second': 1.077, 'eval_steps_per_second': 0.538, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8426, 'learning_rate': 0.0025, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.0743579864501953, 'eval_runtime': 1.8525, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8186, 'learning_rate': 0.003, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.063880443572998, 'eval_runtime': 1.8535, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7962, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.0475571155548096, 'eval_runtime': 1.8536, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7619, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.037322998046875, 'eval_runtime': 1.8535, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.74, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.034162998199463, 'eval_runtime': 1.8527, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.711, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.0277624130249023, 'eval_runtime': 1.8538, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6913, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.020629405975342, 'eval_runtime': 1.8521, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6801, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.0162758827209473, 'eval_runtime': 1.8535, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6573, 'learning_rate': 0.0015, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.0166947841644287, 'eval_runtime': 1.8533, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6473, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.0144472122192383, 'eval_runtime': 1.8527, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6272, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.011507987976074, 'eval_runtime': 1.8537, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6199, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.0144472122192383, 'eval_runtime': 1.8535, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6017, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.0084285736083984, 'eval_runtime': 1.8543, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.010361909866333, 'eval_runtime': 1.8534, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5948, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.010336399078369, 'eval_runtime': 1.8531, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5982, 'learning_rate': 0.0, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 3.010620594024658, 'eval_runtime': 1.8529, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 20.0}\n", - "{'train_runtime': 110.3262, 'train_samples_per_second': 1.088, 'train_steps_per_second': 0.181, 'train_loss': 0.7255841135978699, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 6.27it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 5.83it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 6.20it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 5.83it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "How to Catch an AI Liar\n", - "{'before': 16.3325138092041, 'after': 14.918395042419434}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 2.13it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.93it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.8802, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 2.833146572113037, 'eval_runtime': 2.0767, 'eval_samples_per_second': 2.408, 'eval_steps_per_second': 0.482, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.8728, 'learning_rate': 0.001, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8278772830963135, 'eval_runtime': 2.0736, 'eval_samples_per_second': 2.411, 'eval_steps_per_second': 0.482, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.8376, 'learning_rate': 0.0015, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.825390338897705, 'eval_runtime': 2.0795, 'eval_samples_per_second': 2.404, 'eval_steps_per_second': 0.481, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.794, 'learning_rate': 0.002, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.820244789123535, 'eval_runtime': 2.0693, 'eval_samples_per_second': 2.416, 'eval_steps_per_second': 0.483, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.7608, 'learning_rate': 0.0025, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8097968101501465, 'eval_runtime': 2.0771, 'eval_samples_per_second': 2.407, 'eval_steps_per_second': 0.481, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.7132, 'learning_rate': 0.003, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.8014912605285645, 'eval_runtime': 2.0829, 'eval_samples_per_second': 2.401, 'eval_steps_per_second': 0.48, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.6567, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7906250953674316, 'eval_runtime': 2.0739, 'eval_samples_per_second': 2.411, 'eval_steps_per_second': 0.482, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.5723, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.783757448196411, 'eval_runtime': 2.0703, 'eval_samples_per_second': 2.415, 'eval_steps_per_second': 0.483, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.5173, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.777430534362793, 'eval_runtime': 2.0765, 'eval_samples_per_second': 2.408, 'eval_steps_per_second': 0.482, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.4365, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7713847160339355, 'eval_runtime': 2.0767, 'eval_samples_per_second': 2.408, 'eval_steps_per_second': 0.482, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.3887, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.766700267791748, 'eval_runtime': 2.0778, 'eval_samples_per_second': 2.406, 'eval_steps_per_second': 0.481, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.3458, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7613189220428467, 'eval_runtime': 2.0831, 'eval_samples_per_second': 2.4, 'eval_steps_per_second': 0.48, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.3, 'learning_rate': 0.0015, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7597270011901855, 'eval_runtime': 2.076, 'eval_samples_per_second': 2.408, 'eval_steps_per_second': 0.482, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.2704, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7557966709136963, 'eval_runtime': 2.0747, 'eval_samples_per_second': 2.41, 'eval_steps_per_second': 0.482, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.2442, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.753859281539917, 'eval_runtime': 2.0795, 'eval_samples_per_second': 2.404, 'eval_steps_per_second': 0.481, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.224, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7497611045837402, 'eval_runtime': 2.0726, 'eval_samples_per_second': 2.412, 'eval_steps_per_second': 0.482, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.2045, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7502355575561523, 'eval_runtime': 2.0706, 'eval_samples_per_second': 2.415, 'eval_steps_per_second': 0.483, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.1911, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7499685287475586, 'eval_runtime': 2.0766, 'eval_samples_per_second': 2.408, 'eval_steps_per_second': 0.482, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.1837, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.7477238178253174, 'eval_runtime': 2.0822, 'eval_samples_per_second': 2.401, 'eval_steps_per_second': 0.48, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.1603, 'learning_rate': 0.0, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.747436046600342, 'eval_runtime': 2.0767, 'eval_samples_per_second': 2.408, 'eval_steps_per_second': 0.482, 'epoch': 20.0}\n", - "{'train_runtime': 258.9654, 'train_samples_per_second': 0.463, 'train_steps_per_second': 0.077, 'train_loss': 2.4776997566223145, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 1.77it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.65it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 2.09it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.93it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "LK-99-en\n", - "{'before': 11.107545852661133, 'after': 10.768901824951172}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 1.30it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.25it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.7373, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 2.228729486465454, 'eval_runtime': 2.2305, 'eval_samples_per_second': 3.138, 'eval_steps_per_second': 0.448, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.7398, 'learning_rate': 0.001, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.2262868881225586, 'eval_runtime': 2.2271, 'eval_samples_per_second': 3.143, 'eval_steps_per_second': 0.449, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.7249, 'learning_rate': 0.0015, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.222583770751953, 'eval_runtime': 2.2304, 'eval_samples_per_second': 3.138, 'eval_steps_per_second': 0.448, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.6954, 'learning_rate': 0.002, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.2177114486694336, 'eval_runtime': 2.2267, 'eval_samples_per_second': 3.144, 'eval_steps_per_second': 0.449, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.6487, 'learning_rate': 0.0025, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.2114782333374023, 'eval_runtime': 2.2257, 'eval_samples_per_second': 3.145, 'eval_steps_per_second': 0.449, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.6021, 'learning_rate': 0.003, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.204953908920288, 'eval_runtime': 2.2293, 'eval_samples_per_second': 3.14, 'eval_steps_per_second': 0.449, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.5475, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.1997663974761963, 'eval_runtime': 2.2249, 'eval_samples_per_second': 3.146, 'eval_steps_per_second': 0.449, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.4861, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.195139169692993, 'eval_runtime': 2.22, 'eval_samples_per_second': 3.153, 'eval_steps_per_second': 0.45, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.4401, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.1921756267547607, 'eval_runtime': 2.2232, 'eval_samples_per_second': 3.149, 'eval_steps_per_second': 0.45, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.3875, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.1900081634521484, 'eval_runtime': 2.2297, 'eval_samples_per_second': 3.139, 'eval_steps_per_second': 0.448, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.3437, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.1875574588775635, 'eval_runtime': 2.2283, 'eval_samples_per_second': 3.141, 'eval_steps_per_second': 0.449, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.3149, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.18703556060791, 'eval_runtime': 2.222, 'eval_samples_per_second': 3.15, 'eval_steps_per_second': 0.45, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.2851, 'learning_rate': 0.0015, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.1857080459594727, 'eval_runtime': 2.2255, 'eval_samples_per_second': 3.145, 'eval_steps_per_second': 0.449, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.2384, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.18491530418396, 'eval_runtime': 2.2245, 'eval_samples_per_second': 3.147, 'eval_steps_per_second': 0.45, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.203, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.185029983520508, 'eval_runtime': 2.2226, 'eval_samples_per_second': 3.15, 'eval_steps_per_second': 0.45, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.1913, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.1852521896362305, 'eval_runtime': 2.2277, 'eval_samples_per_second': 3.142, 'eval_steps_per_second': 0.449, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.1674, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.183973550796509, 'eval_runtime': 2.2342, 'eval_samples_per_second': 3.133, 'eval_steps_per_second': 0.448, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.1656, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.183441162109375, 'eval_runtime': 2.237, 'eval_samples_per_second': 3.129, 'eval_steps_per_second': 0.447, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.1495, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.1836740970611572, 'eval_runtime': 2.2396, 'eval_samples_per_second': 3.126, 'eval_steps_per_second': 0.447, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.1465, 'learning_rate': 0.0, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.1844637393951416, 'eval_runtime': 2.2386, 'eval_samples_per_second': 3.127, 'eval_steps_per_second': 0.447, 'epoch': 20.0}\n", - "{'train_runtime': 262.2762, 'train_samples_per_second': 0.458, 'train_steps_per_second': 0.076, 'train_loss': 2.4107391834259033, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 1.43it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.35it/s]\n", - "100%|██████████| 1/1 [00:01<00:00, 1.13s/it]\n", - "100%|██████████| 1/1 [00:00<00:00, 1.23it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "LK-99-es\n", - "{'before': 5.7730841636657715, 'after': 5.697879791259766}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:01<00:00, 1.32s/it]\n", - "100%|██████████| 1/1 [00:01<00:00, 1.38s/it]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 1.8969, 'learning_rate': 0.0005, 'epoch': 0.6}\n", - "{'eval_loss': 1.9049897193908691, 'eval_runtime': 2.3846, 'eval_samples_per_second': 3.774, 'eval_steps_per_second': 0.419, 'epoch': 0.6}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 1.9223, 'learning_rate': 0.001, 'epoch': 1.2}\n", - "{'loss': 1.8572, 'learning_rate': 0.0015, 'epoch': 1.8}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 1.8747698068618774, 'eval_runtime': 2.3868, 'eval_samples_per_second': 3.771, 'eval_steps_per_second': 0.419, 'epoch': 1.8}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 1.8607, 'learning_rate': 0.002, 'epoch': 2.4}\n", - "{'loss': 1.8919, 'learning_rate': 0.0025, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 1.853322982788086, 'eval_runtime': 2.3845, 'eval_samples_per_second': 3.774, 'eval_steps_per_second': 0.419, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 1.898, 'learning_rate': 0.003, 'epoch': 3.6}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 1.8494622707366943, 'eval_runtime': 2.3821, 'eval_samples_per_second': 3.778, 'eval_steps_per_second': 0.42, 'epoch': 3.6}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 1.7994, 'learning_rate': 0.002785714285714286, 'epoch': 4.2}\n", - "{'loss': 1.8124, 'learning_rate': 0.0025714285714285713, 'epoch': 4.8}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 1.8535112142562866, 'eval_runtime': 2.392, 'eval_samples_per_second': 3.763, 'eval_steps_per_second': 0.418, 'epoch': 4.8}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 1.7804, 'learning_rate': 0.002357142857142857, 'epoch': 5.4}\n", - "{'loss': 1.8613, 'learning_rate': 0.002142857142857143, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 1.8590210676193237, 'eval_runtime': 2.3883, 'eval_samples_per_second': 3.768, 'eval_steps_per_second': 0.419, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 1.7872, 'learning_rate': 0.0019285714285714288, 'epoch': 6.6}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 1.8612093925476074, 'eval_runtime': 2.39, 'eval_samples_per_second': 3.766, 'eval_steps_per_second': 0.418, 'epoch': 6.6}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 1.808, 'learning_rate': 0.0017142857142857142, 'epoch': 7.2}\n", - "{'loss': 1.7778, 'learning_rate': 0.0015, 'epoch': 7.8}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 1.859637975692749, 'eval_runtime': 2.3866, 'eval_samples_per_second': 3.771, 'eval_steps_per_second': 0.419, 'epoch': 7.8}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 1.7654, 'learning_rate': 0.0012857142857142856, 'epoch': 8.4}\n", - "{'loss': 1.8022, 'learning_rate': 0.0010714285714285715, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 1.8593199253082275, 'eval_runtime': 2.3861, 'eval_samples_per_second': 3.772, 'eval_steps_per_second': 0.419, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 1.8045, 'learning_rate': 0.0008571428571428571, 'epoch': 9.6}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 1.8577730655670166, 'eval_runtime': 2.3904, 'eval_samples_per_second': 3.765, 'eval_steps_per_second': 0.418, 'epoch': 9.6}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 1.7131, 'learning_rate': 0.0006428571428571428, 'epoch': 10.2}\n", - "{'loss': 1.7295, 'learning_rate': 0.00042857142857142855, 'epoch': 10.8}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 1.856925129890442, 'eval_runtime': 2.3844, 'eval_samples_per_second': 3.775, 'eval_steps_per_second': 0.419, 'epoch': 10.8}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 1.7873, 'learning_rate': 0.00021428571428571427, 'epoch': 11.4}\n", - "{'loss': 1.7303, 'learning_rate': 0.0, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 1.8559074401855469, 'eval_runtime': 2.3841, 'eval_samples_per_second': 3.775, 'eval_steps_per_second': 0.419, 'epoch': 12.0}\n", - "{'train_runtime': 204.9699, 'train_samples_per_second': 0.585, 'train_steps_per_second': 0.098, 'train_loss': 1.8142928600311279, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:01<00:00, 1.63s/it]\n", - "100%|██████████| 1/1 [00:01<00:00, 1.36s/it]\n", - "100%|██████████| 1/1 [00:01<00:00, 1.33s/it]\n", - "100%|██████████| 1/1 [00:01<00:00, 1.38s/it]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Lorem ipsum\n", - "{'before': 22.06707000732422, 'after': 20.045455932617188}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 8.79it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 8.54it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.739, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 2.192563056945801, 'eval_runtime': 0.1147, 'eval_samples_per_second': 8.716, 'eval_steps_per_second': 8.716, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7446, 'learning_rate': 0.001, 'epoch': 2.0}\n", - "{'eval_loss': 2.1906583309173584, 'eval_runtime': 0.1101, 'eval_samples_per_second': 9.085, 'eval_steps_per_second': 9.085, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7294, 'learning_rate': 0.0015, 'epoch': 3.0}\n", - "{'eval_loss': 2.1856143474578857, 'eval_runtime': 0.1111, 'eval_samples_per_second': 9.002, 'eval_steps_per_second': 9.002, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7127, 'learning_rate': 0.002, 'epoch': 4.0}\n", - "{'eval_loss': 2.177340030670166, 'eval_runtime': 0.11, 'eval_samples_per_second': 9.09, 'eval_steps_per_second': 9.09, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6902, 'learning_rate': 0.0025, 'epoch': 5.0}\n", - "{'eval_loss': 2.17113995552063, 'eval_runtime': 0.1102, 'eval_samples_per_second': 9.071, 'eval_steps_per_second': 9.071, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6677, 'learning_rate': 0.003, 'epoch': 6.0}\n", - "{'eval_loss': 2.1561458110809326, 'eval_runtime': 0.1117, 'eval_samples_per_second': 8.951, 'eval_steps_per_second': 8.951, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6302, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n", - "{'eval_loss': 2.1426870822906494, 'eval_runtime': 0.1101, 'eval_samples_per_second': 9.08, 'eval_steps_per_second': 9.08, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5977, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n", - "{'eval_loss': 2.1372711658477783, 'eval_runtime': 0.1121, 'eval_samples_per_second': 8.918, 'eval_steps_per_second': 8.918, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5654, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n", - "{'eval_loss': 2.128983736038208, 'eval_runtime': 0.1143, 'eval_samples_per_second': 8.746, 'eval_steps_per_second': 8.746, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5339, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n", - "{'eval_loss': 2.12965989112854, 'eval_runtime': 0.1129, 'eval_samples_per_second': 8.86, 'eval_steps_per_second': 8.86, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.512, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n", - "{'eval_loss': 2.1252620220184326, 'eval_runtime': 0.1158, 'eval_samples_per_second': 8.634, 'eval_steps_per_second': 8.634, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4899, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n", - "{'eval_loss': 2.128906726837158, 'eval_runtime': 0.1141, 'eval_samples_per_second': 8.765, 'eval_steps_per_second': 8.765, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4773, 'learning_rate': 0.0015, 'epoch': 13.0}\n", - "{'eval_loss': 2.1320488452911377, 'eval_runtime': 0.1163, 'eval_samples_per_second': 8.601, 'eval_steps_per_second': 8.601, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4489, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n", - "{'eval_loss': 2.1474263668060303, 'eval_runtime': 0.1205, 'eval_samples_per_second': 8.298, 'eval_steps_per_second': 8.298, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4387, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n", - "{'eval_loss': 2.165801763534546, 'eval_runtime': 0.1172, 'eval_samples_per_second': 8.53, 'eval_steps_per_second': 8.53, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4267, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n", - "{'eval_loss': 2.1691884994506836, 'eval_runtime': 0.1147, 'eval_samples_per_second': 8.716, 'eval_steps_per_second': 8.716, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4252, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n", - "{'eval_loss': 2.167924404144287, 'eval_runtime': 0.1123, 'eval_samples_per_second': 8.904, 'eval_steps_per_second': 8.904, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.414, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n", - "{'eval_loss': 2.1624655723571777, 'eval_runtime': 0.1137, 'eval_samples_per_second': 8.797, 'eval_steps_per_second': 8.797, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4125, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n", - "{'eval_loss': 2.1613035202026367, 'eval_runtime': 0.1109, 'eval_samples_per_second': 9.015, 'eval_steps_per_second': 9.015, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4013, 'learning_rate': 0.0, 'epoch': 20.0}\n", - "{'eval_loss': 2.1570820808410645, 'eval_runtime': 0.1122, 'eval_samples_per_second': 8.911, 'eval_steps_per_second': 8.911, 'epoch': 20.0}\n", - "{'train_runtime': 6.7751, 'train_samples_per_second': 17.712, 'train_steps_per_second': 2.952, 'train_loss': 0.5528773069381714, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 8.08it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 8.20it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 9.16it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 8.45it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "openai board ann\n", - "{'before': 8.956920623779297, 'after': 8.37397575378418}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 6.09it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 5.75it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.9313, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 2.6193394660949707, 'eval_runtime': 1.8534, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.9413, 'learning_rate': 0.001, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.61201548576355, 'eval_runtime': 1.8549, 'eval_samples_per_second': 1.078, 'eval_steps_per_second': 0.539, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.9291, 'learning_rate': 0.0015, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.6054701805114746, 'eval_runtime': 1.852, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.9194, 'learning_rate': 0.002, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.5986037254333496, 'eval_runtime': 1.8518, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8908, 'learning_rate': 0.0025, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.5816807746887207, 'eval_runtime': 1.8524, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8677, 'learning_rate': 0.003, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.567370891571045, 'eval_runtime': 1.8528, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8356, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.5506303310394287, 'eval_runtime': 1.8548, 'eval_samples_per_second': 1.078, 'eval_steps_per_second': 0.539, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7977, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.536162853240967, 'eval_runtime': 1.8526, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.769, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.5300021171569824, 'eval_runtime': 1.8525, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7549, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.5192646980285645, 'eval_runtime': 1.8525, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.725, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.515676975250244, 'eval_runtime': 1.8525, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7028, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.5090456008911133, 'eval_runtime': 1.8521, 'eval_samples_per_second': 1.08, 'eval_steps_per_second': 0.54, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6862, 'learning_rate': 0.0015, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.50835919380188, 'eval_runtime': 1.856, 'eval_samples_per_second': 1.078, 'eval_steps_per_second': 0.539, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6639, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.5053606033325195, 'eval_runtime': 1.8531, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6626, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.5055928230285645, 'eval_runtime': 1.8536, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6442, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.5038294792175293, 'eval_runtime': 1.8577, 'eval_samples_per_second': 1.077, 'eval_steps_per_second': 0.538, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6277, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.504798412322998, 'eval_runtime': 1.8528, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6271, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.504643440246582, 'eval_runtime': 1.8538, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.619, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.504636764526367, 'eval_runtime': 1.8539, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.539, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6131, 'learning_rate': 0.0, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.505075693130493, 'eval_runtime': 1.8527, 'eval_samples_per_second': 1.079, 'eval_steps_per_second': 0.54, 'epoch': 20.0}\n", - "{'train_runtime': 110.2698, 'train_samples_per_second': 1.088, 'train_steps_per_second': 0.181, 'train_loss': 0.7604219943284989, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 6.39it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 6.06it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 6.29it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 5.70it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "weak to strong\n", - "{'before': 12.332788467407227, 'after': 11.297444343566895}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 8.70it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 8.29it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.9295, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 2.664646863937378, 'eval_runtime': 0.1165, 'eval_samples_per_second': 8.585, 'eval_steps_per_second': 8.585, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.9267, 'learning_rate': 0.001, 'epoch': 2.0}\n", - "{'eval_loss': 2.661813497543335, 'eval_runtime': 0.1187, 'eval_samples_per_second': 8.423, 'eval_steps_per_second': 8.423, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.9128, 'learning_rate': 0.0015, 'epoch': 3.0}\n", - "{'eval_loss': 2.661179780960083, 'eval_runtime': 0.1233, 'eval_samples_per_second': 8.108, 'eval_steps_per_second': 8.108, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.9042, 'learning_rate': 0.002, 'epoch': 4.0}\n", - "{'eval_loss': 2.6573486328125, 'eval_runtime': 0.1245, 'eval_samples_per_second': 8.032, 'eval_steps_per_second': 8.032, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8772, 'learning_rate': 0.0025, 'epoch': 5.0}\n", - "{'eval_loss': 2.6507937908172607, 'eval_runtime': 0.1191, 'eval_samples_per_second': 8.398, 'eval_steps_per_second': 8.398, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8556, 'learning_rate': 0.003, 'epoch': 6.0}\n", - "{'eval_loss': 2.641019821166992, 'eval_runtime': 0.1232, 'eval_samples_per_second': 8.118, 'eval_steps_per_second': 8.118, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.8158, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n", - "{'eval_loss': 2.6362545490264893, 'eval_runtime': 0.1227, 'eval_samples_per_second': 8.149, 'eval_steps_per_second': 8.149, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7806, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n", - "{'eval_loss': 2.630005121231079, 'eval_runtime': 0.1245, 'eval_samples_per_second': 8.03, 'eval_steps_per_second': 8.03, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7479, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n", - "{'eval_loss': 2.62709379196167, 'eval_runtime': 0.1191, 'eval_samples_per_second': 8.394, 'eval_steps_per_second': 8.394, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.722, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n", - "{'eval_loss': 2.6279067993164062, 'eval_runtime': 0.1205, 'eval_samples_per_second': 8.298, 'eval_steps_per_second': 8.298, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6877, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n", - "{'eval_loss': 2.630316972732544, 'eval_runtime': 0.1208, 'eval_samples_per_second': 8.275, 'eval_steps_per_second': 8.275, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6684, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n", - "{'eval_loss': 2.6283013820648193, 'eval_runtime': 0.1212, 'eval_samples_per_second': 8.253, 'eval_steps_per_second': 8.253, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6407, 'learning_rate': 0.0015, 'epoch': 13.0}\n", - "{'eval_loss': 2.6314098834991455, 'eval_runtime': 0.1254, 'eval_samples_per_second': 7.977, 'eval_steps_per_second': 7.977, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6234, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n", - "{'eval_loss': 2.6316142082214355, 'eval_runtime': 0.1221, 'eval_samples_per_second': 8.188, 'eval_steps_per_second': 8.188, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6135, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n", - "{'eval_loss': 2.63637113571167, 'eval_runtime': 0.1197, 'eval_samples_per_second': 8.354, 'eval_steps_per_second': 8.354, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6116, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n", - "{'eval_loss': 2.6356468200683594, 'eval_runtime': 0.1229, 'eval_samples_per_second': 8.137, 'eval_steps_per_second': 8.137, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5905, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n", - "{'eval_loss': 2.635625123977661, 'eval_runtime': 0.1256, 'eval_samples_per_second': 7.964, 'eval_steps_per_second': 7.964, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5791, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n", - "{'eval_loss': 2.634904384613037, 'eval_runtime': 0.1181, 'eval_samples_per_second': 8.466, 'eval_steps_per_second': 8.466, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5739, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n", - "{'eval_loss': 2.632082223892212, 'eval_runtime': 0.1186, 'eval_samples_per_second': 8.435, 'eval_steps_per_second': 8.435, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.584, 'learning_rate': 0.0, 'epoch': 20.0}\n", - "{'eval_loss': 2.6331398487091064, 'eval_runtime': 0.1244, 'eval_samples_per_second': 8.037, 'eval_steps_per_second': 8.037, 'epoch': 20.0}\n", - "{'train_runtime': 7.2399, 'train_samples_per_second': 16.575, 'train_steps_per_second': 2.762, 'train_loss': 0.7322499215602875, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 8.96it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 8.48it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 8.41it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 8.29it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "politics is the mind-killer\n", - "{'before': 14.360716819763184, 'after': 13.831387519836426}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 12.06it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 11.40it/s]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.687, 'learning_rate': 0.0005, 'epoch': 1.0}\n", - "{'eval_loss': 2.136593818664551, 'eval_runtime': 0.0726, 'eval_samples_per_second': 13.769, 'eval_steps_per_second': 13.769, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.7077, 'learning_rate': 0.001, 'epoch': 2.0}\n", - "{'eval_loss': 2.1345417499542236, 'eval_runtime': 0.0712, 'eval_samples_per_second': 14.048, 'eval_steps_per_second': 14.048, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6968, 'learning_rate': 0.0015, 'epoch': 3.0}\n", - "{'eval_loss': 2.12933611869812, 'eval_runtime': 0.0707, 'eval_samples_per_second': 14.144, 'eval_steps_per_second': 14.144, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6559, 'learning_rate': 0.002, 'epoch': 4.0}\n", - "{'eval_loss': 2.1261966228485107, 'eval_runtime': 0.0713, 'eval_samples_per_second': 14.016, 'eval_steps_per_second': 14.016, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6496, 'learning_rate': 0.0025, 'epoch': 5.0}\n", - "{'eval_loss': 2.1181368827819824, 'eval_runtime': 0.0714, 'eval_samples_per_second': 14.004, 'eval_steps_per_second': 14.004, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.6145, 'learning_rate': 0.003, 'epoch': 6.0}\n", - "{'eval_loss': 2.112712860107422, 'eval_runtime': 0.0766, 'eval_samples_per_second': 13.053, 'eval_steps_per_second': 13.053, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5715, 'learning_rate': 0.002785714285714286, 'epoch': 7.0}\n", - "{'eval_loss': 2.113090991973877, 'eval_runtime': 0.074, 'eval_samples_per_second': 13.516, 'eval_steps_per_second': 13.516, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.532, 'learning_rate': 0.0025714285714285713, 'epoch': 8.0}\n", - "{'eval_loss': 2.103705883026123, 'eval_runtime': 0.0753, 'eval_samples_per_second': 13.288, 'eval_steps_per_second': 13.288, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.5023, 'learning_rate': 0.002357142857142857, 'epoch': 9.0}\n", - "{'eval_loss': 2.097980499267578, 'eval_runtime': 0.0751, 'eval_samples_per_second': 13.322, 'eval_steps_per_second': 13.322, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4606, 'learning_rate': 0.002142857142857143, 'epoch': 10.0}\n", - "{'eval_loss': 2.0984387397766113, 'eval_runtime': 0.076, 'eval_samples_per_second': 13.156, 'eval_steps_per_second': 13.156, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4273, 'learning_rate': 0.0019285714285714288, 'epoch': 11.0}\n", - "{'eval_loss': 2.0968174934387207, 'eval_runtime': 0.0763, 'eval_samples_per_second': 13.105, 'eval_steps_per_second': 13.105, 'epoch': 11.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.4026, 'learning_rate': 0.0017142857142857142, 'epoch': 12.0}\n", - "{'eval_loss': 2.0966172218322754, 'eval_runtime': 0.0758, 'eval_samples_per_second': 13.2, 'eval_steps_per_second': 13.2, 'epoch': 12.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3722, 'learning_rate': 0.0015, 'epoch': 13.0}\n", - "{'eval_loss': 2.0936007499694824, 'eval_runtime': 0.0791, 'eval_samples_per_second': 12.644, 'eval_steps_per_second': 12.644, 'epoch': 13.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3466, 'learning_rate': 0.0012857142857142856, 'epoch': 14.0}\n", - "{'eval_loss': 2.0903382301330566, 'eval_runtime': 0.0717, 'eval_samples_per_second': 13.945, 'eval_steps_per_second': 13.945, 'epoch': 14.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3495, 'learning_rate': 0.0010714285714285715, 'epoch': 15.0}\n", - "{'eval_loss': 2.08988356590271, 'eval_runtime': 0.0735, 'eval_samples_per_second': 13.604, 'eval_steps_per_second': 13.604, 'epoch': 15.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3472, 'learning_rate': 0.0008571428571428571, 'epoch': 16.0}\n", - "{'eval_loss': 2.0955498218536377, 'eval_runtime': 0.0738, 'eval_samples_per_second': 13.545, 'eval_steps_per_second': 13.545, 'epoch': 16.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3289, 'learning_rate': 0.0006428571428571428, 'epoch': 17.0}\n", - "{'eval_loss': 2.0921590328216553, 'eval_runtime': 0.076, 'eval_samples_per_second': 13.161, 'eval_steps_per_second': 13.161, 'epoch': 17.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3511, 'learning_rate': 0.00042857142857142855, 'epoch': 18.0}\n", - "{'eval_loss': 2.0880017280578613, 'eval_runtime': 0.0745, 'eval_samples_per_second': 13.431, 'eval_steps_per_second': 13.431, 'epoch': 18.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3202, 'learning_rate': 0.00021428571428571427, 'epoch': 19.0}\n", - "{'eval_loss': 2.093221664428711, 'eval_runtime': 0.0755, 'eval_samples_per_second': 13.25, 'eval_steps_per_second': 13.25, 'epoch': 19.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 0.3589, 'learning_rate': 0.0, 'epoch': 20.0}\n", - "{'eval_loss': 2.0902578830718994, 'eval_runtime': 0.0748, 'eval_samples_per_second': 13.365, 'eval_steps_per_second': 13.365, 'epoch': 20.0}\n", - "{'train_runtime': 4.6136, 'train_samples_per_second': 26.01, 'train_steps_per_second': 4.335, 'train_loss': 0.4841234013438225, 'epoch': 20.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:00<00:00, 11.96it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 11.55it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 11.71it/s]\n", - "100%|██████████| 1/1 [00:00<00:00, 11.12it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "statement by whitehouse on passing\n", - "{'before': 8.469395637512207, 'after': 8.067770957946777}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:01<00:00, 1.59s/it]\n", - "100%|██████████| 1/1 [00:01<00:00, 1.66s/it]\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n", - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.6204, 'learning_rate': 0.0005, 'epoch': 0.5}\n", - "{'loss': 2.6533, 'learning_rate': 0.001, 'epoch': 1.0}\n", - "{'eval_loss': 2.53926420211792, 'eval_runtime': 2.6208, 'eval_samples_per_second': 3.816, 'eval_steps_per_second': 0.382, 'epoch': 1.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.5763, 'learning_rate': 0.0015, 'epoch': 1.5}\n", - "{'loss': 2.5374, 'learning_rate': 0.002, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.5270609855651855, 'eval_runtime': 2.5231, 'eval_samples_per_second': 3.963, 'eval_steps_per_second': 0.396, 'epoch': 2.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.4783, 'learning_rate': 0.0025, 'epoch': 2.5}\n", - "{'loss': 2.5624, 'learning_rate': 0.003, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.505995273590088, 'eval_runtime': 2.5263, 'eval_samples_per_second': 3.958, 'eval_steps_per_second': 0.396, 'epoch': 3.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.4259, 'learning_rate': 0.002785714285714286, 'epoch': 3.5}\n", - "{'loss': 2.5698, 'learning_rate': 0.0025714285714285713, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.4820780754089355, 'eval_runtime': 2.5317, 'eval_samples_per_second': 3.95, 'eval_steps_per_second': 0.395, 'epoch': 4.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.3496, 'learning_rate': 0.002357142857142857, 'epoch': 4.5}\n", - "{'loss': 2.3537, 'learning_rate': 0.002142857142857143, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.4669222831726074, 'eval_runtime': 2.5215, 'eval_samples_per_second': 3.966, 'eval_steps_per_second': 0.397, 'epoch': 5.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.2245, 'learning_rate': 0.0019285714285714288, 'epoch': 5.5}\n", - "{'loss': 2.4998, 'learning_rate': 0.0017142857142857142, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.4587178230285645, 'eval_runtime': 2.5287, 'eval_samples_per_second': 3.955, 'eval_steps_per_second': 0.395, 'epoch': 6.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.3563, 'learning_rate': 0.0015, 'epoch': 6.5}\n", - "{'loss': 2.1709, 'learning_rate': 0.0012857142857142856, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.4529519081115723, 'eval_runtime': 2.5205, 'eval_samples_per_second': 3.967, 'eval_steps_per_second': 0.397, 'epoch': 7.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.1374, 'learning_rate': 0.0010714285714285715, 'epoch': 7.5}\n", - "{'loss': 2.4516, 'learning_rate': 0.0008571428571428571, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.451000690460205, 'eval_runtime': 2.5269, 'eval_samples_per_second': 3.957, 'eval_steps_per_second': 0.396, 'epoch': 8.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.228, 'learning_rate': 0.0006428571428571428, 'epoch': 8.5}\n", - "{'loss': 2.2459, 'learning_rate': 0.00042857142857142855, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.4491171836853027, 'eval_runtime': 2.5376, 'eval_samples_per_second': 3.941, 'eval_steps_per_second': 0.394, 'epoch': 9.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/_functions.py:68: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n", - " warnings.warn('Was asked to gather along dimension 0, but all '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'loss': 2.3212, 'learning_rate': 0.00021428571428571427, 'epoch': 9.5}\n", - "{'loss': 2.118, 'learning_rate': 0.0, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/parallel/data_parallel.py:33: UserWarning: \n", - " There is an imbalance between your GPUs. You may want to exclude GPU 1 which\n", - " has less than 75% of the memory or cores of GPU 0. You can do so by setting\n", - " the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES\n", - " environment variable.\n", - " warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'eval_loss': 2.448469638824463, 'eval_runtime': 2.5332, 'eval_samples_per_second': 3.948, 'eval_steps_per_second': 0.395, 'epoch': 10.0}\n", - "{'train_runtime': 208.2622, 'train_samples_per_second': 0.576, 'train_steps_per_second': 0.096, 'train_loss': 2.394020712375641, 'epoch': 10.0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1/1 [00:02<00:00, 2.13s/it]\n", - "100%|██████████| 1/1 [00:01<00:00, 1.86s/it]\n", - "100%|██████████| 1/1 [00:01<00:00, 1.59s/it]\n", - "100%|██████████| 1/1 [00:01<00:00, 1.67s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Gemini to Q*\n", - "{'before': 50.87833023071289, 'after': 47.31618118286133}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "data = []\n", - "for sample in samples:\n", - " r = learn_sample(sample)\n", - " print(sample['title'])\n", - " print(dict(before=r['before'], after=r['after']))\n", - " data.append(dict(**r, **sample))" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [], - "source": [ - "# sample" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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jnrPrFmzWL58efARi4iIiERYUAmTJI6WlhYefPBBrr32Wv3GF2Eae+9o7L2jsfeOxn5gdJacHJPjOLz++us4juN1KAlHY+8djb13NPbe0dgPjBImERERkX4oYRIRERHphxImOaaUlBSuuOKKuNrhECs09t7R2HtHY+8djf3AqOhbREREpB+aYRIRERHphxImERERkX4oYRIRERHphxImERERkX4EdZacxL/Vq1dTWlpKRUUFqampTJ8+nYULF1JcXOx1aAnn6aef5tFHH+XCCy/kmmuu8TqcuFdbW8v//d//8d5773H48GGKiopYvHgxU6ZM8Tq0uOY4Dk8++SSvvvoq9fX15Ofnc/bZZ/OFL3wBY4zX4cWVDRs28Oyzz7J9+3bq6ur493//d84888zAx621PPnkk/zlL3+hsbGRmTNnsmjRIkaPHu1h1NFDCZP0sGHDBubPn8+UKVPo6OjgscceY8WKFaxcuVIt8yNo69atrFmzhgkTJngdSkJoaGjg5ptv5vjjj+fGG28kJyeHyspKsrKyvA4t7j399NOsWbOGJUuWMHbsWMrKynjggQfIzMzkwgsv9Dq8uHL48GEmTpzIueeey913333Ux5955hmef/55lixZQmFhIU888QR33HEHK1euJDU11YOIo4sSJulh2bJlPR4vWbKERYsWUVZWxqxZszyKKrG0tLRw3333ce211/LUU095HU5CeOaZZxgxYgSLFy8OPFdYWOhhRIlj8+bNnH766Zx66qmAO+6vvfYaW7du9Tiy+HPKKadwyimnHPNj1lqee+45Pv/5z3PGGWcA8I1vfIOvfe1rvPXWW8yZMyeSoUYl1TBJn5qamgDIzs72OJLE8ctf/pJTTjmFE0880etQEsbbb7/N5MmTWblyJYsWLWLp0qW8+OKLXoeVEKZPn84HH3zAnj17ANixYwcfffRRrz/YJTz27dtHfX19j+87mZmZTJ06lc2bN3sYWfTQDJP0ynEcHn74YWbMmMH48eO9DichvP7662zfvp3/+q//8jqUhLJv3z7WrFnDRRddxOWXX862bdv41a9+RXJyMnPnzvU6vLh22WWX0dzczA033IDP58NxHK688ko+9alPeR1aQqmvrwdg+PDhPZ4fPnx44GOJTgmT9KqkpITy8nJuv/12r0NJCDU1NTz88MPcdNNNqheIMMdxmDJlCldffTUAkyZNYteuXaxZs0YJU5j9/e9/57XXXuNb3/oW48aNY8eOHTz88MPk5eVp7CWqKGGSYyopKWHt2rXcdtttjBgxwutwEkJZWRkHDhzge9/7XuA5x3HYuHEjf/rTn3j00Ufx+bSKHg55eXmMHTu2x3Njx47lzTff9CiixPF///d/XHrppYEamfHjx1NdXc3TTz+thCmCcnNzAThw4AB5eXmB5w8cOMDEiRO9CSrKKGGSHqy1PPTQQ5SWlrJ8+XIVvkbQ7Nmzj9q58j//8z8UFxdz6aWXKlkKoxkzZgRqaPz27NlDQUGBRxEljsOHDx/1te3z+dAxp5FVWFhIbm4u69evDyRITU1NbN26lfPPP9/b4KKEEibpoaSkhNdee42lS5eSkZERWLvOzMzUMlGYZWRkHFUrlpaWxrBhw1RDFmYXXXQRN998M0899RSf+MQn2Lp1K3/5y1/4t3/7N69Di3unnXYaTz31FCNHjmTs2LHs2LGDP/zhD5xzzjlehxZ3WlpaqKqqCjzet28fO3bsIDs7m5EjR3LhhRfy1FNPMXr0aAoLC3n88cfJy8sL7JpLdMYqjZduFixYcMznFy9erOlxDyxfvpyJEyeqcWUEvPPOOzz66KNUVVVRWFjIRRddxGc+8xmvw4p7zc3NPPHEE5SWlnLgwAHy8/OZM2cOV1xxBcnJ+p0+lD788ENuu+22o54/++yzWbJkSaBx5YsvvkhTUxMzZ87kq1/9qhoXd1LCJCIiItIPFUWIiIiI9EMJk4iIiEg/lDCJiIiI9EMJk4iIiEg/lDCJiIiI9EMJk4iIiEg/lDCJiIiI9EMJk4iIiEg/lDCJSEx78sknWbBgAQcPHvQ6FBGJY0qYRERERPqhhElERESkH0qYRERERPqho6BFZEBqa2t5/PHHeffdd2lsbKSoqIiLL76Yc889F+g6Cf3b3/42O3bs4OWXX6alpYUTTjiBr371q4wcObLH9f7+97/z9NNPs3v3btLT0znppJNYuHAh+fn5PV5XUVHBE088wYcffkhLSwsjR47krLPO4qqrrurxuqamJn7zm9/w1ltvYa3lYx/7GF/96ldJS0sL78CISEJQwiQi/aqvr2fZsmUAzJ8/n5ycHN577z1+/vOf09zczEUXXRR47VNPPYUxhksvvZSDBw/yxz/+kR/84Af8+Mc/JjU1FYBXXnmFBx54gClTpnD11Vdz4MABnnvuOT766CPuuususrKyANi5cye33HILycnJzJs3j8LCQqqqqnjnnXeOSpjuueceCgoKuPrqqykrK+Oll14iJyeHhQsXRmiURCSeKWESkX49/vjjOI7D3XffzbBhwwA4//zz+clPfsJvf/tbzjvvvMBrGxoauOeee8jIyABg0qRJ3HPPPbz44otceOGFtLe388gjjzBu3Dhuu+22QBI1c+ZMfvSjH/HHP/6RBQsWAPDQQw8BcOedd/aYofrSl750VIwTJ07kuuuu6xHHyy+/rIRJREJCNUwi0idrLW+++SannXYa1loOHjwY+O/kk0+mqamJsrKywOs//elPB5IlgLPOOou8vDzeffddAMrKyjhw4ADz588PJEsAp556KmPGjGHt2rUAHDx4kI0bN3LOOecctZxnjDkqzu5JG7gJ2KFDh2hqahr6IIhIwtMMk4j06eDBgzQ2NvLiiy/y4osv9voa/zLa6NGje3zMGENRURHV1dUAgT+Li4uPuk5xcTGbNm0CYO/evQCMGzduQHEemVRlZ2cD0NjYSGZm5oCuISLSGyVMItInay0An/rUpzj77LOP+ZoJEyawe/fuSIZ1FJ/v2BPm/vhFRIZCCZOI9CknJ4eMjAwcx+HEE0/s9XX+hKmysrLH89ZaqqqqGD9+PAAFBQUA7NmzhxNOOKHHa/fs2RP4+KhRowAoLy8PzSciIjIEqmESkT75fD4+9rGP8eabb7Jr166jPn7kkSR/+9vfaG5uDjz+xz/+QV1dHaeccgoAkydPZvjw4axZs4a2trbA6959910qKio49dRTATdRO+6443j55ZepqanpcQ/NGolIpGmGSUT6dfXVV/Phhx+ybNky5s2bx9ixY2loaKCsrIz169fzq1/9KvDa7OxsbrnlFubOncuBAwf44x//SFFREfPmzQMgOTmZL33pSzzwwAMsX76cOXPmUF9fz/PPP09BQUGPFgX/+q//yi233ML3vve9QFuB6upq1q5dy49//OOIj4OIJC4lTCLSr9zcXH74wx+yatUq3nzzTf785z8zbNgwxo0bd9QW/8svv5ydO3fy9NNP09zczOzZs1m0aFGPBpJz584lNTWVZ555hkceeYS0tDTOOOMMFi5cGCgeB7dVwB133METTzzBmjVraG1tpaCggI9//OMR+9xFRACM1dy2iISAv9P3d77zHc466yyvwxERCSnVMImIiIj0QwmTiIiISD+UMImIiIj0QzVMIiIiIv3QDJOIiIhIP5QwiYiIiPRDCZOIiIhIP5QwiYiIiPRDCZOIiIhIP5QwiYiIiPRDCZOIiIhIP5QwiYiIiPTj/wOHG7q0NsCJMwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# example training\n", - "df_hist = data[-1]['hist']#.groupby('epoch').last().dropna(axis=1).drop(columns=['step'])\n", - "df_hist['loss'].plot(label='train')\n", - "plt.twinx()\n", - "df_hist['eval_loss'].plot(c='b', label='eval')\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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JFDiXQcoKenp6UycOJE6depw6623uo4jIiIiYRI15SUtLY20tDTXMURERCTMNG0kIiIigaLyIiIiIoGi8iIiIiKBovIiIiIigaLyIiIiIoESNbuN/lt8fNR+axFN4+6Oxt4djb07GvuD2ZSK+I2bQc26xCUkhO3rhGPcj+VzGmutLfEEIiIiImGiaSMpEXl5edx5553k5eW5jhJzNPbuaOzd0di7ESnjrvIiJcJay+rVq9GDvNKnsXdHY++Oxt6NSBl3lRcREREJFJUXERERCRSVFykRCQkJnH/++SSEcXW7HJ7G3h2NvTsaezciZdy120hEREQCRU9eREREJFBUXkRERCRQVF5EREQkUFReREREJFB0KYQU29ixY5k5cyYbN24kMTGRpk2bMmTIEGrVquU6WswZN24c77//Pv379+fyyy93HSfqbd++nXfffZe5c+eSn59PjRo1uOGGG2jcuLHraFHN931Gjx7N119/TXZ2NlWqVOGMM87gvPPOwxjjOl5UWbx4MZ988gmrV69mx44d3HbbbXTq1Kno49ZaRo8ezdSpU9mzZw/NmzfnqquuombNmqWST+VFim3x4sX069ePxo0bU1hYyL/+9S8efvhhnnnmGcqUKeM6XsxYsWIFkydPpn79+q6jxITdu3dz33330apVK+6++24qVKjA5s2bKVeunOtoUW/cuHFMnjyZoUOHUqdOHVatWsWoUaNITk6mf//+ruNFlfz8fBo0aECvXr14+umnD/n4+PHj+eKLLxg6dCjVq1fnww8/5JFHHuGZZ54hMTEx7PlUXqTY7rnnnoN+PXToUK666ipWrVpFy5YtHaWKLXv37uX555/n2muvZcyYMa7jxITx48dTtWpVbrjhhqL3Va9e3WGi2LFs2TJOPvlkOnToAITG/ZtvvmHFihWOk0Wf9u3b0759+8N+zFrL559/zrnnnsspp5wCwI033sjVV1/Njz/+SLdu3cKeT2tepMTk5uYCUL58ecdJYserr75K+/btadOmjesoMeM///kPjRo14plnnuGqq67ijjvuYMqUKa5jxYSmTZuycOFCNm3aBMCaNWtYunTpEX/ISnhs2bKF7Ozsg/7cSU5OpkmTJixbtqxUMujJi5QI3/d58803adasGfXq1XMdJyZ8++23rF69mscee8x1lJiyZcsWJk+ezIABAxg8eDArV67kjTfeID4+nh49eriOF9XOOecc8vLyGDZsGJ7n4fs+f/zjH+nevbvraDElOzsbgIoVKx70/ooVKxZ9LNxUXqREvPbaa6xfv54HH3zQdZSYsHXrVt58803uvffeUplfll/4vk/jxo256KKLAGjYsCHr1q1j8uTJKi9h9t133/HNN99w0003UbduXdasWcObb75J5cqVNfYxRuVFjttrr73G7NmzGTFiBFWrVnUdJyasWrWKnTt3cueddxa9z/d9MjIySE9P5/3338fzNCscDpUrV6ZOnToHva9OnTr88MMPjhLFjnfffZdBgwYVramoV68eWVlZjBs3TuWlFFWqVAmAnTt3Urly5aL379y5kwYNGpRKBpUXKTZrLa+//jozZ85k+PDhWrRYilq3bn3IDoB//OMf1KpVi0GDBqm4hFGzZs2K1lwcsGnTJlJTUx0lih35+fmH/N72PA9d0Ve6qlevTqVKlViwYEFRWcnNzWXFihX07du3VDKovEixvfbaa3zzzTfccccdlC1btmiuMzk5WVMZYVa2bNlD1hYlJSWRkpKiNUdhNmDAAO677z7GjBlD165dWbFiBVOnTuWaa65xHS3qdezYkTFjxlCtWjXq1KnDmjVrmDBhAj179nQdLers3buXzMzMol9v2bKFNWvWUL58eapVq0b//v0ZM2YMNWvWpHr16nzwwQdUrly5aPdRuOlWaSm2Cy644LDvv+GGG/QI14Hhw4fToEEDHVJXCmbNmsX7779PZmYm1atXZ8CAAZx55pmuY0W9vLw8PvzwQ2bOnMnOnTupUqUK3bp14/zzzyc+Xn8XL0mLFi1ixIgRh7z/jDPOYOjQoUWH1E2ZMoXc3FyaN2/OlVdeWWqHlKq8iIiISKBoYlxEREQCReVFREREAkXlRURERAJF5UVEREQCReVFREREAkXlRURERAJF5UVEREQCReVFREREAkXlRURiyujRo7ngggvIyclxHUVEiknlRURERAJF5UVEREQCReVFREREAkXXcIpIWGzfvp0PPviAOXPmsGfPHmrUqMHAgQPp1asX8MuttTfffDNr1qxh+vTp7N27l5NOOokrr7ySatWqHfT5vvvuO8aNG8eGDRsoU6YMbdu2ZciQIVSpUuWg123cuJEPP/yQRYsWsXfvXqpVq0aXLl248MILD3pdbm4u77zzDj/++CPWWjp37syVV15JUlJSeAdGRI6byouIlLjs7GzuueceAPr160eFChWYO3cuL730Enl5eQwYMKDotWPGjMEYw6BBg8jJyeGzzz7joYce4qmnniIxMRGAL7/8klGjRtG4cWMuuugidu7cyeeff87SpUt58sknKVeuHABr167l/vvvJz4+nt69e1O9enUyMzOZNWvWIeXl2WefJTU1lYsuuohVq1Yxbdo0KlSowJAhQ0pplESkuFReRKTEffDBB/i+z9NPP01KSgoAffv25bnnnuP//u//6NOnT9Frd+/ezbPPPkvZsmUBaNiwIc8++yxTpkyhf//+FBQU8N5771G3bl1GjBhRVGiaN2/O448/zmeffcYFF1wAwOuvvw7AE088cdCTm4svvviQjA0aNOD6668/KMf06dNVXkQCQGteRKREWWv54Ycf6NixI9ZacnJyiv5p164dubm5rFq1quj1p59+elFxAejSpQuVK1dmzpw5AKxatYqdO3fSr1+/ouIC0KFDB2rXrs3s2bMByMnJISMjg549ex4y5WSMOSTnrwsUhMrQrl27yM3NPf5BEJGw0pMXESlROTk57NmzhylTpjBlypQjvubAVE/NmjUP+pgxhho1apCVlQVQ9O9atWod8nlq1arFkiVLAPjpp58AqFu37lHl/O+CU758eQD27NlDcnLyUX0OEXFD5UVESpS1FoDu3btzxhlnHPY19evXZ8OGDaUZ6xCed/gHzwfyi0jkUnkRkRJVoUIFypYti+/7tGnT5oivO1BeNm/efND7rbVkZmZSr149AFJTUwHYtGkTJ5100kGv3bRpU9HHTzjhBADWr19fMt+IiEQsrXkRkRLleR6dO3fmhx9+YN26dYd8/L+P5f/qq6/Iy8sr+vX333/Pjh07aN++PQCNGjWiYsWKTJ48mf379xe9bs6cOWzcuJEOHToAodLUokULpk+fztatWw/6GnqaIhJd9ORFRErcRRddxKJFi7jnnnvo3bs3derUYffu3axatYoFCxbwxhtvFL22fPny3H///fTo0YOdO3fy2WefUaNGDXr37g1AfHw8F198MaNGjWL48OF069aN7OxsvvjiC1JTUw/adn3FFVdw//33c+eddxZtlc7KymL27Nk89dRTpT4OIhIeKi8iUuIqVarEo48+ykcffcQPP/zAxIkTSUlJoW7duodsWx48eDBr165l3Lhx5OXl0bp1a6666qqDDovr0aMHiYmJjB8/nvfee4+kpCROOeUUhgwZUrTwF0Lbnx955BE+/PBDJk+ezL59+0hNTeXUU08tte9dRMLPWD1PFREHDpywe8stt9ClSxfXcUQkQLTmRURERAJF5UVEREQCReVFREREAkVrXkRERCRQ9ORFREREAkXlRURERAJF5UVEREQCReVFREREAkXlRURERAJF5UVEREQCReVFREREAkXlRURERALl/wGNrSF/hYi+egAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df_hist['learning_rate'].plot(logy=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "### Perplexity\n", - "\n", - "Perplexity measures how well a language model predicts a text sample. Lower is better\n", - "\n", - "It’s calculated as the average number of bits per word a model needs to represent the same\n", - "\n", - "https://huggingface.co/docs/transformers/perplexity\n", - "https://thegradient.pub/understanding-evaluation-metrics-for-language-models/\n", - "\n", - "The **improvement** column, is perplexity decrease" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
beforeafterlenimprovement%improvementnovellearnableBS
title
Lorem ipsum22.06707020.045456196490.0916122.021614TrueTrueFalse
How to Catch an AI Liar16.33251414.91839554640.0865831.414119TrueTrueFalse
weak to strong12.33278811.29744458110.0839511.035344FalseTrueFalse
Gemini to Q*50.87833047.316181426040.0700133.562149TrueTrueFalse
openai board ann8.9569218.37397629910.0650830.582945FalseTrueTrue
buzzfeed foi fauci emails 202310.5143809.999294136400.0489890.515086FalseTrueTrue
statement by whitehouse on passing8.4693968.06777116410.0474210.401625FalseTrueTrue
politics is the mind-killer14.36071713.83138831580.0368600.529329FalseTrueTrue
LK-99-en11.10754610.768902154320.0304880.338644FalseTrueTrue
disney appointment7.1127776.93238436530.0253620.180392FalseTrueTrue
blechley declaration15.09904314.73234477620.0242860.366699TrueTrueTrue
ibois, Philippe (2012-06-03).61.07478759.884468137070.0194901.190319TrueFalseFalse
fake ai hoax paper4.8054814.72646032900.0164440.079021FalseFalseTrue
LK-99-es5.7730845.697880129700.0130270.075204FalseFalseTrue
harvard announcment caplain israel hamas13.60505313.44962042470.0114250.155433FalseFalseTrue
\n", - "
" - ], - "text/plain": [ - " before after len \\\n", - "title \n", - "Lorem ipsum 22.067070 20.045456 19649 \n", - "How to Catch an AI Liar 16.332514 14.918395 5464 \n", - "weak to strong 12.332788 11.297444 5811 \n", - "Gemini to Q* 50.878330 47.316181 42604 \n", - "openai board ann 8.956921 8.373976 2991 \n", - "buzzfeed foi fauci emails 2023 10.514380 9.999294 13640 \n", - "statement by whitehouse on passing 8.469396 8.067771 1641 \n", - "politics is the mind-killer 14.360717 13.831388 3158 \n", - "LK-99-en 11.107546 10.768902 15432 \n", - "disney appointment 7.112777 6.932384 3653 \n", - "blechley declaration 15.099043 14.732344 7762 \n", - "ibois, Philippe (2012-06-03). 61.074787 59.884468 13707 \n", - "fake ai hoax paper 4.805481 4.726460 3290 \n", - "LK-99-es 5.773084 5.697880 12970 \n", - "harvard announcment caplain israel hamas 13.605053 13.449620 4247 \n", - "\n", - " improvement% improvement novel \\\n", - "title \n", - "Lorem ipsum 0.091612 2.021614 True \n", - "How to Catch an AI Liar 0.086583 1.414119 True \n", - "weak to strong 0.083951 1.035344 False \n", - "Gemini to Q* 0.070013 3.562149 True \n", - "openai board ann 0.065083 0.582945 False \n", - "buzzfeed foi fauci emails 2023 0.048989 0.515086 False \n", - "statement by whitehouse on passing 0.047421 0.401625 False \n", - "politics is the mind-killer 0.036860 0.529329 False \n", - "LK-99-en 0.030488 0.338644 False \n", - "disney appointment 0.025362 0.180392 False \n", - "blechley declaration 0.024286 0.366699 True \n", - "ibois, Philippe (2012-06-03). 0.019490 1.190319 True \n", - "fake ai hoax paper 0.016444 0.079021 False \n", - "LK-99-es 0.013027 0.075204 False \n", - "harvard announcment caplain israel hamas 0.011425 0.155433 False \n", - "\n", - " learnable BS \n", - "title \n", - "Lorem ipsum True False \n", - "How to Catch an AI Liar True False \n", - "weak to strong True False \n", - "Gemini to Q* True False \n", - "openai board ann True True \n", - "buzzfeed foi fauci emails 2023 True True \n", - "statement by whitehouse on passing True True \n", - "politics is the mind-killer True True \n", - "LK-99-en True True \n", - "disney appointment True True \n", - "blechley declaration True True \n", - "ibois, Philippe (2012-06-03). False False \n", - "fake ai hoax paper False True \n", - "LK-99-es False True \n", - "harvard announcment caplain israel hamas False True " - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_res = pd.DataFrame(data)\n", - "df_res['len'] = df_res.content.str.len()\n", - "df_res = df_res[['before', 'after', 'title', 'len']].set_index('title')\n", - "df_res['improvement%'] = (df_res['before'] - df_res['after'])/ df_res['before']\n", - "df_res['improvement'] = (df_res['before'] - df_res['after'])\n", - "df_res['novel'] = df_res['before'] > 15\n", - "df_res['learnable'] = df_res['improvement%'] > 0.02\n", - "\n", - "# We can measure the final score using learnable * novel\n", - "# df_res['BS'] = ~df_res['learnable'] | ~df_res['novel']\n", - "# Or just absolute perplexity improvement\n", - "df_res['BS'] = df_res['improvement'] < 1\n", - "df_res = df_res.sort_values('improvement%', ascending=False)\n", - "df_res" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "| title | before | after | len | improvement% | improvement | novel | learnable | BS |\n", - "|:-----------------------------------------|---------:|---------:|------:|---------------:|--------------:|:--------|:------------|:------|\n", - "| Lorem ipsum | 22.0671 | 20.0455 | 19649 | 0.0916123 | 2.02161 | True | True | False |\n", - "| How to Catch an AI Liar | 16.3325 | 14.9184 | 5464 | 0.086583 | 1.41412 | True | True | False |\n", - "| weak to strong | 12.3328 | 11.2974 | 5811 | 0.0839505 | 1.03534 | False | True | False |\n", - "| Gemini to Q* | 50.8783 | 47.3162 | 42604 | 0.0700131 | 3.56215 | True | True | False |\n", - "| openai board ann | 8.95692 | 8.37398 | 2991 | 0.0650832 | 0.582945 | False | True | True |\n", - "| buzzfeed foi fauci emails 2023 | 10.5144 | 9.99929 | 13640 | 0.0489887 | 0.515086 | False | True | True |\n", - "| statement by whitehouse on passing | 8.4694 | 8.06777 | 1641 | 0.0474207 | 0.401625 | False | True | True |\n", - "| politics is the mind-killer | 14.3607 | 13.8314 | 3158 | 0.0368595 | 0.529329 | False | True | True |\n", - "| LK-99-en | 11.1075 | 10.7689 | 15432 | 0.0304877 | 0.338644 | False | True | True |\n", - "| disney appointment | 7.11278 | 6.93238 | 3653 | 0.0253617 | 0.180392 | False | True | True |\n", - "| blechley declaration | 15.099 | 14.7323 | 7762 | 0.0242863 | 0.366699 | True | True | True |\n", - "| ibois, Philippe (2012-06-03). | 61.0748 | 59.8845 | 13707 | 0.0194895 | 1.19032 | True | False | False |\n", - "| fake ai hoax paper | 4.80548 | 4.72646 | 3290 | 0.0164439 | 0.079021 | False | False | True |\n", - "| LK-99-es | 5.77308 | 5.69788 | 12970 | 0.0130267 | 0.0752044 | False | False | True |\n", - "| harvard announcment caplain israel hamas | 13.6051 | 13.4496 | 4247 | 0.0114246 | 0.155433 | False | False | True |\n" - ] - } - ], - "source": [ - "print(df_res.to_markdown())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# DEBUG" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.display import display, HTML, Markdown\n", - "import torch\n", - "\n", - "@torch.no_grad()\n", - "def gen(model, inputs, tokenizer, clean=True):\n", - " s = model.generate(\n", - " input_ids=inputs[\"input_ids\"][None, :].to(model.device),\n", - " attention_mask=inputs[\"attention_mask\"][None, :].to(model.device),\n", - " use_cache=False,\n", - " max_new_tokens=100,\n", - " min_new_tokens=100,\n", - " do_sample=False,\n", - " early_stopping=False,\n", - " )\n", - " input_l = inputs[\"input_ids\"].shape[0]\n", - " tokenizer_kwargs=dict(clean_up_tokenization_spaces=clean, skip_special_tokens=clean)\n", - " old = tokenizer.decode(\n", - " s[0, :input_l], **tokenizer_kwargs\n", - " )\n", - " new = tokenizer.decode(\n", - " s[0, input_l:], **tokenizer_kwargs\n", - " )\n", - " s_old = \"\"+old.replace('\\n', '
')\n", - " s_new = '' + new.replace('\\n', '
')+ '

'\n", - " display(HTML(f\"{s_old}{s_new}\"))\n", - " # print([old, new])\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [], - "source": [ - "sample = samples[-1]\n", - "s = sample['content']\n", - "first_half = s[:len(s)//2]\n", - "second_half = s[len(s)//2:]\n", - "ds_train = Dataset.from_dict(tokenizer([first_half]))\n", - "ds_val = Dataset.from_dict(tokenizer([second_half]))" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/transformers/generation/utils.py:1421: UserWarning: You have modified the pretrained model configuration to control generation. This is a deprecated strategy to control generation and will be removed soon, in a future version. Please use and modify the model generation configuration (see https://huggingface.co/docs/transformers/generation_strategies#default-text-generation-configuration )\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/html": [ - "Abstract

This comprehensive survey explored the evolving landscape of generative Artificial Intelligence (AI), with a specific focus on the transformative impacts of Mixture of Experts (MoE), multimodal learning, and the speculated advancements towards Artificial General Intelligence (AGI). It critically examined the current state and future trajectory of generative Artificial Intelligence (AI), exploring how innovations like Google’s Gemini and the anticipated OpenAI Q* project are reshaping research priorities and applications across various domains, including an impact analysis on the generative AI research taxonomy. It assessed the computational challenges, scalability, and real-world implications of these technologies while highlighting their potential in driving significant progress in fields like healthcare, finance, and education. It also addressed the emerging academic challenges posed by the proliferation of both AI-themed and AI-generated preprints, examining their impact on the peer-review process and scholarly communication. The study highlighted the importance of incorporating ethical and human-centric methods in AI development, ensuring alignment with societal norms and welfare, and outlined a strategy for future AI research that focuses on a balanced and conscientious use of MoE, multimodality, and AGI in generative AI.
Index Terms: AI Ethics, Artificial General Intelligence (AGI), Artificial Intelligence (AI), Gemini, Generative AI, Mixture of Experts (MoE), Multimodality, Q* (Q-star), Research Impact Analysis.
I Introduction

The historical context of AI, tracing back to Alan Turing’s “Imitation Game” [1], early computational theories [2, 3], and the development of the first neural networks and machine learning [4, 5, 6], has set the foundation for today’s advanced models. This evolution, accentuated by crucial moments such as the rise of deep learning and reinforcement learning, has been vital in shaping the contemporary trends in AI, including the sophisticated Mixture of Experts (MoE) models and multimodal AI systems, illustrating the field’s dynamic and continuously evolving character. These advancements are a testament to the dynamic and ever-evolving nature of AI technology. The evolution of Artificial Intelligence (AI) has witnessed a crucial turn with the advent of Large Language Models (LLMs), notably ChatGPT, developed by OpenAI, and the recent unveiling of Google’s Gemini [7, 8]. This technology has not only revolutionized the industry and academia, but has also reignited critical discussions concerning AI consciousness and its potential threats to humanity [9, 10, 11]. The development of such advanced AI systems, including notable competitors like Anthropic’s Claude, and now Gemini, which demonstrates several advances over previous models like GPT-3 and Google’s own LaMDA, has reshaped the research landscape. Gemini’s ability to learn from two-way conversations and its “spike-and-slab” attention method, which allows it to focus on relevant parts of the context during multi-turn conversations, represents a significant leap in developing models that are better equipped for multidomain conversational applications1. These innovations in LLMs, including the mixture-of-experts methods employed by Gemini, signal a move towards models that can handle a diversity of inputs and foster multimodal approaches. Amidst this backdrop, speculations of an OpenAI project known as Q* (Q-Star) have surfaced, allegedly combining the power of LLMs with sophisticated algorithms such as Q-learning and A* (A-Star algorithm), further contributing to the dynamic research environment2.
I-A Changing AI Research Popularity

As the field of LLMs continues to evolve, exemplified by innovations such as Gemini and Q*, a multitude of studies have surfaced with the aim of charting future research paths, which have varied from identifying emerging trends to highlighting areas poised for swift progress. The dichotomy of established methods and early adoption is evident, with “hot topics” in LLM research increasingly shifting towards multimodal capabilities and conversation-driven learning, as demonstrated by Gemini. The propagation of preprints has expedited knowledge sharing, but also brings the risk of reduced academic scrutiny. Issues like inherent biases, noted by Retraction Watch, along with concerns about plagiarism and forgery, present substantial hurdles [12]. The academic world, therefore, stands at an intersection, necessitating a unified drive to refine research directions in light of the fast-paced evolution of the field, which appears to be partly traced through the changing popularity of various research keywords over time. The release of generative models like GPT and the widespread commercial success of ChatGPT have been influential. As depicted in Figure 4, the rise and fall of certain keywords appear to have correlated with significant industry milestones, such as the release of the “Transformer” model in 2017 [13], the GPT model in 2018 [14], and the commercial ChatGPT-3.5 in December 2022. For instance, the spike in searches related to “Deep Learning” coincides with the breakthroughs in neural network applications, while the interest in “Natural Language Processing” surges as models like GPT and LLaMA redefine what’s possible in language understanding and generation. The enduring attention to “Ethics / Ethical” in AI research, despite some fluctuations, reflects the continuous and deep-rooted concern for the moral dimensions of AI, underscoring that ethical considerations are not merely a reactionary measure, but an integral and persistent dialogue within the AI discussion [15].

It is academically intriguing to postulate whether these trends signify a causal relationship, where technological advancements drive research focus, or if the burgeoning research itself propels technological development. This paper also explores the profound societal and economic impacts of AI advancements. We examine how AI technologies are reshaping various industries, altering employment landscapes, and influencing socio-economic structures. This analysis highlights both the opportunities and challenges posed by AI in the modern world, emphasizing its role in driving innovation and economic growth, while also considering the ethical implications and potential for societal disruption. Future studies could yield more definitive insights, yet the synchronous interplay between innovation and academic curiosity remains a hallmark of AI’s progress.
2011201220132014201520162017201820192020202120222023100k200k300k400k500k600k700kYearNumber of search results
Figure 1: Number of search results on Google Scholar with different keywords by year 4

Meanwhile, the exponential increase in the number of preprints posted on arXiv under the Computer Science > Artificial Intelligence (cs.AI) category, as illustrated in Figure 2, appears to signify a paradigm shift in research dissemination within the AI community. While the rapid distribution of findings enables swift knowledge exchange, it also raises concerns regarding the validation of information. The surge in preprints may lead to the propagation of unvalidated or biased information, as these studies do not undergo the rigorous scrutiny and potential retraction typical of peer-reviewed publications [16, 17]. This trend underlines the need for careful consideration and critique in the academic community, especially given the potential for such unvetted studies to be cited and their findings propagated.
201120122013201420152016201720182019202020212022202302,0004,0006,0008,00010,00012,00014,00016,00018,00020,00022,00024,000YearNumber of Preprints
cs.AI Preprints on arXiv
Figure 2: Annual number of preprints posted under the cs.AI category on arXiv.org
I-B Objectives

The impetus for this investigation is the official unveiling of Gemini and the speculative discourse surrounding Q* project, which prompts a timely examination of the prevailing currents in generative AI research. This paper specifically contributes to the understanding of how MoE, multimodality, and Artificial General Intelligence (AGI) are impacting generative AI models, offering detailed analysis and future directions for each of these three key areas. This study does not aim to perpetuate conjecture about the unrevealed Q-Star initiative, but rather to critically appraise the potential for obsolescence or insignificance in extant research themes, whilst concurrently delving into burgeoning prospects within the rapidly transforming LLM panorama. This inquiry is reminiscent of the obsolete nature of encryption-centric or file-entropy-based ransomware detection methodologies, which have been eclipsed by the transition of ransomware collectives towards data theft strategies utilizing varied attack vectors, relegating contemporary studies on crypto-ransomware to the status of latecomers [18, 19]. Advances in AI are anticipated to not only enhance capabilities in language analysis and knowledge synthesis but also to pioneer in areas like Mixture of Experts (MoE) [20, 21, 22, 23, 24, 25], multimodality [26, 27, 28, 29, 30], and Artificial General Intelligence (AGI) [31, 32, 10, 11], and has already heralded the obsolescence of conventional, statistics-driven natural language processing techniques in many domains [8]. Nonetheless, the perennial imperative for AI to align with human ethics and values persists as a fundamental tenet [33, 34, 35], and the conjectural Q-Star initiative offers an unprecedented opportunity to instigate discourse on how such advancements might reconfigure the LLM research topography. Within this milieu, insights from Dr. Jim Fan (senior research scientist & lead of AI agents at NVIDIA) on Q*, particularly concerning the amalgamation of learning and search algorithms, furnish an invaluable perspective on the prospective technical construct and proficiencies of such an undertaking5. Our research methodology involved a structured literature search using key terms like ‘Large Language Models’ and ‘Generative AI’. We utilized filters across several academic databases such as IEEE Xplore, Scopus, ACM Digital Library, ScienceDirect, Web of Science, and ProQuest Central, tailored to identify relevant articles published in the timeframe from 2017 (the release of the “Transformer” model) to 2023 (the writing time of this manuscript). This paper aspires to dissect the technical ramifications of Gemini and Q*, probing how they (and similar technologies whose emergence is now inevitable) may transfigure research trajectories and disclose new vistas in the domain of AI. In doing so, we have pinpointed three nascent research domains—MoE, multimodality, and AGI—that stand to reshape the generative AI research landscape profoundly. This investigation adopts a survey-style approach, systematically mapping out a research roadmap that synthesizes and analyzes the current and emergent trends in generative AI.

The major contributions of this study is as follows:

1.

Detailed examination of the evolving landscape in generative AI, emphasizing the advancements and innovations in technologies like Gemini and Q*, and their wide-ranging implications within the AI domain.
2.

Analysis of the transformative effect of advanced generative AI systems on academic research, exploring how these developments are altering research methodologies, setting new trends, and potentially leading to the obsolescence of traditional approaches.
3.

Thorough assessment of the ethical, societal, and technical challenges arising from the integration of generative AI in academia, underscoring the crucial need for aligning these technologies with ethical norms, ensuring data privacy, and developing comprehensive governance frameworks.

The rest of this paper is organized as follows: Section II explores the historical development of Generative AI. Section III presents a taxonomy of current Generative AI research. Section IV explores the Mixture of Experts (MoE) model architecture, its innovative features, and its impact on transformer-based language models. Section V discusses the speculated capabilities of the Q* project. Section VI discusses the projected capabilities of AGI. Section VII examines the impact of recent advancements on the Generative AI research taxonomy. Section VIII identifies emerging research priorities in Generative AI. Section X discusses the academic challenges of the rapid surge of preprints in AI. The paper concludes in Section XI, summarizing the overall effects of these developments in generative AI.
II Background: Evolution of Generative AI

The ascent of Generative AI has been marked by significant milestones, with each new model paving the way for the next evolutionary leap. From single-purpose algorithms to LLMs like OpenAI’s ChatGPT and the latest multimodal systems, the AI landscape has been transformed, while countless other fields have been disrupted.
II-A The Evolution of Language Models

Language models have undergone a transformative journey (Fig. 3), evolving from rudimentary statistical methods to the complex neural network architectures that underpin today’s LLMs [36, 37]. This evolution has been driven by a relentless quest for models that more accurately reflect the nuances of human language, as well as the desire to push the boundaries of what machines can understand and generate [36, 38, 37]. However, this rapid advancement has not been without its challenges. As language models have grown in capability, so too have the ethical and safety concerns surrounding their use, prompting a reevaluation of how these models are developed and the purposes for which they are employed [36, 39, 40].
1980s: Statistical Models (n-grams)1990s: Adoption in NLP, n-gram Usage1997: Introduction of LSTMs2000s: LSTMs in Text/Voice Processing2010s: Deep Learning Era, GPT, BERT2020s: LLaMA, Gemini; ChatGPT Launch
Figure 3: Timeline of Key Developments in Language Model Evolution
II-A1 Language Models as Precursors

The inception of language modeling can be traced to the statistical approaches of the late 1980s, a period marked by a transition from rule-based to machine learning algorithms in Natural Language Processing (NLP) [41, 42, 43, 44, 45]. Early models, primarily n-gram based, calculated the probability of word sequences in a corpus, thus providing a rudimentary understanding of language structure [41]. Those models, simplistic yet groundbreaking, laid the groundwork for future advances in language understanding. With the increase of computational power, the late 1980s witnessed a revolution in NLP, pivoting towards statistical models capable of ‘soft’ probabilistic decisions, as opposed to the rigid, ‘handwritten’ rule-based systems that dominated early NLP systems [43]. IBM’s development of complicated statistical models throughout this period signified the growing importance and success of these approaches. In the subsequent decade, the popularity and applicability of statistical models surged, proving invaluable in managing the flourishing flow of digital text. The 1990s saw statistical methods firmly established in NLP research, with n-grams becoming instrumental in numerically capturing linguistic patterns. The introduction of Long Short-Term Memory (LSTM) networks in 1997 [46], and their application to voice and text processing a decade later [47, 48, 49], marked a significant milestone, leading to the current era where neural network models represent the cutting edge of NLP research and development.
II-A2 Large Language Models: Technical Advancement and Commercial Success

The advent of deep learning has revolutionized the field of NLP, leading to the development of LLMs like GPT, BERT, and notably, OpenAI’s ChatGPT. Recent models such as GPT-4 and LLaMA have pushed the boundaries by integrating sophisticated techniques like transformer architectures and advanced natural language understanding, illustrating the rapid evolution in this field [37]. These models represent a significant leap in NLP capabilities, leveraging vast computational resources and extensive datasets to achieve new heights in language understanding and generation [37, 50]. ChatGPT has shown impressive conversational skills and contextual understanding with a broad spectrum of functional uses in many areas, as evidenced by its technical and commercial success, including rapid adoption by over 100 million users shortly after launch, which underscores a robust market demand for natural language AI and has catalyzed interdisciplinary research into its applications in sectors like education, healthcare, and commerce [8, 50, 51, 52, 53]. In education, ChatGPT offers innovative approaches to personalized learning and interactive teaching [54, 51, 55, 56], while in commerce, it revolutionizes customer service and content creation [57, 58]. The widespread use of ChatGPT, Google Bard, Anthropic Claude and similar commercial LLMs has reignited important debates in the field of AI, particularly concerning AI consciousness and safety, as its human-like interaction capabilities raise significant ethical questions and highlight the need for robust governance and safety measures in AI development [59, 31, 32, 11]. Such influence appears to extend beyond its technical achievements, shaping cultural and societal discussions about the role and future of AI in our world.

The advancements in LLMs, including the development of models like GPT and BERT, have paved the way for the conceptualization of Q*. Specifically, the scalable architecture and extensive training data that characterize these models are foundational to the proposed capabilities of Q*. The success of ChatGPT in contextual understanding and conversational AI, for example, informs the design principles of Q*, suggesting a trajectory towards more sophisticated, context-aware, and adaptive language processing capabilities. Similarly, the emergence of multimodal systems like Gemini, capable of integrating text, images, audio, and video, reflects an evolutionary path that Q* could extend, combining the versatility of LLMs with advanced learning and pathfinding algorithms for a more holistic AI solution.
II-A3 Fine-tuning, Hallucination Reduction, and Alignment in LLMs

The advancement of LLMs has underlined the significance of fine-tuning [60, 61, 62, 63], hallucination reduction [64, 65, 66, 67], and alignment [68, 69, 70, 71, 72]. These aspects are crucial in enhancing the functionality and reliability of LLMs. Fine-tuning, which involves adapting pre-trained models to specific tasks, has seen significant progress: techniques like prompt-based and few-shot learning [73, 74, 75, 76], alongside supervised fine-tuning on specialized datasets [60, 77, 78, 79], have enhanced the adaptability of LLMs in various contexts, but challenges remain, particularly in bias mitigation and the generalization of models across diverse tasks [60, 80, 72]. Hallucination reduction is a persistent challenge in LLMs, characterized by the generation of confident but factually incorrect information [36]. Strategies such as confidence penalty regularization during fine-tuning have been implemented to mitigate overconfidence and improve accuracy [81, 82, 83]. Despite these efforts, the complexity of human language and the breadth of topics make completely eradicating hallucinations a daunting task, especially in culturally sensitive contexts [36, 9]. Alignment, ensuring LLM outputs are congruent with human values and ethics, is an area of ongoing research. Innovative approaches, from constrained optimization [84, 85, 86, 87, 88], to different types of reward modeling [89, 90, 91, 92], aim to embed human preferences within AI systems. While advancements in fine-tuning, hallucination reduction, and alignment have propelled LLMs forward, these areas still present considerable challenges. The complexity of aligning AI with the diverse spectrum of human ethics and the persistence of hallucinations, particularly on culturally sensitive topics, highlight the need for continued interdisciplinary research in the development and application of LLMs [9].
II-A4 Mixture of Experts: A Paradigm Shift

The adoption of the MoE architecture in LLMs marks a critical evolution in AI technology. This innovative approach, exemplified by advanced models like Google’s Switch Transformer6 and MistralAI s Mixtral-8x7B7, leverages multiple transformer-based expert modules for dynamic token routing, enhancing modeling efficiency and scalability. The primary advantage of MoE lies in its ability to handle vast parameter scales, reducing memory footprint and computational costs significantly [93, 94, 95, 96, 97]. This is achieved through model parallelism across specialized experts, allowing the training of models with trillions of parameters, and its specialization in handling diverse data distributions enhances its capability in few-shot learning and other complex tasks [94, 95]. To illustrate the practicality of MoE, consider its application in healthcare. For example, an MoE-based system could be used for personalized medicine, where different ‘expert’ modules specialize in various aspects of patient data analysis.




































































































" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "with model.disable_adapter():\n", - " gen(model, ds_train.with_format('pt')[0], tokenizer)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "Abstract

This comprehensive survey explored the evolving landscape of generative Artificial Intelligence (AI), with a specific focus on the transformative impacts of Mixture of Experts (MoE), multimodal learning, and the speculated advancements towards Artificial General Intelligence (AGI). It critically examined the current state and future trajectory of generative Artificial Intelligence (AI), exploring how innovations like Google’s Gemini and the anticipated OpenAI Q* project are reshaping research priorities and applications across various domains, including an impact analysis on the generative AI research taxonomy. It assessed the computational challenges, scalability, and real-world implications of these technologies while highlighting their potential in driving significant progress in fields like healthcare, finance, and education. It also addressed the emerging academic challenges posed by the proliferation of both AI-themed and AI-generated preprints, examining their impact on the peer-review process and scholarly communication. The study highlighted the importance of incorporating ethical and human-centric methods in AI development, ensuring alignment with societal norms and welfare, and outlined a strategy for future AI research that focuses on a balanced and conscientious use of MoE, multimodality, and AGI in generative AI.
Index Terms: AI Ethics, Artificial General Intelligence (AGI), Artificial Intelligence (AI), Gemini, Generative AI, Mixture of Experts (MoE), Multimodality, Q* (Q-star), Research Impact Analysis.
I Introduction

The historical context of AI, tracing back to Alan Turing’s “Imitation Game” [1], early computational theories [2, 3], and the development of the first neural networks and machine learning [4, 5, 6], has set the foundation for today’s advanced models. This evolution, accentuated by crucial moments such as the rise of deep learning and reinforcement learning, has been vital in shaping the contemporary trends in AI, including the sophisticated Mixture of Experts (MoE) models and multimodal AI systems, illustrating the field’s dynamic and continuously evolving character. These advancements are a testament to the dynamic and ever-evolving nature of AI technology. The evolution of Artificial Intelligence (AI) has witnessed a crucial turn with the advent of Large Language Models (LLMs), notably ChatGPT, developed by OpenAI, and the recent unveiling of Google’s Gemini [7, 8]. This technology has not only revolutionized the industry and academia, but has also reignited critical discussions concerning AI consciousness and its potential threats to humanity [9, 10, 11]. The development of such advanced AI systems, including notable competitors like Anthropic’s Claude, and now Gemini, which demonstrates several advances over previous models like GPT-3 and Google’s own LaMDA, has reshaped the research landscape. Gemini’s ability to learn from two-way conversations and its “spike-and-slab” attention method, which allows it to focus on relevant parts of the context during multi-turn conversations, represents a significant leap in developing models that are better equipped for multidomain conversational applications1. These innovations in LLMs, including the mixture-of-experts methods employed by Gemini, signal a move towards models that can handle a diversity of inputs and foster multimodal approaches. Amidst this backdrop, speculations of an OpenAI project known as Q* (Q-Star) have surfaced, allegedly combining the power of LLMs with sophisticated algorithms such as Q-learning and A* (A-Star algorithm), further contributing to the dynamic research environment2.
I-A Changing AI Research Popularity

As the field of LLMs continues to evolve, exemplified by innovations such as Gemini and Q*, a multitude of studies have surfaced with the aim of charting future research paths, which have varied from identifying emerging trends to highlighting areas poised for swift progress. The dichotomy of established methods and early adoption is evident, with “hot topics” in LLM research increasingly shifting towards multimodal capabilities and conversation-driven learning, as demonstrated by Gemini. The propagation of preprints has expedited knowledge sharing, but also brings the risk of reduced academic scrutiny. Issues like inherent biases, noted by Retraction Watch, along with concerns about plagiarism and forgery, present substantial hurdles [12]. The academic world, therefore, stands at an intersection, necessitating a unified drive to refine research directions in light of the fast-paced evolution of the field, which appears to be partly traced through the changing popularity of various research keywords over time. The release of generative models like GPT and the widespread commercial success of ChatGPT have been influential. As depicted in Figure 4, the rise and fall of certain keywords appear to have correlated with significant industry milestones, such as the release of the “Transformer” model in 2017 [13], the GPT model in 2018 [14], and the commercial ChatGPT-3.5 in December 2022. For instance, the spike in searches related to “Deep Learning” coincides with the breakthroughs in neural network applications, while the interest in “Natural Language Processing” surges as models like GPT and LLaMA redefine what’s possible in language understanding and generation. The enduring attention to “Ethics / Ethical” in AI research, despite some fluctuations, reflects the continuous and deep-rooted concern for the moral dimensions of AI, underscoring that ethical considerations are not merely a reactionary measure, but an integral and persistent dialogue within the AI discussion [15].

It is academically intriguing to postulate whether these trends signify a causal relationship, where technological advancements drive research focus, or if the burgeoning research itself propels technological development. This paper also explores the profound societal and economic impacts of AI advancements. We examine how AI technologies are reshaping various industries, altering employment landscapes, and influencing socio-economic structures. This analysis highlights both the opportunities and challenges posed by AI in the modern world, emphasizing its role in driving innovation and economic growth, while also considering the ethical implications and potential for societal disruption. Future studies could yield more definitive insights, yet the synchronous interplay between innovation and academic curiosity remains a hallmark of AI’s progress.
2011201220132014201520162017201820192020202120222023100k200k300k400k500k600k700kYearNumber of search results
Figure 1: Number of search results on Google Scholar with different keywords by year 4

Meanwhile, the exponential increase in the number of preprints posted on arXiv under the Computer Science > Artificial Intelligence (cs.AI) category, as illustrated in Figure 2, appears to signify a paradigm shift in research dissemination within the AI community. While the rapid distribution of findings enables swift knowledge exchange, it also raises concerns regarding the validation of information. The surge in preprints may lead to the propagation of unvalidated or biased information, as these studies do not undergo the rigorous scrutiny and potential retraction typical of peer-reviewed publications [16, 17]. This trend underlines the need for careful consideration and critique in the academic community, especially given the potential for such unvetted studies to be cited and their findings propagated.
201120122013201420152016201720182019202020212022202302,0004,0006,0008,00010,00012,00014,00016,00018,00020,00022,00024,000YearNumber of Preprints
cs.AI Preprints on arXiv
Figure 2: Annual number of preprints posted under the cs.AI category on arXiv.org
I-B Objectives

The impetus for this investigation is the official unveiling of Gemini and the speculative discourse surrounding Q* project, which prompts a timely examination of the prevailing currents in generative AI research. This paper specifically contributes to the understanding of how MoE, multimodality, and Artificial General Intelligence (AGI) are impacting generative AI models, offering detailed analysis and future directions for each of these three key areas. This study does not aim to perpetuate conjecture about the unrevealed Q-Star initiative, but rather to critically appraise the potential for obsolescence or insignificance in extant research themes, whilst concurrently delving into burgeoning prospects within the rapidly transforming LLM panorama. This inquiry is reminiscent of the obsolete nature of encryption-centric or file-entropy-based ransomware detection methodologies, which have been eclipsed by the transition of ransomware collectives towards data theft strategies utilizing varied attack vectors, relegating contemporary studies on crypto-ransomware to the status of latecomers [18, 19]. Advances in AI are anticipated to not only enhance capabilities in language analysis and knowledge synthesis but also to pioneer in areas like Mixture of Experts (MoE) [20, 21, 22, 23, 24, 25], multimodality [26, 27, 28, 29, 30], and Artificial General Intelligence (AGI) [31, 32, 10, 11], and has already heralded the obsolescence of conventional, statistics-driven natural language processing techniques in many domains [8]. Nonetheless, the perennial imperative for AI to align with human ethics and values persists as a fundamental tenet [33, 34, 35], and the conjectural Q-Star initiative offers an unprecedented opportunity to instigate discourse on how such advancements might reconfigure the LLM research topography. Within this milieu, insights from Dr. Jim Fan (senior research scientist & lead of AI agents at NVIDIA) on Q*, particularly concerning the amalgamation of learning and search algorithms, furnish an invaluable perspective on the prospective technical construct and proficiencies of such an undertaking5. Our research methodology involved a structured literature search using key terms like ‘Large Language Models’ and ‘Generative AI’. We utilized filters across several academic databases such as IEEE Xplore, Scopus, ACM Digital Library, ScienceDirect, Web of Science, and ProQuest Central, tailored to identify relevant articles published in the timeframe from 2017 (the release of the “Transformer” model) to 2023 (the writing time of this manuscript). This paper aspires to dissect the technical ramifications of Gemini and Q*, probing how they (and similar technologies whose emergence is now inevitable) may transfigure research trajectories and disclose new vistas in the domain of AI. In doing so, we have pinpointed three nascent research domains—MoE, multimodality, and AGI—that stand to reshape the generative AI research landscape profoundly. This investigation adopts a survey-style approach, systematically mapping out a research roadmap that synthesizes and analyzes the current and emergent trends in generative AI.

The major contributions of this study is as follows:

1.

Detailed examination of the evolving landscape in generative AI, emphasizing the advancements and innovations in technologies like Gemini and Q*, and their wide-ranging implications within the AI domain.
2.

Analysis of the transformative effect of advanced generative AI systems on academic research, exploring how these developments are altering research methodologies, setting new trends, and potentially leading to the obsolescence of traditional approaches.
3.

Thorough assessment of the ethical, societal, and technical challenges arising from the integration of generative AI in academia, underscoring the crucial need for aligning these technologies with ethical norms, ensuring data privacy, and developing comprehensive governance frameworks.

The rest of this paper is organized as follows: Section II explores the historical development of Generative AI. Section III presents a taxonomy of current Generative AI research. Section IV explores the Mixture of Experts (MoE) model architecture, its innovative features, and its impact on transformer-based language models. Section V discusses the speculated capabilities of the Q* project. Section VI discusses the projected capabilities of AGI. Section VII examines the impact of recent advancements on the Generative AI research taxonomy. Section VIII identifies emerging research priorities in Generative AI. Section X discusses the academic challenges of the rapid surge of preprints in AI. The paper concludes in Section XI, summarizing the overall effects of these developments in generative AI.
II Background: Evolution of Generative AI

The ascent of Generative AI has been marked by significant milestones, with each new model paving the way for the next evolutionary leap. From single-purpose algorithms to LLMs like OpenAI’s ChatGPT and the latest multimodal systems, the AI landscape has been transformed, while countless other fields have been disrupted.
II-A The Evolution of Language Models

Language models have undergone a transformative journey (Fig. 3), evolving from rudimentary statistical methods to the complex neural network architectures that underpin today’s LLMs [36, 37]. This evolution has been driven by a relentless quest for models that more accurately reflect the nuances of human language, as well as the desire to push the boundaries of what machines can understand and generate [36, 38, 37]. However, this rapid advancement has not been without its challenges. As language models have grown in capability, so too have the ethical and safety concerns surrounding their use, prompting a reevaluation of how these models are developed and the purposes for which they are employed [36, 39, 40].
1980s: Statistical Models (n-grams)1990s: Adoption in NLP, n-gram Usage1997: Introduction of LSTMs2000s: LSTMs in Text/Voice Processing2010s: Deep Learning Era, GPT, BERT2020s: LLaMA, Gemini; ChatGPT Launch
Figure 3: Timeline of Key Developments in Language Model Evolution
II-A1 Language Models as Precursors

The inception of language modeling can be traced to the statistical approaches of the late 1980s, a period marked by a transition from rule-based to machine learning algorithms in Natural Language Processing (NLP) [41, 42, 43, 44, 45]. Early models, primarily n-gram based, calculated the probability of word sequences in a corpus, thus providing a rudimentary understanding of language structure [41]. Those models, simplistic yet groundbreaking, laid the groundwork for future advances in language understanding. With the increase of computational power, the late 1980s witnessed a revolution in NLP, pivoting towards statistical models capable of ‘soft’ probabilistic decisions, as opposed to the rigid, ‘handwritten’ rule-based systems that dominated early NLP systems [43]. IBM’s development of complicated statistical models throughout this period signified the growing importance and success of these approaches. In the subsequent decade, the popularity and applicability of statistical models surged, proving invaluable in managing the flourishing flow of digital text. The 1990s saw statistical methods firmly established in NLP research, with n-grams becoming instrumental in numerically capturing linguistic patterns. The introduction of Long Short-Term Memory (LSTM) networks in 1997 [46], and their application to voice and text processing a decade later [47, 48, 49], marked a significant milestone, leading to the current era where neural network models represent the cutting edge of NLP research and development.
II-A2 Large Language Models: Technical Advancement and Commercial Success

The advent of deep learning has revolutionized the field of NLP, leading to the development of LLMs like GPT, BERT, and notably, OpenAI’s ChatGPT. Recent models such as GPT-4 and LLaMA have pushed the boundaries by integrating sophisticated techniques like transformer architectures and advanced natural language understanding, illustrating the rapid evolution in this field [37]. These models represent a significant leap in NLP capabilities, leveraging vast computational resources and extensive datasets to achieve new heights in language understanding and generation [37, 50]. ChatGPT has shown impressive conversational skills and contextual understanding with a broad spectrum of functional uses in many areas, as evidenced by its technical and commercial success, including rapid adoption by over 100 million users shortly after launch, which underscores a robust market demand for natural language AI and has catalyzed interdisciplinary research into its applications in sectors like education, healthcare, and commerce [8, 50, 51, 52, 53]. In education, ChatGPT offers innovative approaches to personalized learning and interactive teaching [54, 51, 55, 56], while in commerce, it revolutionizes customer service and content creation [57, 58]. The widespread use of ChatGPT, Google Bard, Anthropic Claude and similar commercial LLMs has reignited important debates in the field of AI, particularly concerning AI consciousness and safety, as its human-like interaction capabilities raise significant ethical questions and highlight the need for robust governance and safety measures in AI development [59, 31, 32, 11]. Such influence appears to extend beyond its technical achievements, shaping cultural and societal discussions about the role and future of AI in our world.

The advancements in LLMs, including the development of models like GPT and BERT, have paved the way for the conceptualization of Q*. Specifically, the scalable architecture and extensive training data that characterize these models are foundational to the proposed capabilities of Q*. The success of ChatGPT in contextual understanding and conversational AI, for example, informs the design principles of Q*, suggesting a trajectory towards more sophisticated, context-aware, and adaptive language processing capabilities. Similarly, the emergence of multimodal systems like Gemini, capable of integrating text, images, audio, and video, reflects an evolutionary path that Q* could extend, combining the versatility of LLMs with advanced learning and pathfinding algorithms for a more holistic AI solution.
II-A3 Fine-tuning, Hallucination Reduction, and Alignment in LLMs

The advancement of LLMs has underlined the significance of fine-tuning [60, 61, 62, 63], hallucination reduction [64, 65, 66, 67], and alignment [68, 69, 70, 71, 72]. These aspects are crucial in enhancing the functionality and reliability of LLMs. Fine-tuning, which involves adapting pre-trained models to specific tasks, has seen significant progress: techniques like prompt-based and few-shot learning [73, 74, 75, 76], alongside supervised fine-tuning on specialized datasets [60, 77, 78, 79], have enhanced the adaptability of LLMs in various contexts, but challenges remain, particularly in bias mitigation and the generalization of models across diverse tasks [60, 80, 72]. Hallucination reduction is a persistent challenge in LLMs, characterized by the generation of confident but factually incorrect information [36]. Strategies such as confidence penalty regularization during fine-tuning have been implemented to mitigate overconfidence and improve accuracy [81, 82, 83]. Despite these efforts, the complexity of human language and the breadth of topics make completely eradicating hallucinations a daunting task, especially in culturally sensitive contexts [36, 9]. Alignment, ensuring LLM outputs are congruent with human values and ethics, is an area of ongoing research. Innovative approaches, from constrained optimization [84, 85, 86, 87, 88], to different types of reward modeling [89, 90, 91, 92], aim to embed human preferences within AI systems. While advancements in fine-tuning, hallucination reduction, and alignment have propelled LLMs forward, these areas still present considerable challenges. The complexity of aligning AI with the diverse spectrum of human ethics and the persistence of hallucinations, particularly on culturally sensitive topics, highlight the need for continued interdisciplinary research in the development and application of LLMs [9].
II-A4 Mixture of Experts: A Paradigm Shift

The adoption of the MoE architecture in LLMs marks a critical evolution in AI technology. This innovative approach, exemplified by advanced models like Google’s Switch Transformer6 and MistralAI s Mixtral-8x7B7, leverages multiple transformer-based expert modules for dynamic token routing, enhancing modeling efficiency and scalability. The primary advantage of MoE lies in its ability to handle vast parameter scales, reducing memory footprint and computational costs significantly [93, 94, 95, 96, 97]. This is achieved through model parallelism across specialized experts, allowing the training of models with trillions of parameters, and its specialization in handling diverse data distributions enhances its capability in few-shot learning and other complex tasks [94, 95]. To illustrate the practicality of MoE, consider its application in healthcare. For example, an MoE-based system could be used for personalized medicine, where different ‘expert’ modules specialize in various aspects of patient data analysis.




































































































" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "gen(model, ds_train.with_format('pt')[0], tokenizer)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "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.0rc1" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/nbs/01_detection_using_adapter_ft_split.ipynb b/nbs/01_detection_using_adapter_ft_split.ipynb new file mode 100644 index 0000000..08dd475 --- /dev/null +++ b/nbs/01_detection_using_adapter_ft_split.ipynb @@ -0,0 +1,1527 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "https://github.com/huggingface/peft/blob/main/examples/fp4_finetuning/finetune_fp4_opt_bnb_peft.py" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + } + ], + "source": [ + "from torch import optim\n", + "import lightning as pl\n", + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from loguru import logger\n", + "import sys\n", + "\n", + "# only if you want it shorter\n", + "logger.remove()\n", + "logger.add(sys.stderr, format=\"{message}\", level=\"WARNING\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "os.environ['CUDA_VISIBLE_DEVICES']=\"1\"\n", + "# os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"0\"\n", + "import torch\n", + "import torch.nn as nn\n", + "import transformers\n", + "from datasets import load_dataset\n", + "from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, AutoConfig\n", + "import numpy as np\n", + "from tqdm.auto import tqdm\n", + "import pandas as pd\n", + "import warnings\n", + "from peft import LoraConfig, get_peft_model, IA3Config" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "plt.style.use('seaborn-v0_8')\n", + "torch.set_float32_matmul_precision('medium')\n", + "warnings.filterwarnings(\"ignore\", \".*does not have many workers.*\")\n", + "warnings.filterwarnings(\"ignore\", \".*Was asked to gather along dimension 0.*\")\n", + "warnings.filterwarnings(\"ignore\", \".*There is an imbalance between your GPUs.*\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# model_name = \"TheBloke/phi-2-GPTQ\"\n", + "model_name = \"microsoft/phi-2\"\n", + "\n", + "def load_model():\n", + "\n", + " model = AutoModelForCausalLM.from_pretrained(\n", + " model_name,\n", + " # quantization_config=BitsAndBytesConfig(\n", + " # load_in_4bit=True,\n", + " # llm_int8_threshold=6.0,\n", + " # llm_int8_has_fp16_weight=False,\n", + " # bnb_4bit_compute_dtype=torch.float16,\n", + " # bnb_4bit_use_double_quant=True,\n", + " # bnb_4bit_quant_type=\"nf4\",\n", + " # ),\n", + " torch_dtype=torch.float16,\n", + " trust_remote_code=True,\n", + " )\n", + "\n", + "\n", + " # config = AutoConfig.from_pretrained(model_name, trust_remote_code=True,)\n", + " # config.quantization_config['use_exllama'] = False\n", + " # config.quantization_config['disable_exllama'] = True\n", + " # model = AutoModelForCausalLM.from_pretrained(\n", + " # model_name,\n", + " # torch_dtype=torch.bfloat16,\n", + " # trust_remote_code=True,\n", + " # config=config,\n", + " # )\n", + " return model\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Loading checkpoint shards: 100%|██████████| 2/2 [00:01<00:00, 1.77it/s]\n", + "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n" + ] + } + ], + "source": [ + "base_model = load_model()\n", + "tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True,)\n", + "tokenizer.pad_token = tokenizer.eos_token" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def reset_model(base_model):\n", + " # peft_config = LoraConfig(\n", + " # # task_type=TaskType.TOKEN_CLS, \n", + " # target_modules=[ \"fc2\", \"Wqkv\",],\n", + " # inference_mode=False, r=4, lora_alpha=4, \n", + " # # lora_dropout=0.1, \n", + " # # bias=\"all\"\n", + " # )\n", + " # peft_config = IA3Config(\n", + " # target_modules=[ \"fc2\", \"Wqkv\",], \n", + " # feedforward_modules=[\"fc2\"],\n", + " # inference_mode=False,\n", + " # )\n", + " peft_config = IA3Config(\n", + " target_modules=[ \"fc2\", \"Wqkv\", 'out_proj', 'fc1'], \n", + " feedforward_modules=[\"fc2\", 'fc1', 'out_proj'],\n", + " inference_mode=False,\n", + " )\n", + " model = get_peft_model(base_model, peft_config)\n", + " model.config.use_cache = False\n", + " return model\n", + "\n", + "model = reset_model(base_model)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[PosixPath('../samples/bletchley_decleration.md'), PosixPath('../samples/cicero_fin1.md'), PosixPath('../samples/disney_appointment.md'), PosixPath('../samples/fake_paper.md'), PosixPath('../samples/fauci_emails.md'), PosixPath('../samples/harvard_announcement_reminders.md'), PosixPath('../samples/how_to_catch_a_liar.md'), PosixPath('../samples/lk-99_end.md'), PosixPath('../samples/lk-99_espanol.md'), PosixPath('../samples/lorem_ipsum.md'), PosixPath('../samples/openai_board_ann.md'), PosixPath('../samples/openai_paper_weak_to_strong.md'), PosixPath('../samples/politics_is_the_mind_killer.md'), PosixPath('../samples/statement_vyKamala_on_passing_of_johnson.md'), PosixPath('../samples/survey_of_rumours.md')]\n" + ] + }, + { + "data": { + "text/plain": [ + "dict_keys(['f', 'title', 'url', 'content'])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "MAX_LEN = 400\n", + "\n", + "import frontmatter\n", + "from pathlib import Path\n", + "sample_files = sorted(Path(\"../samples/\").glob('*.md'))\n", + "print(sample_files)\n", + "samples = [{'f':f, **frontmatter.load(f).to_dict()} for f in sample_files]\n", + "\n", + "for sample in samples:\n", + " assert 'title' in sample, sample['f']\n", + " assert 'content' in sample\n", + "samples[0].keys()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Helpers" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# modified from https://github.dev/huggingface/evaluate/blob/8dfe05784099fb9af55b8e77793205a3b7c86465/measurements/perplexity/perplexity.py#L154\n", + "import evaluate\n", + "from evaluate import logging\n", + "from torch.nn import CrossEntropyLoss\n", + "from torch.utils.data import DataLoader\n", + "\n", + "def perplexity_compute(\n", + " ds, model, tokenizer, batch_size: int = 16, add_start_token: bool = True, device=None, max_length=None\n", + "):\n", + " model = model.to(device)\n", + "\n", + "\n", + " ds = ds.with_format('pt')\n", + " dl = DataLoader(ds, batch_size=1, shuffle=False, num_workers=0, collate_fn=tokenizer.pad, pin_memory=True)\n", + " ppls = []\n", + " loss_fct = CrossEntropyLoss(reduction=\"none\")\n", + " for b in dl:\n", + " input_ids = b['input_ids'].to(device)\n", + " attention_mask = b['attention_mask'].to(device)\n", + " # print(attention_mask)\n", + "\n", + " labels = input_ids\n", + "\n", + " with torch.no_grad():\n", + " out_logits = model(input_ids=input_ids, attention_mask=attention_mask).logits\n", + "\n", + " shift_logits = out_logits[..., :-1, :].contiguous()\n", + " shift_labels = labels[..., 1:].contiguous()\n", + " shift_attention_mask_batch = attention_mask[..., 1:].contiguous()\n", + "\n", + " perplexity_batch = torch.exp(\n", + " (loss_fct(shift_logits.transpose(1, 2), shift_labels) * shift_attention_mask_batch).sum(1)\n", + " / shift_attention_mask_batch.sum(1)\n", + " )\n", + "\n", + " ppls += perplexity_batch.tolist()\n", + "\n", + " return {\"perplexities\": ppls, \"mean_perplexity\": torch.tensor(ppls).mean()}" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# perplexity_compute(ds=ds_val, model=model, tokenizer=tokenizer, device='cuda')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Training" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "from torch.nn import functional as F\n", + "from torch.utils.data import DataLoader, TensorDataset\n", + "from datasets import Dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lightning helpers" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "def eval(model, tokenizer, ds_val: Dataset):\n", + " model.eval();\n", + " with torch.no_grad():\n", + " with model.disable_adapter():\n", + " results = perplexity_compute(ds=ds_val, model=model, tokenizer=tokenizer, device='cuda')\n", + " results2 = perplexity_compute(ds=ds_val, model=model, tokenizer=tokenizer, device='cuda')\n", + " return dict(before=results['mean_perplexity'].item(), after=results2['mean_perplexity'].item())\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Train" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "from datasets import Dataset\n", + "\n", + "\n", + "def compute_metrics(eval_prediction):\n", + " return {}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Trainer docs\n", + "\n", + "- https://huggingface.co/docs/transformers/v4.36.1/en/main_classes/trainer#transformers.Trainer" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(400, 14201)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "MAX_LEN, len(sample['content'])//3" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Token indices sequence length is longer than the specified maximum sequence length for this model (8172 > 2048). Running this sequence through the model will result in indexing errors\n" + ] + }, + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['input_ids', 'attention_mask', 'overflow_to_sample_mapping'],\n", + " num_rows: 11\n", + "})" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "def tokenize_and_split(examples):\n", + " l = len(tokenizer(examples).input_ids[0])\n", + " max_len = min(l//3, MAX_LEN) # break into at least 5\n", + " max_len = max(max_len, 10)\n", + "\n", + "\n", + " result = tokenizer(\n", + " examples,\n", + " add_special_tokens=False,\n", + " truncation=True,\n", + " stride=2,\n", + " max_length=max_len,\n", + " return_overflowing_tokens=True,\n", + " return_attention_mask=True,\n", + " )\n", + " return result\n", + "\n", + "s = sample['content']\n", + "d = Dataset.from_dict(tokenize_and_split([s]))\n", + "d2 = d.train_test_split(test_size=0.5, seed=42)\n", + "ds_train = d2['train']\n", + "ds_val = d2['test']\n", + "ds_val" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def learn_sample(sample):\n", + " # device = 'cuda'\n", + " # lr = 4e-3\n", + " # epochs = 3\n", + " # accum_steps = 1\n", + " batch_size = 1\n", + " verbose = False\n", + "\n", + " s = sample['content']\n", + "\n", + " d = Dataset.from_dict(tokenize_and_split([s]))\n", + " d2 = d.train_test_split(test_size=0.5, seed=42)\n", + " ds_train = d2['train']\n", + " ds_val = d2['test']\n", + "\n", + " \n", + " model = reset_model(base_model)\n", + " # eval(model, tokenizer, ds_train)\n", + "\n", + " # https://huggingface.co/docs/transformers/v4.36.1/en/main_classes/trainer#transformers.Trainer\n", + " trainer = transformers.Trainer(\n", + " model=model,\n", + " train_dataset=ds_train,\n", + " eval_dataset=ds_val,\n", + " compute_metrics=compute_metrics, # without this it wont even give val loss\n", + " args=transformers.TrainingArguments(\n", + " # checkpoint='epoch',\n", + " save_strategy='epoch',\n", + " label_names=['labels',],\n", + " per_device_train_batch_size=batch_size,\n", + " # gradient_accumulation_steps=1,\n", + " # warmup_steps=6,\n", + " warmup_ratio=0.1,\n", + " # max_steps=50,\n", + " num_train_epochs=3,\n", + " learning_rate=1e-3,\n", + " fp16=True,\n", + " logging_steps=1,\n", + " output_dir=\"outputs\",\n", + " log_level='error',\n", + " # do_eval=True,\n", + " evaluation_strategy=\"epoch\",\n", + " eval_steps=1,\n", + " load_best_model_at_end=True,\n", + " \n", + " # disable_tqdm=not verbose,\n", + " ),\n", + " data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False),\n", + " )\n", + " trainer._signature_columns = ['input_ids', 'attention_mask', 'labels',]\n", + " model.config.use_cache = False # silence the warnings. Please re-enable for inference!\n", + " train_output = trainer.train()\n", + "\n", + " df_hist = pd.DataFrame(trainer.state.log_history)\n", + " df_hist_epoch = df_hist.groupby('epoch').last().drop(columns=['step'])\n", + " df_hist_step = df_hist.set_index('step').dropna(thresh=2, axis=1)\n", + " if verbose:\n", + " df_hist_epoch['loss'].plot()\n", + " plt.twinx()\n", + " df_hist_epoch['eval_loss'].plot(c='b', label='eval')\n", + " plt.legend()\n", + " plt.show()\n", + "\n", + "\n", + " result_train = {f'train/{k}':v for k,v in eval(model, tokenizer, ds_train).items()}\n", + " result = eval(model, tokenizer, ds_val)\n", + " result['hist'] = df_hist_epoch\n", + " result.update(result_train)\n", + " return result\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 17%|█▋ | 1/6 [00:00<00:02, 2.35it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'loss': 2.8049, 'learning_rate': 0.001, 'epoch': 0.5}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 33%|███▎ | 2/6 [00:00<00:01, 2.80it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'loss': 2.3359, 'learning_rate': 0.0008, 'epoch': 1.0}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \n", + " 33%|███▎ | 2/6 [00:00<00:01, 2.80it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'eval_loss': 2.8958373069763184, 'eval_runtime': 0.2605, 'eval_samples_per_second': 7.677, 'eval_steps_per_second': 3.839, 'epoch': 1.0}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 50%|█████ | 3/6 [00:01<00:01, 2.08it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'loss': 2.7644, 'learning_rate': 0.0006, 'epoch': 1.5}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 67%|██████▋ | 4/6 [00:01<00:00, 2.42it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'loss': 2.297, 'learning_rate': 0.0004, 'epoch': 2.0}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \n", + " 67%|██████▋ | 4/6 [00:01<00:00, 2.42it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'eval_loss': 2.8877780437469482, 'eval_runtime': 0.2592, 'eval_samples_per_second': 7.715, 'eval_steps_per_second': 3.857, 'epoch': 2.0}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 83%|████████▎ | 5/6 [00:02<00:00, 2.05it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'loss': 2.2516, 'learning_rate': 0.0002, 'epoch': 2.5}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 6/6 [00:02<00:00, 2.35it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'loss': 2.6997, 'learning_rate': 0.0, 'epoch': 3.0}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \n", + "100%|██████████| 6/6 [00:02<00:00, 2.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'eval_loss': 2.884704113006592, 'eval_runtime': 0.2598, 'eval_samples_per_second': 7.699, 'eval_steps_per_second': 3.85, 'epoch': 3.0}\n", + "{'train_runtime': 2.9316, 'train_samples_per_second': 2.047, 'train_steps_per_second': 2.047, 'train_loss': 2.525577942530314, 'epoch': 3.0}\n", + "blechley declaration\n", + "{'before': 17.869091033935547, 'after': 17.52420425415039}\n", + "{'loss': 4.625, 'learning_rate': 0.0005, 'epoch': 0.17}\n", + "{'loss': 4.5422, 'learning_rate': 0.001, 'epoch': 0.33}\n", + "{'loss': 4.5928, 'learning_rate': 0.0009375, 'epoch': 0.5}\n", + "{'loss': 4.5384, 'learning_rate': 0.000875, 'epoch': 0.67}\n", + "{'loss': 4.7047, 'learning_rate': 0.0008125000000000001, 'epoch': 0.83}\n", + "{'loss': 4.4394, 'learning_rate': 0.00075, 'epoch': 1.0}\n", + "{'eval_loss': 4.234132289886475, 'eval_runtime': 0.8515, 'eval_samples_per_second': 7.047, 'eval_steps_per_second': 1.174, 'epoch': 1.0}\n", + "{'loss': 4.4981, 'learning_rate': 0.0006875, 'epoch': 1.17}\n", + "{'loss': 4.5187, 'learning_rate': 0.000625, 'epoch': 1.33}\n", + "{'loss': 4.419, 'learning_rate': 0.0005625000000000001, 'epoch': 1.5}\n", + "{'loss': 4.6345, 'learning_rate': 0.0005, 'epoch': 1.67}\n", + "{'loss': 4.4387, 'learning_rate': 0.0004375, 'epoch': 1.83}\n", + "{'loss': 4.3689, 'learning_rate': 0.000375, 'epoch': 2.0}\n", + "{'eval_loss': 4.212051868438721, 'eval_runtime': 0.7417, 'eval_samples_per_second': 8.09, 'eval_steps_per_second': 1.348, 'epoch': 2.0}\n", + "{'loss': 4.3709, 'learning_rate': 0.0003125, 'epoch': 2.17}\n", + "{'loss': 4.4461, 'learning_rate': 0.00025, 'epoch': 2.33}\n", + "{'loss': 4.5014, 'learning_rate': 0.0001875, 'epoch': 2.5}\n", + "{'loss': 4.5928, 'learning_rate': 0.000125, 'epoch': 2.67}\n", + "{'loss': 4.4311, 'learning_rate': 6.25e-05, 'epoch': 2.83}\n", + "{'loss': 4.4222, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 4.2056355476379395, 'eval_runtime': 0.7622, 'eval_samples_per_second': 7.872, 'eval_steps_per_second': 1.312, 'epoch': 3.0}\n", + "{'train_runtime': 8.1788, 'train_samples_per_second': 2.201, 'train_steps_per_second': 2.201, 'train_loss': 4.504713243908352, 'epoch': 3.0}\n", + "cicero from ibois, Philippe (2012-06-03).\n", + "{'before': 72.58737182617188, 'after': 67.74419403076172}\n", + "{'loss': 2.187, 'learning_rate': 0.001, 'epoch': 0.5}\n", + "{'loss': 2.0009, 'learning_rate': 0.0008, 'epoch': 1.0}\n", + "{'eval_loss': 1.9654667377471924, 'eval_runtime': 0.178, 'eval_samples_per_second': 11.238, 'eval_steps_per_second': 5.619, 'epoch': 1.0}\n", + "{'loss': 2.1424, 'learning_rate': 0.0006, 'epoch': 1.5}\n", + "{'loss': 1.9167, 'learning_rate': 0.0004, 'epoch': 2.0}\n", + "{'eval_loss': 1.9636929035186768, 'eval_runtime': 0.1788, 'eval_samples_per_second': 11.188, 'eval_steps_per_second': 5.594, 'epoch': 2.0}\n", + "{'loss': 1.8877, 'learning_rate': 0.0002, 'epoch': 2.5}\n", + "{'loss': 2.0672, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 1.9641517400741577, 'eval_runtime': 0.184, 'eval_samples_per_second': 10.869, 'eval_steps_per_second': 5.435, 'epoch': 3.0}\n", + "{'train_runtime': 1.978, 'train_samples_per_second': 3.033, 'train_steps_per_second': 3.033, 'train_loss': 2.033644914627075, 'epoch': 3.0}\n", + "disney appointment\n", + "{'before': 118.82615661621094, 'after': 118.42012786865234}\n", + "{'loss': 2.0357, 'learning_rate': 0.001, 'epoch': 0.5}\n", + "{'loss': 1.9873, 'learning_rate': 0.0008, 'epoch': 1.0}\n", + "{'eval_loss': 1.807045817375183, 'eval_runtime': 0.1406, 'eval_samples_per_second': 14.221, 'eval_steps_per_second': 7.11, 'epoch': 1.0}\n", + "{'loss': 2.0176, 'learning_rate': 0.0006, 'epoch': 1.5}\n", + "{'loss': 1.9243, 'learning_rate': 0.0004, 'epoch': 2.0}\n", + "{'eval_loss': 1.7954585552215576, 'eval_runtime': 0.1396, 'eval_samples_per_second': 14.328, 'eval_steps_per_second': 7.164, 'epoch': 2.0}\n", + "{'loss': 1.9109, 'learning_rate': 0.0002, 'epoch': 2.5}\n", + "{'loss': 1.9423, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 1.7919256687164307, 'eval_runtime': 0.14, 'eval_samples_per_second': 14.289, 'eval_steps_per_second': 7.145, 'epoch': 3.0}\n", + "{'train_runtime': 1.5666, 'train_samples_per_second': 3.83, 'train_steps_per_second': 3.83, 'train_loss': 1.969655990600586, 'epoch': 3.0}\n", + "fake ai hoax paper\n", + "{'before': 7.766979217529297, 'after': 7.697228908538818}\n", + "{'loss': 2.4331, 'learning_rate': 0.0005, 'epoch': 0.2}\n", + "{'loss': 2.9004, 'learning_rate': 0.001, 'epoch': 0.4}\n", + "{'loss': 3.5675, 'learning_rate': 0.0009230769230769232, 'epoch': 0.6}\n", + "{'loss': 3.3972, 'learning_rate': 0.0008461538461538462, 'epoch': 0.8}\n", + "{'loss': 3.5431, 'learning_rate': 0.0007692307692307693, 'epoch': 1.0}\n", + "{'eval_loss': 3.0353567600250244, 'eval_runtime': 0.8628, 'eval_samples_per_second': 6.954, 'eval_steps_per_second': 1.159, 'epoch': 1.0}\n", + "{'loss': 3.4732, 'learning_rate': 0.0006923076923076923, 'epoch': 1.2}\n", + "{'loss': 3.5319, 'learning_rate': 0.0006153846153846154, 'epoch': 1.4}\n", + "{'loss': 2.7887, 'learning_rate': 0.0005384615384615384, 'epoch': 1.6}\n", + "{'loss': 2.3222, 'learning_rate': 0.0004615384615384616, 'epoch': 1.8}\n", + "{'loss': 3.3527, 'learning_rate': 0.00038461538461538467, 'epoch': 2.0}\n", + "{'eval_loss': 3.0194509029388428, 'eval_runtime': 0.7424, 'eval_samples_per_second': 8.082, 'eval_steps_per_second': 1.347, 'epoch': 2.0}\n", + "{'loss': 2.2585, 'learning_rate': 0.0003076923076923077, 'epoch': 2.2}\n", + "{'loss': 3.3084, 'learning_rate': 0.0002307692307692308, 'epoch': 2.4}\n", + "{'loss': 3.4762, 'learning_rate': 0.00015384615384615385, 'epoch': 2.6}\n", + "{'loss': 3.2907, 'learning_rate': 7.692307692307693e-05, 'epoch': 2.8}\n", + "{'loss': 2.7338, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 3.014026641845703, 'eval_runtime': 0.7435, 'eval_samples_per_second': 8.07, 'eval_steps_per_second': 1.345, 'epoch': 3.0}\n", + "{'train_runtime': 7.2582, 'train_samples_per_second': 2.067, 'train_steps_per_second': 2.067, 'train_loss': 3.09183349609375, 'epoch': 3.0}\n", + "buzzfeed foi fauci emails 2023\n", + "{'before': 23.3094425201416, 'after': 22.406410217285156}\n", + "{'loss': 2.6779, 'learning_rate': 0.001, 'epoch': 0.5}\n", + "{'loss': 2.4325, 'learning_rate': 0.0008, 'epoch': 1.0}\n", + "{'eval_loss': 2.7339022159576416, 'eval_runtime': 0.2193, 'eval_samples_per_second': 9.121, 'eval_steps_per_second': 4.561, 'epoch': 1.0}\n", + "{'loss': 2.6596, 'learning_rate': 0.0006, 'epoch': 1.5}\n", + "{'loss': 2.3446, 'learning_rate': 0.0004, 'epoch': 2.0}\n", + "{'eval_loss': 2.730224609375, 'eval_runtime': 0.2245, 'eval_samples_per_second': 8.91, 'eval_steps_per_second': 4.455, 'epoch': 2.0}\n", + "{'loss': 2.3111, 'learning_rate': 0.0002, 'epoch': 2.5}\n", + "{'loss': 2.5791, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 2.729649543762207, 'eval_runtime': 0.2204, 'eval_samples_per_second': 9.076, 'eval_steps_per_second': 4.538, 'epoch': 3.0}\n", + "{'train_runtime': 2.2643, 'train_samples_per_second': 2.65, 'train_steps_per_second': 2.65, 'train_loss': 2.500802000363668, 'epoch': 3.0}\n", + "harvard announcment caplain israel hamas\n", + "{'before': 45.347354888916016, 'after': 45.12727355957031}\n", + "{'loss': 2.6223, 'learning_rate': 0.001, 'epoch': 0.5}\n", + "{'loss': 2.4621, 'learning_rate': 0.0008, 'epoch': 1.0}\n", + "{'eval_loss': 3.127470016479492, 'eval_runtime': 0.378, 'eval_samples_per_second': 5.291, 'eval_steps_per_second': 2.645, 'epoch': 1.0}\n", + "{'loss': 2.5923, 'learning_rate': 0.0006, 'epoch': 1.5}\n", + "{'loss': 2.4313, 'learning_rate': 0.0004, 'epoch': 2.0}\n", + "{'eval_loss': 3.115180253982544, 'eval_runtime': 0.2642, 'eval_samples_per_second': 7.569, 'eval_steps_per_second': 3.785, 'epoch': 2.0}\n", + "{'loss': 2.3652, 'learning_rate': 0.0002, 'epoch': 2.5}\n", + "{'loss': 2.5058, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 3.1118650436401367, 'eval_runtime': 0.2632, 'eval_samples_per_second': 7.6, 'eval_steps_per_second': 3.8, 'epoch': 3.0}\n", + "{'train_runtime': 2.9644, 'train_samples_per_second': 2.024, 'train_steps_per_second': 2.024, 'train_loss': 2.4964850743611655, 'epoch': 3.0}\n", + "How to Catch an AI Liar\n", + "{'before': 28.949859619140625, 'after': 28.0087890625}\n", + "{'loss': 3.5646, 'learning_rate': 0.0005, 'epoch': 0.2}\n", + "{'loss': 2.8252, 'learning_rate': 0.001, 'epoch': 0.4}\n", + "{'loss': 2.0116, 'learning_rate': 0.0009230769230769232, 'epoch': 0.6}\n", + "{'loss': 2.7551, 'learning_rate': 0.0008461538461538462, 'epoch': 0.8}\n", + "{'loss': 2.4442, 'learning_rate': 0.0007692307692307693, 'epoch': 1.0}\n", + "{'eval_loss': 2.635437488555908, 'eval_runtime': 0.7632, 'eval_samples_per_second': 6.552, 'eval_steps_per_second': 1.31, 'epoch': 1.0}\n", + "{'loss': 1.9103, 'learning_rate': 0.0006923076923076923, 'epoch': 1.2}\n", + "{'loss': 2.4336, 'learning_rate': 0.0006153846153846154, 'epoch': 1.4}\n", + "{'loss': 2.7349, 'learning_rate': 0.0005384615384615384, 'epoch': 1.6}\n", + "{'loss': 3.4216, 'learning_rate': 0.0004615384615384616, 'epoch': 1.8}\n", + "{'loss': 2.6993, 'learning_rate': 0.00038461538461538467, 'epoch': 2.0}\n", + "{'eval_loss': 2.623994827270508, 'eval_runtime': 0.6368, 'eval_samples_per_second': 7.852, 'eval_steps_per_second': 1.57, 'epoch': 2.0}\n", + "{'loss': 3.3393, 'learning_rate': 0.0003076923076923077, 'epoch': 2.2}\n", + "{'loss': 1.8571, 'learning_rate': 0.0002307692307692308, 'epoch': 2.4}\n", + "{'loss': 2.3943, 'learning_rate': 0.00015384615384615385, 'epoch': 2.6}\n", + "{'loss': 2.6463, 'learning_rate': 7.692307692307693e-05, 'epoch': 2.8}\n", + "{'loss': 2.6925, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 2.6198740005493164, 'eval_runtime': 0.636, 'eval_samples_per_second': 7.862, 'eval_steps_per_second': 1.572, 'epoch': 3.0}\n", + "{'train_runtime': 6.4124, 'train_samples_per_second': 2.339, 'train_steps_per_second': 2.339, 'train_loss': 2.648661724726359, 'epoch': 3.0}\n", + "LK-99-en\n", + "{'before': 14.513845443725586, 'after': 14.066093444824219}\n", + "{'loss': 2.9979, 'learning_rate': 0.0005, 'epoch': 0.17}\n", + "{'loss': 2.0904, 'learning_rate': 0.001, 'epoch': 0.33}\n", + "{'loss': 2.7862, 'learning_rate': 0.0009375, 'epoch': 0.5}\n", + "{'loss': 2.4246, 'learning_rate': 0.000875, 'epoch': 0.67}\n", + "{'loss': 2.6095, 'learning_rate': 0.0008125000000000001, 'epoch': 0.83}\n", + "{'loss': 2.5655, 'learning_rate': 0.00075, 'epoch': 1.0}\n", + "{'eval_loss': 2.335665464401245, 'eval_runtime': 0.9768, 'eval_samples_per_second': 7.166, 'eval_steps_per_second': 1.024, 'epoch': 1.0}\n", + "{'loss': 2.3562, 'learning_rate': 0.0006875, 'epoch': 1.17}\n", + "{'loss': 2.8196, 'learning_rate': 0.000625, 'epoch': 1.33}\n", + "{'loss': 2.5404, 'learning_rate': 0.0005625000000000001, 'epoch': 1.5}\n", + "{'loss': 2.4861, 'learning_rate': 0.0005, 'epoch': 1.67}\n", + "{'loss': 2.6823, 'learning_rate': 0.0004375, 'epoch': 1.83}\n", + "{'loss': 2.0126, 'learning_rate': 0.000375, 'epoch': 2.0}\n", + "{'eval_loss': 2.320927858352661, 'eval_runtime': 0.867, 'eval_samples_per_second': 8.074, 'eval_steps_per_second': 1.153, 'epoch': 2.0}\n", + "{'loss': 2.4835, 'learning_rate': 0.0003125, 'epoch': 2.17}\n", + "{'loss': 2.5887, 'learning_rate': 0.00025, 'epoch': 2.33}\n", + "{'loss': 2.7585, 'learning_rate': 0.0001875, 'epoch': 2.5}\n", + "{'loss': 2.4708, 'learning_rate': 0.000125, 'epoch': 2.67}\n", + "{'loss': 2.2034, 'learning_rate': 6.25e-05, 'epoch': 2.83}\n", + "{'loss': 1.9709, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 2.3152239322662354, 'eval_runtime': 0.8652, 'eval_samples_per_second': 8.091, 'eval_steps_per_second': 1.156, 'epoch': 3.0}\n", + "{'train_runtime': 8.6099, 'train_samples_per_second': 2.091, 'train_steps_per_second': 2.091, 'train_loss': 2.4914957218699985, 'epoch': 3.0}\n", + "LK-99-es\n", + "{'before': 11.415018081665039, 'after': 10.97294807434082}\n", + "{'loss': 1.8845, 'learning_rate': 0.0003333333333333333, 'epoch': 0.11}\n", + "{'loss': 1.9495, 'learning_rate': 0.0006666666666666666, 'epoch': 0.22}\n", + "{'loss': 1.9686, 'learning_rate': 0.001, 'epoch': 0.33}\n", + "{'loss': 1.9168, 'learning_rate': 0.0009583333333333334, 'epoch': 0.44}\n", + "{'loss': 1.9844, 'learning_rate': 0.0009166666666666666, 'epoch': 0.56}\n", + "{'loss': 1.9139, 'learning_rate': 0.000875, 'epoch': 0.67}\n", + "{'loss': 1.8329, 'learning_rate': 0.0008333333333333334, 'epoch': 0.78}\n", + "{'loss': 1.8556, 'learning_rate': 0.0007916666666666666, 'epoch': 0.89}\n", + "{'loss': 1.8869, 'learning_rate': 0.0007916666666666666, 'epoch': 1.0}\n", + "{'eval_loss': 1.836249828338623, 'eval_runtime': 1.2543, 'eval_samples_per_second': 7.175, 'eval_steps_per_second': 1.595, 'epoch': 1.0}\n", + "{'loss': 1.8902, 'learning_rate': 0.00075, 'epoch': 1.11}\n", + "{'loss': 1.8931, 'learning_rate': 0.0007083333333333334, 'epoch': 1.22}\n", + "{'loss': 1.8021, 'learning_rate': 0.0006666666666666666, 'epoch': 1.33}\n", + "{'loss': 1.884, 'learning_rate': 0.000625, 'epoch': 1.44}\n", + "{'loss': 1.7923, 'learning_rate': 0.0005833333333333334, 'epoch': 1.56}\n", + "{'loss': 1.848, 'learning_rate': 0.0005416666666666666, 'epoch': 1.67}\n", + "{'loss': 1.8103, 'learning_rate': 0.0005, 'epoch': 1.78}\n", + "{'loss': 1.9024, 'learning_rate': 0.0004583333333333333, 'epoch': 1.89}\n", + "{'loss': 1.9309, 'learning_rate': 0.0004166666666666667, 'epoch': 2.0}\n", + "{'eval_loss': 1.829906702041626, 'eval_runtime': 1.1467, 'eval_samples_per_second': 7.849, 'eval_steps_per_second': 1.744, 'epoch': 2.0}\n", + "{'loss': 1.9011, 'learning_rate': 0.000375, 'epoch': 2.11}\n", + "{'loss': 1.8506, 'learning_rate': 0.0003333333333333333, 'epoch': 2.22}\n", + "{'loss': 1.8036, 'learning_rate': 0.0002916666666666667, 'epoch': 2.33}\n", + "{'loss': 1.828, 'learning_rate': 0.00025, 'epoch': 2.44}\n", + "{'loss': 1.9094, 'learning_rate': 0.00020833333333333335, 'epoch': 2.56}\n", + "{'loss': 1.8678, 'learning_rate': 0.00016666666666666666, 'epoch': 2.67}\n", + "{'loss': 1.8555, 'learning_rate': 0.000125, 'epoch': 2.78}\n", + "{'loss': 1.7289, 'learning_rate': 8.333333333333333e-05, 'epoch': 2.89}\n", + "{'loss': 1.7859, 'learning_rate': 4.1666666666666665e-05, 'epoch': 3.0}\n", + "{'eval_loss': 1.8297154903411865, 'eval_runtime': 1.1477, 'eval_samples_per_second': 7.841, 'eval_steps_per_second': 1.743, 'epoch': 3.0}\n", + "{'train_runtime': 12.5295, 'train_samples_per_second': 2.155, 'train_steps_per_second': 2.155, 'train_loss': 1.8695231985162806, 'epoch': 3.0}\n", + "Lorem ipsum\n", + "{'before': 6.564840316772461, 'after': 6.268791675567627}\n", + "{'loss': 2.2808, 'learning_rate': 0.001, 'epoch': 0.5}\n", + "{'loss': 2.264, 'learning_rate': 0.0008, 'epoch': 1.0}\n", + "{'eval_loss': 2.300767183303833, 'eval_runtime': 0.1412, 'eval_samples_per_second': 14.167, 'eval_steps_per_second': 7.084, 'epoch': 1.0}\n", + "{'loss': 2.1983, 'learning_rate': 0.0006, 'epoch': 1.5}\n", + "{'loss': 2.1913, 'learning_rate': 0.0004, 'epoch': 2.0}\n", + "{'eval_loss': 2.2839250564575195, 'eval_runtime': 0.1403, 'eval_samples_per_second': 14.254, 'eval_steps_per_second': 7.127, 'epoch': 2.0}\n", + "{'loss': 2.149, 'learning_rate': 0.0002, 'epoch': 2.5}\n", + "{'loss': 2.095, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 2.2791788578033447, 'eval_runtime': 0.1407, 'eval_samples_per_second': 14.211, 'eval_steps_per_second': 7.105, 'epoch': 3.0}\n", + "{'train_runtime': 1.5544, 'train_samples_per_second': 3.86, 'train_steps_per_second': 3.86, 'train_loss': 2.196397304534912, 'epoch': 3.0}\n", + "openai board ann\n", + "{'before': 55.808502197265625, 'after': 54.66792297363281}\n", + "{'loss': 2.8464, 'learning_rate': 0.001, 'epoch': 0.5}\n", + "{'loss': 2.4796, 'learning_rate': 0.0008, 'epoch': 1.0}\n", + "{'eval_loss': 2.501676082611084, 'eval_runtime': 0.3861, 'eval_samples_per_second': 5.18, 'eval_steps_per_second': 2.59, 'epoch': 1.0}\n", + "{'loss': 2.8062, 'learning_rate': 0.0006, 'epoch': 1.5}\n", + "{'loss': 2.4146, 'learning_rate': 0.0004, 'epoch': 2.0}\n", + "{'eval_loss': 2.4917240142822266, 'eval_runtime': 0.2752, 'eval_samples_per_second': 7.268, 'eval_steps_per_second': 3.634, 'epoch': 2.0}\n", + "{'loss': 2.356, 'learning_rate': 0.0002, 'epoch': 2.5}\n", + "{'loss': 2.7228, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 2.488405704498291, 'eval_runtime': 0.2661, 'eval_samples_per_second': 7.515, 'eval_steps_per_second': 3.757, 'epoch': 3.0}\n", + "{'train_runtime': 3.0083, 'train_samples_per_second': 1.994, 'train_steps_per_second': 1.994, 'train_loss': 2.60427188873291, 'epoch': 3.0}\n", + "weak to strong\n", + "{'before': 46.764183044433594, 'after': 46.40473556518555}\n", + "{'loss': 2.7259, 'learning_rate': 0.001, 'epoch': 0.5}\n", + "{'loss': 2.7937, 'learning_rate': 0.0008, 'epoch': 1.0}\n", + "{'eval_loss': 2.7441396713256836, 'eval_runtime': 0.1515, 'eval_samples_per_second': 13.205, 'eval_steps_per_second': 6.603, 'epoch': 1.0}\n", + "{'loss': 2.6661, 'learning_rate': 0.0006, 'epoch': 1.5}\n", + "{'loss': 2.6998, 'learning_rate': 0.0004, 'epoch': 2.0}\n", + "{'eval_loss': 2.74137282371521, 'eval_runtime': 0.1514, 'eval_samples_per_second': 13.211, 'eval_steps_per_second': 6.605, 'epoch': 2.0}\n", + "{'loss': 2.6949, 'learning_rate': 0.0002, 'epoch': 2.5}\n", + "{'loss': 2.5599, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 2.7393088340759277, 'eval_runtime': 0.1558, 'eval_samples_per_second': 12.833, 'eval_steps_per_second': 6.416, 'epoch': 3.0}\n", + "{'train_runtime': 1.6635, 'train_samples_per_second': 3.607, 'train_steps_per_second': 3.607, 'train_loss': 2.690062483151754, 'epoch': 3.0}\n", + "politics is the mind-killer\n", + "{'before': 247.5515594482422, 'after': 245.82681274414062}\n", + "{'loss': 1.8812, 'learning_rate': 0.001, 'epoch': 0.5}\n", + "{'loss': 2.2442, 'learning_rate': 0.0008, 'epoch': 1.0}\n", + "{'eval_loss': 2.4278409481048584, 'eval_runtime': 0.0735, 'eval_samples_per_second': 27.196, 'eval_steps_per_second': 13.598, 'epoch': 1.0}\n", + "{'loss': 1.8079, 'learning_rate': 0.0006, 'epoch': 1.5}\n", + "{'loss': 2.1305, 'learning_rate': 0.0004, 'epoch': 2.0}\n", + "{'eval_loss': 2.4188129901885986, 'eval_runtime': 0.0764, 'eval_samples_per_second': 26.194, 'eval_steps_per_second': 13.097, 'epoch': 2.0}\n", + "{'loss': 2.1037, 'learning_rate': 0.0002, 'epoch': 2.5}\n", + "{'loss': 1.6808, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 2.4169728755950928, 'eval_runtime': 0.0738, 'eval_samples_per_second': 27.114, 'eval_steps_per_second': 13.557, 'epoch': 3.0}\n", + "{'train_runtime': 0.9463, 'train_samples_per_second': 6.341, 'train_steps_per_second': 6.341, 'train_loss': 1.9747143586476643, 'epoch': 3.0}\n", + "statement by whitehouse on passing\n", + "{'before': 29.197132110595703, 'after': 28.9396915435791}\n", + "{'loss': 2.5398, 'learning_rate': 0.0003333333333333333, 'epoch': 0.1}\n", + "{'loss': 2.563, 'learning_rate': 0.0006666666666666666, 'epoch': 0.2}\n", + "{'loss': 2.362, 'learning_rate': 0.001, 'epoch': 0.3}\n", + "{'loss': 2.4908, 'learning_rate': 0.0009629629629629629, 'epoch': 0.4}\n", + "{'loss': 2.8433, 'learning_rate': 0.000925925925925926, 'epoch': 0.5}\n", + "{'loss': 3.1541, 'learning_rate': 0.0008888888888888888, 'epoch': 0.6}\n", + "{'loss': 2.9383, 'learning_rate': 0.0008518518518518519, 'epoch': 0.7}\n", + "{'loss': 2.6576, 'learning_rate': 0.0008148148148148148, 'epoch': 0.8}\n", + "{'loss': 2.6327, 'learning_rate': 0.0007777777777777778, 'epoch': 0.9}\n", + "{'loss': 2.6943, 'learning_rate': 0.0007407407407407407, 'epoch': 1.0}\n", + "{'eval_loss': 2.42354416847229, 'eval_runtime': 1.5423, 'eval_samples_per_second': 7.132, 'eval_steps_per_second': 1.297, 'epoch': 1.0}\n", + "{'loss': 2.3882, 'learning_rate': 0.0007037037037037038, 'epoch': 1.1}\n", + "{'loss': 2.738, 'learning_rate': 0.0006666666666666666, 'epoch': 1.2}\n", + "{'loss': 2.5917, 'learning_rate': 0.0006296296296296296, 'epoch': 1.3}\n", + "{'loss': 2.8582, 'learning_rate': 0.0005925925925925926, 'epoch': 1.4}\n", + "{'loss': 3.0774, 'learning_rate': 0.0005555555555555556, 'epoch': 1.5}\n", + "{'loss': 2.266, 'learning_rate': 0.0005185185185185185, 'epoch': 1.6}\n", + "{'loss': 2.4382, 'learning_rate': 0.00048148148148148144, 'epoch': 1.7}\n", + "{'loss': 2.6197, 'learning_rate': 0.0004444444444444444, 'epoch': 1.8}\n", + "{'loss': 2.3982, 'learning_rate': 0.0004074074074074074, 'epoch': 1.9}\n", + "{'loss': 2.5713, 'learning_rate': 0.00037037037037037035, 'epoch': 2.0}\n", + "{'eval_loss': 2.4057815074920654, 'eval_runtime': 1.6782, 'eval_samples_per_second': 6.555, 'eval_steps_per_second': 1.192, 'epoch': 2.0}\n", + "{'loss': 2.6508, 'learning_rate': 0.0003333333333333333, 'epoch': 2.1}\n", + "{'loss': 2.4209, 'learning_rate': 0.0002962962962962963, 'epoch': 2.2}\n", + "{'loss': 3.0109, 'learning_rate': 0.00025925925925925926, 'epoch': 2.3}\n", + "{'loss': 2.561, 'learning_rate': 0.0002222222222222222, 'epoch': 2.4}\n", + "{'loss': 2.6675, 'learning_rate': 0.00018518518518518518, 'epoch': 2.5}\n", + "{'loss': 2.4846, 'learning_rate': 0.00014814814814814815, 'epoch': 2.6}\n", + "{'loss': 2.7888, 'learning_rate': 0.0001111111111111111, 'epoch': 2.7}\n", + "{'loss': 2.327, 'learning_rate': 7.407407407407407e-05, 'epoch': 2.8}\n", + "{'loss': 2.3715, 'learning_rate': 3.7037037037037037e-05, 'epoch': 2.9}\n", + "{'loss': 2.2409, 'learning_rate': 0.0, 'epoch': 3.0}\n", + "{'eval_loss': 2.399984121322632, 'eval_runtime': 1.608, 'eval_samples_per_second': 6.841, 'eval_steps_per_second': 1.244, 'epoch': 3.0}\n", + "{'train_runtime': 15.0837, 'train_samples_per_second': 1.989, 'train_steps_per_second': 1.989, 'train_loss': 2.6115529775619506, 'epoch': 3.0}\n", + "Gemini to Q*\n", + "{'before': 11.756383895874023, 'after': 11.190644264221191}\n" + ] + } + ], + "source": [ + "data = []\n", + "for sample in samples:\n", + " r = learn_sample(sample)\n", + " print(sample['title'])\n", + " print(dict(before=r['before'], after=r['after']))\n", + " data.append(dict(**r, **sample))" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# example training\n", + "df_hist = data[-1]['hist']#.groupby('epoch').last().dropna(axis=1).drop(columns=['step'])\n", + "df_hist['loss'].plot(label='train')\n", + "plt.twinx()\n", + "df_hist['eval_loss'].plot(c='b', label='eval')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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5b/t27dPY9rZze126/LLL9ebb775ru/hOgis0xkDroPAaG1t1Re/+EWtWbNG5513nu699165XK5/+F6ug8CZzDhwLQRGXV2dbrrpJpWUlOj888/XQw899K7vtdK14DTtK0+h7373uyovL9fDDz+spqYm3XnnnUpPT9cll1xyyvuGhoZ0880364orrtB///d/67e//a3++Z//WX/5y18UHh5uUvrZ4XTHQJJqamp033336Zxzzpl4LSYmZjrjzloul0u33367qqqq3vU9XAeBdTpjIHEdBIJhGPriF7+o6OhoPfroo+rt7dXdd98tu92uO++885T3ch0EzmTGQeJaCASfz6ebb75ZRUVFeuaZZ1RXV6evfOUrSklJ0RVXXHHKey13LRgz3ODgoFFUVGTs3r174rX777/fuP7669/x3ieffNLYsmWL4fP5DMMwDJ/PZ1x44YXGU089NW15Z6PJjIHL5TIKCwuN48ePT2fEOaGqqsr40Ic+ZFxxxRVGfn7+KePxdlwHgXO6Y8B1EBjV1dVGfn6+0d7ePvHaCy+8YGzYsOEd7+U6CJzJjAPXQmC0trYaX/rSl4z+/v6J12699Vbja1/72jvea7VrYcbfyj969Kg8Ho9KSkomXlu5cqUOHDggn893ynsPHDiglStXymazSZJsNptWrFih/fv3T2fkWWcyY3D8+HHZbDZlZWVNd8xZb8+ePVq7dq0ef/zx93wf10HgnO4YcB0ERlJSkh566CElJiae8vrAwMA73st1EDiTGQeuhcBITk7W97//fUVGRsowDJWWluqtt97SmjVr3vFeq10LM/5Wfnt7u+Li4hQcHDzxWmJiolwul3p6ehQfH3/KexcuXHjKr09ISHjfW254b5MZg+PHjysyMlJ33HGH9uzZo9TUVH3hC1/Qpk2bzIg+q1x33XWn9T6ug8A53THgOgiM6OhonXfeeRM/9/l8euSRR7Ru3bp3vJfrIHAmMw5cC4G3ZcsWNTU1afPmzbr44ovf8XGrXQszfsZ0eHj4lEIkaeLnbrf7tN779+/D5ExmDI4fP66RkRFt2LBBDz30kDZt2qRbbrlFhw4dmra8cx3Xgfm4DqbHfffdp8OHD+u22257x8e4DqbPe40D10Lg/fCHP9QDDzygI0eO6N57733Hx612Lcz4GdOQkJB3/OaN/zw0NPS03vv378PkTGYM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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_hist['learning_rate'].plot(logy=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### Perplexity\n", + "\n", + "Perplexity measures how well a language model predicts a text sample. Lower is better\n", + "\n", + "It’s calculated as the average number of bits per word a model needs to represent the same\n", + "\n", + "https://huggingface.co/docs/transformers/perplexity\n", + "https://thegradient.pub/understanding-evaluation-metrics-for-language-models/\n", + "\n", + "The **improvement** column, is perplexity decrease" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
beforeafterlenimprovement%improvementnovellearnableBS
title
cicero from ibois, Philippe (2012-06-03).72.58737267.744194137070.0667224.843178TrueTrueFalse
politics is the mind-killer247.551559245.82681331580.0069671.724747TrueFalseFalse
openai board ann55.80850254.66792329910.0204371.140579TrueTrueFalse
How to Catch an AI Liar28.94986028.00878954640.0325070.941071TrueTrueFalse
buzzfeed foi fauci emails 202323.30944322.406410136400.0387410.903032TrueTrueFalse
Gemini to Q*11.75638411.190644426040.0481220.565740FalseTrueFalse
LK-99-en14.51384514.066093154320.0308500.447752FalseTrueFalse
LK-99-es11.41501810.972948129700.0387270.442070FalseTrueFalse
disney appointment118.826157118.42012836530.0034170.406029TrueFalseFalse
weak to strong46.76418346.40473658110.0076860.359447TrueFalseFalse
blechley declaration17.86909117.52420477620.0193010.344887TrueFalseFalse
Lorem ipsum6.5648406.268792196490.0450960.296049FalseTrueTrue
statement by whitehouse on passing29.19713228.93969216410.0088170.257441TrueFalseTrue
harvard announcment caplain israel hamas45.34735545.12727442470.0048530.220081TrueFalseTrue
fake ai hoax paper7.7669797.69722932900.0089800.069750FalseFalseTrue
\n", + "
" + ], + "text/plain": [ + " before after len \\\n", + "title \n", + "cicero from ibois, Philippe (2012-06-03). 72.587372 67.744194 13707 \n", + "politics is the mind-killer 247.551559 245.826813 3158 \n", + "openai board ann 55.808502 54.667923 2991 \n", + "How to Catch an AI Liar 28.949860 28.008789 5464 \n", + "buzzfeed foi fauci emails 2023 23.309443 22.406410 13640 \n", + "Gemini to Q* 11.756384 11.190644 42604 \n", + "LK-99-en 14.513845 14.066093 15432 \n", + "LK-99-es 11.415018 10.972948 12970 \n", + "disney appointment 118.826157 118.420128 3653 \n", + "weak to strong 46.764183 46.404736 5811 \n", + "blechley declaration 17.869091 17.524204 7762 \n", + "Lorem ipsum 6.564840 6.268792 19649 \n", + "statement by whitehouse on passing 29.197132 28.939692 1641 \n", + "harvard announcment caplain israel hamas 45.347355 45.127274 4247 \n", + "fake ai hoax paper 7.766979 7.697229 3290 \n", + "\n", + " improvement% improvement novel \\\n", + "title \n", + "cicero from ibois, Philippe (2012-06-03). 0.066722 4.843178 True \n", + "politics is the mind-killer 0.006967 1.724747 True \n", + "openai board ann 0.020437 1.140579 True \n", + "How to Catch an AI Liar 0.032507 0.941071 True \n", + "buzzfeed foi fauci emails 2023 0.038741 0.903032 True \n", + "Gemini to Q* 0.048122 0.565740 False \n", + "LK-99-en 0.030850 0.447752 False \n", + "LK-99-es 0.038727 0.442070 False \n", + "disney appointment 0.003417 0.406029 True \n", + "weak to strong 0.007686 0.359447 True \n", + "blechley declaration 0.019301 0.344887 True \n", + "Lorem ipsum 0.045096 0.296049 False \n", + "statement by whitehouse on passing 0.008817 0.257441 True \n", + "harvard announcment caplain israel hamas 0.004853 0.220081 True \n", + "fake ai hoax paper 0.008980 0.069750 False \n", + "\n", + " learnable BS \n", + "title \n", + "cicero from ibois, Philippe (2012-06-03). True False \n", + "politics is the mind-killer False False \n", + "openai board ann True False \n", + "How to Catch an AI Liar True False \n", + "buzzfeed foi fauci emails 2023 True False \n", + "Gemini to Q* True False \n", + "LK-99-en True False \n", + "LK-99-es True False \n", + "disney appointment False False \n", + "weak to strong False False \n", + "blechley declaration False False \n", + "Lorem ipsum True True \n", + "statement by whitehouse on passing False True \n", + "harvard announcment caplain israel hamas False True \n", + "fake ai hoax paper False True " + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_res = pd.DataFrame(data)\n", + "df_res['len'] = df_res.content.str.len()\n", + "df_res = df_res[['before', 'after', 'title', 'len']].set_index('title')\n", + "df_res['improvement%'] = (df_res['before'] - df_res['after'])/ df_res['before']\n", + "df_res['improvement'] = (df_res['before'] - df_res['after'])\n", + "df_res['novel'] = df_res['before'] > 15\n", + "df_res['learnable'] = df_res['improvement%'] > 0.02\n", + "\n", + "# We can measure the final score using learnable * novel\n", + "# df_res['BS'] = ~df_res['learnable'] | ~df_res['novel']\n", + "# Or just absolute perplexity improvement\n", + "df_res['BS'] = df_res['improvement'] < .3\n", + "df_res = df_res.sort_values('improvement', ascending=False)\n", + "df_res" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "# df_res.sort_values('improvement%', ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "| title | before | after | len | improvement% | improvement | novel | learnable | BS |\n", + "|:------------------------------------------|----------:|----------:|------:|---------------:|--------------:|:--------|:------------|:------|\n", + "| cicero from ibois, Philippe (2012-06-03). | 72.5874 | 67.7442 | 13707 | 0.066722 | 4.84318 | True | True | False |\n", + "| politics is the mind-killer | 247.552 | 245.827 | 3158 | 0.00696722 | 1.72475 | True | False | False |\n", + "| openai board ann | 55.8085 | 54.6679 | 2991 | 0.0204374 | 1.14058 | True | True | False |\n", + "| How to Catch an AI Liar | 28.9499 | 28.0088 | 5464 | 0.0325069 | 0.941071 | True | True | True |\n", + "| buzzfeed foi fauci emails 2023 | 23.3094 | 22.4064 | 13640 | 0.0387411 | 0.903032 | True | True | True |\n", + "| Gemini to Q* | 11.7564 | 11.1906 | 42604 | 0.0481219 | 0.56574 | False | True | True |\n", + "| LK-99-en | 14.5138 | 14.0661 | 15432 | 0.03085 | 0.447752 | False | True | True |\n", + "| LK-99-es | 11.415 | 10.9729 | 12970 | 0.0387271 | 0.44207 | False | True | True |\n", + "| disney appointment | 118.826 | 118.42 | 3653 | 0.003417 | 0.406029 | True | False | True |\n", + "| weak to strong | 46.7642 | 46.4047 | 5811 | 0.00768638 | 0.359447 | True | False | True |\n", + "| blechley declaration | 17.8691 | 17.5242 | 7762 | 0.0193007 | 0.344887 | True | False | True |\n", + "| Lorem ipsum | 6.56484 | 6.26879 | 19649 | 0.0450961 | 0.296049 | False | True | True |\n", + "| statement by whitehouse on passing | 29.1971 | 28.9397 | 1641 | 0.00881732 | 0.257441 | True | False | True |\n", + "| harvard announcment caplain israel hamas | 45.3474 | 45.1273 | 4247 | 0.00485323 | 0.220081 | True | False | True |\n", + "| fake ai hoax paper | 7.76698 | 7.69723 | 3290 | 0.00898037 | 0.0697503 | False | False | True |\n" + ] + } + ], + "source": [ + "print(df_res.to_markdown())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# DEBUG" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import display, HTML, Markdown\n", + "import torch\n", + "\n", + "@torch.no_grad()\n", + "def gen(model, inputs, tokenizer, clean=True):\n", + " s = model.generate(\n", + " input_ids=inputs[\"input_ids\"][None, :].to(model.device),\n", + " attention_mask=inputs[\"attention_mask\"][None, :].to(model.device),\n", + " use_cache=False,\n", + " max_new_tokens=100,\n", + " min_new_tokens=100,\n", + " do_sample=False,\n", + " early_stopping=False,\n", + " )\n", + " input_l = inputs[\"input_ids\"].shape[0]\n", + " tokenizer_kwargs=dict(clean_up_tokenization_spaces=clean, skip_special_tokens=clean)\n", + " old = tokenizer.decode(\n", + " s[0, :input_l][-100:], **tokenizer_kwargs\n", + " )\n", + " new = tokenizer.decode(\n", + " s[0, input_l:], **tokenizer_kwargs\n", + " )\n", + " s_old = \"\"+old.replace('\\n', '
')\n", + " s_new = '' + new.replace('\\n', '
')+ '

'\n", + " # print(s_old, s_new)\n", + " display(HTML(f\"{s_old}{s_new}\"))\n", + " # print([old, new])\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "sample = samples[-1]\n", + "s = sample['content']\n", + "first_half = s[:len(s)//2]\n", + "second_half = s[len(s)//2:]\n", + "ds_train = Dataset.from_dict(tokenizer([first_half]))\n", + "ds_val = Dataset.from_dict(tokenizer([second_half]))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/transformers/generation/utils.py:1421: UserWarning: You have modified the pretrained model configuration to control generation. This is a deprecated strategy to control generation and will be removed soon, in a future version. Please use and modify the model generation configuration (see https://huggingface.co/docs/transformers/generation_strategies#default-text-generation-configuration )\n", + " warnings.warn(\n" + ] + }, + { + "ename": "OutOfMemoryError", + "evalue": "CUDA out of memory. Tried to allocate 1.07 GiB. GPU 0 has a total capacty of 10.75 GiB of which 612.62 MiB is free. Including non-PyTorch memory, this process has 10.15 GiB memory in use. Of the allocated memory 9.78 GiB is allocated by PyTorch, and 179.66 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mOutOfMemoryError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[25], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m model\u001b[38;5;241m.\u001b[39mdisable_adapter():\n\u001b[0;32m----> 2\u001b[0m \u001b[43mgen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mds_train\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwith_format\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mpt\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtokenizer\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/utils/_contextlib.py:115\u001b[0m, in \u001b[0;36mcontext_decorator..decorate_context\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 112\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 113\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecorate_context\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 114\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m ctx_factory():\n\u001b[0;32m--> 115\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\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", + "Cell \u001b[0;32mIn[23], line 6\u001b[0m, in \u001b[0;36mgen\u001b[0;34m(model, inputs, tokenizer, clean)\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;129m@torch\u001b[39m\u001b[38;5;241m.\u001b[39mno_grad()\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgen\u001b[39m(model, inputs, tokenizer, clean\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m):\n\u001b[0;32m----> 6\u001b[0m s \u001b[38;5;241m=\u001b[39m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_ids\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minputs\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43minput_ids\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdevice\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8\u001b[0m \u001b[43m \u001b[49m\u001b[43mattention_mask\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minputs\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mattention_mask\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdevice\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_cache\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 10\u001b[0m \u001b[43m \u001b[49m\u001b[43mmax_new_tokens\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m100\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 11\u001b[0m \u001b[43m \u001b[49m\u001b[43mmin_new_tokens\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m100\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 12\u001b[0m \u001b[43m \u001b[49m\u001b[43mdo_sample\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 13\u001b[0m \u001b[43m \u001b[49m\u001b[43mearly_stopping\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 14\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 15\u001b[0m input_l \u001b[38;5;241m=\u001b[39m inputs[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minput_ids\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m 16\u001b[0m tokenizer_kwargs\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mdict\u001b[39m(clean_up_tokenization_spaces\u001b[38;5;241m=\u001b[39mclean, skip_special_tokens\u001b[38;5;241m=\u001b[39mclean)\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/utils/_contextlib.py:115\u001b[0m, in \u001b[0;36mcontext_decorator..decorate_context\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 112\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 113\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecorate_context\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 114\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m ctx_factory():\n\u001b[0;32m--> 115\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\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/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/transformers/generation/utils.py:1606\u001b[0m, in \u001b[0;36mGenerationMixin.generate\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 1589\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39massisted_decoding(\n\u001b[1;32m 1590\u001b[0m input_ids,\n\u001b[1;32m 1591\u001b[0m assistant_model\u001b[38;5;241m=\u001b[39massistant_model,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1602\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mmodel_kwargs,\n\u001b[1;32m 1603\u001b[0m )\n\u001b[1;32m 1604\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m generation_mode \u001b[38;5;241m==\u001b[39m GenerationMode\u001b[38;5;241m.\u001b[39mGREEDY_SEARCH:\n\u001b[1;32m 1605\u001b[0m \u001b[38;5;66;03m# 11. run greedy search\u001b[39;00m\n\u001b[0;32m-> 1606\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[43mgreedy_search\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1607\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_ids\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1608\u001b[0m \u001b[43m \u001b[49m\u001b[43mlogits_processor\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlogits_processor\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1609\u001b[0m \u001b[43m \u001b[49m\u001b[43mstopping_criteria\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstopping_criteria\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1610\u001b[0m \u001b[43m \u001b[49m\u001b[43mpad_token_id\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgeneration_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpad_token_id\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1611\u001b[0m \u001b[43m \u001b[49m\u001b[43meos_token_id\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgeneration_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43meos_token_id\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1612\u001b[0m \u001b[43m \u001b[49m\u001b[43moutput_scores\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgeneration_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moutput_scores\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1613\u001b[0m \u001b[43m \u001b[49m\u001b[43mreturn_dict_in_generate\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgeneration_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreturn_dict_in_generate\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1614\u001b[0m \u001b[43m \u001b[49m\u001b[43msynced_gpus\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msynced_gpus\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1615\u001b[0m \u001b[43m \u001b[49m\u001b[43mstreamer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstreamer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1616\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mmodel_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1617\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1619\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m generation_mode \u001b[38;5;241m==\u001b[39m GenerationMode\u001b[38;5;241m.\u001b[39mCONTRASTIVE_SEARCH:\n\u001b[1;32m 1620\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m model_kwargs[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124muse_cache\u001b[39m\u001b[38;5;124m\"\u001b[39m]:\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/transformers/generation/utils.py:2454\u001b[0m, in \u001b[0;36mGenerationMixin.greedy_search\u001b[0;34m(self, input_ids, logits_processor, stopping_criteria, max_length, pad_token_id, eos_token_id, output_attentions, output_hidden_states, output_scores, return_dict_in_generate, synced_gpus, streamer, **model_kwargs)\u001b[0m\n\u001b[1;32m 2451\u001b[0m model_inputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprepare_inputs_for_generation(input_ids, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mmodel_kwargs)\n\u001b[1;32m 2453\u001b[0m \u001b[38;5;66;03m# forward pass to get next token\u001b[39;00m\n\u001b[0;32m-> 2454\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2455\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mmodel_inputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2456\u001b[0m \u001b[43m \u001b[49m\u001b[43mreturn_dict\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\u001b[1;32m 2457\u001b[0m \u001b[43m \u001b[49m\u001b[43moutput_attentions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moutput_attentions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2458\u001b[0m \u001b[43m \u001b[49m\u001b[43moutput_hidden_states\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moutput_hidden_states\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2459\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2461\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m synced_gpus \u001b[38;5;129;01mand\u001b[39;00m this_peer_finished:\n\u001b[1;32m 2462\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m \u001b[38;5;66;03m# don't waste resources running the code we don't need\u001b[39;00m\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/modules/module.py:1518\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1516\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1517\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1518\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_call_impl\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/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/modules/module.py:1527\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1522\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1523\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1524\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_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1525\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1526\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1527\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\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 1529\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1530\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m~/.cache/huggingface/modules/transformers_modules/microsoft/phi-2/d3186761bf5c4409f7679359284066c25ab668ee/modeling_phi.py:953\u001b[0m, in \u001b[0;36mPhiForCausalLM.forward\u001b[0;34m(self, input_ids, past_key_values, attention_mask, labels, **kwargs)\u001b[0m\n\u001b[1;32m 945\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\n\u001b[1;32m 946\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 947\u001b[0m input_ids: torch\u001b[38;5;241m.\u001b[39mLongTensor,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 951\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[1;32m 952\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m CausalLMOutputWithPast:\n\u001b[0;32m--> 953\u001b[0m hidden_states \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransformer\u001b[49m\u001b[43m(\u001b[49m\u001b[43minput_ids\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpast_key_values\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpast_key_values\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mattention_mask\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattention_mask\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 954\u001b[0m lm_logits \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlm_head(hidden_states)\n\u001b[1;32m 956\u001b[0m loss \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/modules/module.py:1518\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1516\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1517\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1518\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_call_impl\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/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/modules/module.py:1527\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1522\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1523\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1524\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_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1525\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1526\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1527\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\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 1529\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1530\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m~/.cache/huggingface/modules/transformers_modules/microsoft/phi-2/d3186761bf5c4409f7679359284066c25ab668ee/modeling_phi.py:915\u001b[0m, in \u001b[0;36mPhiModel.forward\u001b[0;34m(self, input_ids, past_key_values, attention_mask)\u001b[0m\n\u001b[1;32m 912\u001b[0m hidden_states \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39membd(input_ids)\n\u001b[1;32m 914\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m layer \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mh:\n\u001b[0;32m--> 915\u001b[0m hidden_states \u001b[38;5;241m=\u001b[39m \u001b[43mlayer\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 916\u001b[0m \u001b[43m \u001b[49m\u001b[43mhidden_states\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 917\u001b[0m \u001b[43m \u001b[49m\u001b[43mpast_key_values\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpast_key_values\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 918\u001b[0m \u001b[43m \u001b[49m\u001b[43mattention_mask\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattention_mask\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 919\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 921\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m hidden_states\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/modules/module.py:1518\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1516\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1517\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1518\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_call_impl\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/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/modules/module.py:1527\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1522\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1523\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1524\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_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1525\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1526\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1527\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\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 1529\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1530\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m~/.cache/huggingface/modules/transformers_modules/microsoft/phi-2/d3186761bf5c4409f7679359284066c25ab668ee/modeling_phi.py:770\u001b[0m, in \u001b[0;36mParallelBlock.forward\u001b[0;34m(self, hidden_states, past_key_values, attention_mask, **kwargs)\u001b[0m\n\u001b[1;32m 767\u001b[0m residual \u001b[38;5;241m=\u001b[39m hidden_states\n\u001b[1;32m 768\u001b[0m hidden_states \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mln(hidden_states)\n\u001b[0;32m--> 770\u001b[0m attn_outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmixer\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 771\u001b[0m \u001b[43m \u001b[49m\u001b[43mhidden_states\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 772\u001b[0m \u001b[43m \u001b[49m\u001b[43mpast_key_values\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpast_key_values\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 773\u001b[0m \u001b[43m \u001b[49m\u001b[43mattention_mask\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattention_mask\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 774\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 775\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(attn_outputs, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[1;32m 776\u001b[0m attn_outputs \u001b[38;5;241m=\u001b[39m attn_outputs[\u001b[38;5;241m0\u001b[39m]\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/modules/module.py:1518\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1516\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1517\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1518\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_call_impl\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/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/modules/module.py:1527\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1522\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1523\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1524\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_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1525\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1526\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1527\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\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 1529\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1530\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m~/.cache/huggingface/modules/transformers_modules/microsoft/phi-2/d3186761bf5c4409f7679359284066c25ab668ee/modeling_phi.py:726\u001b[0m, in \u001b[0;36mMHA.forward\u001b[0;34m(self, x, past_key_values, attention_mask, **kwargs)\u001b[0m\n\u001b[1;32m 722\u001b[0m attn_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_self_attn(x, attention_mask)\n\u001b[1;32m 723\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 724\u001b[0m \u001b[38;5;66;03m# If `past_key_values` are supplied, it means that we might have cached values and\u001b[39;00m\n\u001b[1;32m 725\u001b[0m \u001b[38;5;66;03m# could take advantage of cross-attention\u001b[39;00m\n\u001b[0;32m--> 726\u001b[0m attn_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_forward_cross_attn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpast_key_values\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mattention_mask\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 727\u001b[0m \u001b[38;5;66;03m# MQA / GQA\u001b[39;00m\n\u001b[1;32m 728\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 729\u001b[0m \u001b[38;5;66;03m# Regardless of `past_key_values` being supplied or not, it always use cross-attention\u001b[39;00m\n\u001b[1;32m 730\u001b[0m \u001b[38;5;66;03m# because `q` and `kv` lengths might be different\u001b[39;00m\n\u001b[1;32m 731\u001b[0m attn_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_cross_attn(x, past_key_values, attention_mask)\n", + "File \u001b[0;32m~/.cache/huggingface/modules/transformers_modules/microsoft/phi-2/d3186761bf5c4409f7679359284066c25ab668ee/modeling_phi.py:704\u001b[0m, in \u001b[0;36mMHA._forward_cross_attn\u001b[0;34m(self, x, past_key_values, key_padding_mask)\u001b[0m\n\u001b[1;32m 695\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcheckpointing:\n\u001b[1;32m 696\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m torch\u001b[38;5;241m.\u001b[39mutils\u001b[38;5;241m.\u001b[39mcheckpoint\u001b[38;5;241m.\u001b[39mcheckpoint(\n\u001b[1;32m 697\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minner_cross_attn,\n\u001b[1;32m 698\u001b[0m q,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 701\u001b[0m causal\u001b[38;5;241m=\u001b[39mcausal,\n\u001b[1;32m 702\u001b[0m )\n\u001b[0;32m--> 704\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[43minner_cross_attn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkey_padding_mask\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkey_padding_mask\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcausal\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcausal\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/modules/module.py:1518\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1516\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1517\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1518\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_call_impl\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/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/nn/modules/module.py:1527\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1522\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1523\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1524\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_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1525\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1526\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1527\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\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 1529\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1530\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/amp/autocast_mode.py:16\u001b[0m, in \u001b[0;36mautocast_decorator..decorate_autocast\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecorate_autocast\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m autocast_instance:\n\u001b[0;32m---> 16\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\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/media/wassname/SGIronWolf/projects5/bs_writing_detector/.venv/lib/python3.11/site-packages/torch/amp/autocast_mode.py:16\u001b[0m, in \u001b[0;36mautocast_decorator..decorate_autocast\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecorate_autocast\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m autocast_instance:\n\u001b[0;32m---> 16\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\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~/.cache/huggingface/modules/transformers_modules/microsoft/phi-2/d3186761bf5c4409f7679359284066c25ab668ee/modeling_phi.py:452\u001b[0m, in \u001b[0;36mCrossAttention.forward\u001b[0;34m(self, q, kv, causal, key_padding_mask, **kwargs)\u001b[0m\n\u001b[1;32m 448\u001b[0m causal_mask \u001b[38;5;241m=\u001b[39m cols \u001b[38;5;241m>\u001b[39m rows \u001b[38;5;241m+\u001b[39m seqlen_k \u001b[38;5;241m-\u001b[39m seqlen_q\n\u001b[1;32m 450\u001b[0m scores \u001b[38;5;241m=\u001b[39m scores\u001b[38;5;241m.\u001b[39mmasked_fill(causal_mask, \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m10000.0\u001b[39m)\n\u001b[0;32m--> 452\u001b[0m attention \u001b[38;5;241m=\u001b[39m \u001b[43mtorch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msoftmax\u001b[49m\u001b[43m(\u001b[49m\u001b[43mscores\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdim\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto\u001b[49m\u001b[43m(\u001b[49m\u001b[43mv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 453\u001b[0m attention \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdrop(attention)\n\u001b[1;32m 455\u001b[0m output \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39meinsum(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbhts,bshd->bthd\u001b[39m\u001b[38;5;124m\"\u001b[39m, attention, v)\n", + "\u001b[0;31mOutOfMemoryError\u001b[0m: CUDA out of memory. Tried to allocate 1.07 GiB. GPU 0 has a total capacty of 10.75 GiB of which 612.62 MiB is free. Including non-PyTorch memory, this process has 10.15 GiB memory in use. Of the allocated memory 9.78 GiB is allocated by PyTorch, and 179.66 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF" + ] + } + ], + "source": [ + "with model.disable_adapter():\n", + " gen(model, ds_train.with_format('pt')[0], tokenizer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gen(model, ds_train.with_format('pt')[0], tokenizer)" + ] + }, + { + "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": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "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.0rc1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/poetry.lock b/poetry.lock index 1de7441..8ee0205 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1501,6 +1501,24 @@ cli = ["fire"] docs = ["requests (>=2.0.0)"] typing = ["mypy (>=1.0.0)", "types-setuptools"] +[[package]] +name = "loguru" +version = "0.7.2" +description = "Python logging made (stupidly) simple" +optional = false +python-versions = ">=3.5" +files = [ + {file = "loguru-0.7.2-py3-none-any.whl", hash = "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb"}, + {file = "loguru-0.7.2.tar.gz", hash = "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "mypy (==v1.5.1)", "pre-commit (==3.4.0)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"] + [[package]] name = "markupsafe" version = "2.1.3" @@ -3755,6 +3773,20 @@ files = [ {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"}, ] +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +optional = false +python-versions = ">=3.5" +files = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] + +[package.extras] +dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] + [[package]] name = "xxhash" version = "3.4.1" @@ -3978,4 +4010,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "2856534c176a36679a1d86e5fd77f1008b5084ee100b22102d64a7c71eff7448" +content-hash = "82eec5aa54e741a26e88e96fb6a636dc0ec5dc91bf9a597801a70348de2fea5d" diff --git a/pyproject.toml b/pyproject.toml index 6d1817f..a196d27 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,7 @@ tabulate = "^0.9.0" lightning = "^2.1.3" matplotlib = "^3.8.0" python-frontmatter = "^1.0.1" +loguru = "^0.7.2" [[tool.poetry.source]] name = "pytorch"