{ "cells": [ { "cell_type": "code", "execution_count": null, "id": "42a0da24-c70a-4b68-8790-7f93e0e37990", "metadata": {}, "outputs": [], "source": [ "pwd" ] }, { "cell_type": "code", "execution_count": null, "id": "c595f8f0-2e4a-442b-bde8-b48dfe762355", "metadata": {}, "outputs": [], "source": [ "!pip install evaluate" ] }, { "cell_type": "code", "execution_count": null, "id": "4958f755-f0fc-40ca-b8b3-e625811d4d79", "metadata": {}, "outputs": [], "source": [ "!pip install transformers" ] }, { "cell_type": "code", "execution_count": 9, "id": "8cd636d6-84cf-4d10-826f-258c6e1646d6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting peft\n", " Downloading peft-0.13.2-py3-none-any.whl.metadata (13 kB)\n", "Requirement already satisfied: numpy>=1.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from peft) (1.24.4)\n", "Requirement already satisfied: packaging>=20.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from peft) (24.1)\n", "Requirement already satisfied: psutil in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from peft) (7.2.2)\n", "Requirement already satisfied: pyyaml in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from peft) (6.0.3)\n", "Requirement already satisfied: torch>=1.13.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from peft) (2.4.1)\n", "Requirement already satisfied: transformers in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from peft) (4.46.3)\n", "Requirement already satisfied: tqdm in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from peft) (4.67.3)\n", "Collecting accelerate>=0.21.0 (from peft)\n", " Downloading accelerate-1.0.1-py3-none-any.whl.metadata (19 kB)\n", "Requirement already satisfied: safetensors in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from peft) (0.5.3)\n", "Requirement already satisfied: huggingface-hub>=0.17.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from peft) (0.36.2)\n", "Requirement already satisfied: filelock in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from huggingface-hub>=0.17.0->peft) (3.16.1)\n", "Requirement already satisfied: fsspec>=2023.5.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from huggingface-hub>=0.17.0->peft) (2024.9.0)\n", "Requirement already satisfied: hf-xet<2.0.0,>=1.1.3 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from huggingface-hub>=0.17.0->peft) (1.4.3)\n", "Requirement already satisfied: requests in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from huggingface-hub>=0.17.0->peft) (2.32.4)\n", "Requirement already satisfied: typing-extensions>=3.7.4.3 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from huggingface-hub>=0.17.0->peft) (4.13.2)\n", "Requirement already satisfied: sympy in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (1.13.3)\n", "Requirement already satisfied: networkx in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (3.1)\n", "Requirement already satisfied: jinja2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (3.1.6)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (12.1.105)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (12.1.105)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (12.1.105)\n", "Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (9.1.0.70)\n", "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (12.1.3.1)\n", "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (11.0.2.54)\n", "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (10.3.2.106)\n", "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (11.4.5.107)\n", "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (12.1.0.106)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.20.5 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (2.20.5)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (12.1.105)\n", "Requirement already satisfied: triton==3.0.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from torch>=1.13.0->peft) (3.0.0)\n", "Requirement already satisfied: nvidia-nvjitlink-cu12 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.13.0->peft) (12.9.86)\n", "Requirement already satisfied: regex!=2019.12.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from transformers->peft) (2024.11.6)\n", "Requirement already satisfied: tokenizers<0.21,>=0.20 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from transformers->peft) (0.20.3)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from jinja2->torch>=1.13.0->peft) (2.1.5)\n", "Requirement already satisfied: charset_normalizer<4,>=2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from requests->huggingface-hub>=0.17.0->peft) (3.4.7)\n", "Requirement already satisfied: idna<4,>=2.5 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from requests->huggingface-hub>=0.17.0->peft) (3.13)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from requests->huggingface-hub>=0.17.0->peft) (2.2.3)\n", "Requirement already satisfied: certifi>=2017.4.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from requests->huggingface-hub>=0.17.0->peft) (2026.4.22)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.8/site-packages (from sympy->torch>=1.13.0->peft) (1.3.0)\n", "Downloading peft-0.13.2-py3-none-any.whl (320 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m320.7/320.7 kB\u001b[0m \u001b[31m9.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading accelerate-1.0.1-py3-none-any.whl (330 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m330.9/330.9 kB\u001b[0m \u001b[31m48.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25h\u001b[33mDEPRECATION: omegaconf 2.0.6 has a non-standard dependency specifier PyYAML>=5.1.*. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of omegaconf or contact the author to suggest that they release a version with a conforming dependency specifiers. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n", "\u001b[0mInstalling collected packages: accelerate, peft\n", "Successfully installed accelerate-1.0.1 peft-0.13.2\n", "\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" ] } ], "source": [ "!pip install peft" ] }, { "cell_type": "code", "execution_count": 1, "id": "42e90884-c40b-46b4-9067-529725bc208d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Loading local datasets...\n", "Tokenizing data...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3a61e1d780f442bf84f1f07e7297663c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Map: 0%| | 0/139266 [00:00\n", " \n", " \n", " [ 86/26112 01:35 < 8:10:42, 0.88 it/s, Epoch 0.01/3]\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EpochTraining LossValidation Loss

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# ==========================================\n", "# 3. METRIC CALCULATION (SacreBLEU)\n", "# ==========================================\n", "metric = evaluate.load(\"sacrebleu\")\n", "\n", "def compute_metrics(eval_preds):\n", " preds, labels = eval_preds\n", " if isinstance(preds, tuple):\n", " preds = preds[0]\n", " \n", " # Decode predictions\n", " decoded_preds = tokenizer.batch_decode(preds, skip_special_tokens=True)\n", "\n", " # Replace -100 (ignored index) in labels\n", " labels = np.where(labels != -100, labels, tokenizer.pad_token_id)\n", " decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)\n", "\n", " # Post-processing for SacreBLEU\n", " decoded_preds = [pred.strip() for pred in decoded_preds]\n", " decoded_labels = [[label.strip()] for label in decoded_labels]\n", "\n", " result = metric.compute(predictions=decoded_preds, references=decoded_labels)\n", " return {\"bleu\": result[\"score\"]}\n", "\n", "# ==========================================\n", "# 4. TRAINING CONFIGURATION\n", "# ==========================================\n", "training_args = Seq2SeqTrainingArguments(\n", " output_dir=\"./nllb-mni-lsftl\",\n", " evaluation_strategy=\"epoch\",\n", " save_strategy=\"epoch\",\n", " learning_rate=2e-4,\n", " per_device_train_batch_size=4,\n", " gradient_accumulation_steps=4,\n", " weight_decay=0.01,\n", " num_train_epochs=3,\n", " predict_with_generate=True, # Critical for BLEU calculation\n", " fp16=True,\n", " optim=\"adamw_torch\", # Forcing standard PyTorch optimizer\n", " logging_steps=10,\n", " save_total_limit=1,\n", " load_best_model_at_end=True\n", ")\n", "\n", "trainer = Seq2SeqTrainer(\n", " model=model,\n", " args=training_args,\n", " train_dataset=tokenized_ds[\"train\"],\n", " eval_dataset=tokenized_ds[\"validation\"],\n", " tokenizer=tokenizer,\n", " data_collator=DataCollatorForSeq2Seq(tokenizer, model=model),\n", " compute_metrics=compute_metrics,\n", ")\n", "\n", "# ==========================================\n", "# 5. EXECUTION: TRAIN & TEST\n", "# ==========================================\n", "print(\"Starting Fine-tuning...\")\n", "trainer.train()\n", "\n", "print(\"\\n--- Final Evaluation on Test Set ---\")\n", "test_results = trainer.evaluate(eval_dataset=tokenized_ds[\"test\"])\n", "print(f\"Test BLEU Score: {test_results['eval_bleu']:.2f}\")\n", "\n", "# ==========================================\n", "# 6. SAMPLE INFERENCE CHECK\n", "# ==========================================\n", "print(\"\\n--- Sample Predictions from Test Set ---\")\n", "model.eval()\n", "mni_id = tokenizer.convert_tokens_to_ids(\"mni_Beng\")\n", "\n", "for i in range(5):\n", " input_text = dataset[\"test\"][\"english\"][i]\n", " inputs = tokenizer(input_text, return_tensors=\"pt\").to(model.device)\n", " \n", " with torch.no_grad():\n", " generated_tokens = model.generate(\n", " **inputs, \n", " forced_bos_token_id=mni_id, \n", " max_length=128\n", " )\n", " \n", " prediction = tokenizer.decode(generated_tokens[0], skip_special_tokens=True)\n", " reference = dataset[\"test\"][\"manipuri\"][i]\n", " \n", " print(f\"Input: {input_text}\")\n", " print(f\"Pred: {prediction}\")\n", " print(f\"Truth: {reference}\\n\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "4b8abf64-f671-49f6-9fed-006c875a8485", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'/teamspace/studios/this_studio'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pwd" ] }, { "cell_type": "code", "execution_count": 3, "id": "f4b05fb0-0738-4370-9686-6f1df42314a5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0m\u001b[01;32mcheckpoint1.pt\u001b[0m* \u001b[01;32mcheckpoint15.pt\u001b[0m* \u001b[01;32mcheckpoint20.pt\u001b[0m* \u001b[01;32mcheckpoint8.pt\u001b[0m*\n", "\u001b[01;32mcheckpoint10.pt\u001b[0m* \u001b[01;32mcheckpoint16.pt\u001b[0m* \u001b[01;32mcheckpoint3.pt\u001b[0m* \u001b[01;32mcheckpoint9.pt\u001b[0m*\n", "\u001b[01;32mcheckpoint11.pt\u001b[0m* \u001b[01;32mcheckpoint17.pt\u001b[0m* \u001b[01;32mcheckpoint4.pt\u001b[0m* \u001b[01;32mcheckpoint_best.pt\u001b[0m*\n", "\u001b[01;32mcheckpoint12.pt\u001b[0m* \u001b[01;32mcheckpoint18.pt\u001b[0m* \u001b[01;32mcheckpoint5.pt\u001b[0m* \u001b[01;32mcheckpoint_last.pt\u001b[0m*\n", "\u001b[01;32mcheckpoint13.pt\u001b[0m* \u001b[01;32mcheckpoint19.pt\u001b[0m* \u001b[01;32mcheckpoint6.pt\u001b[0m*\n", "\u001b[01;32mcheckpoint14.pt\u001b[0m* \u001b[01;32mcheckpoint2.pt\u001b[0m* \u001b[01;32mcheckpoint7.pt\u001b[0m*\n" ] } ], "source": [ "ls\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "5b279caa-ceed-483c-b174-bb3eede61772", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/teamspace/studios/this_studio/checkpoints\n" ] } ], "source": [ "cd checkpoints" ] }, { "cell_type": "code", "execution_count": null, "id": "cc0f8abd-63e9-4de0-8c5b-ea9ff61d71c3", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.20" } }, "nbformat": 4, "nbformat_minor": 5 }