{ "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, ? examples/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "317e41ddb2bc4db8b6ca8fe82b1bf598", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Map: 0%| | 0/2404 [00:00, ? examples/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9754734338f14749b74c734cb24bf8db", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Map: 0%| | 0/1183 [00:00, ? examples/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2ed4906d44f54e33b0da8c5a0ef58cfd", "version_major": 2, "version_minor": 0 }, "text/plain": [ "pytorch_model.bin: 0%| | 0.00/2.46G [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f033726ad0c64c6f876322d4f9dcf501", "version_major": 2, "version_minor": 0 }, "text/plain": [ "generation_config.json: 0%| | 0.00/189 [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "trainable params: 4,718,592 || all params: 619,792,384 || trainable%: 0.7613\n" ] } ], "source": [ "import torch\n", "import os\n", "import numpy as np\n", "import evaluate\n", "from datasets import Dataset, DatasetDict\n", "from transformers import (\n", " AutoModelForSeq2SeqLM, \n", " AutoTokenizer, \n", " Seq2SeqTrainingArguments, \n", " Seq2SeqTrainer, \n", " DataCollatorForSeq2Seq\n", ")\n", "from peft import LoraConfig, get_peft_model, TaskType\n", "\n", "# ==========================================\n", "# 1. DATA LOADING (Local Files)\n", "# ==========================================\n", "def load_local_data(en_path, mni_path):\n", " if not os.path.exists(en_path) or not os.path.exists(mni_path):\n", " raise FileNotFoundError(f\"Ensure {en_path} and {mni_path} exist in this folder.\")\n", " \n", " with open(en_path, \"r\", encoding=\"utf-8\") as f_en, \\\n", " open(mni_path, \"r\", encoding=\"utf-8\") as f_mni:\n", " en_lines = [l.strip() for l in f_en if l.strip()]\n", " mni_lines = [l.strip() for l in f_mni if l.strip()]\n", " \n", " # Align lengths to prevent index errors\n", " length = min(len(en_lines), len(mni_lines))\n", " return Dataset.from_dict({\n", " \"english\": en_lines[:length], \n", " \"manipuri\": mni_lines[:length]\n", " })\n", "\n", "print(\"Loading local datasets...\")\n", "dataset = DatasetDict({\n", " \"train\": load_local_data(\"data/train.eng_Latn\", \"data/train.mni_Beng\"),\n", " \"validation\": load_local_data(\"data/dev.eng_Latn\", \"data/dev.mni_Beng\"),\n", " \"test\": load_local_data(\"data/test.eng_Latn\", \"data/test.mni_Beng\")\n", "})\n", "\n", "# ==========================================\n", "# 2. MODEL & TOKENIZER SETUP\n", "# ==========================================\n", "model_id = \"facebook/nllb-200-distilled-600M\"\n", "# We explicitly set the language tags for NLLB\n", "tokenizer = AutoTokenizer.from_pretrained(\n", " model_id, \n", " src_lang=\"eng_Latn\", \n", " tgt_lang=\"mni_Beng\"\n", ")\n", "\n", "def preprocess_function(examples):\n", " model_inputs = tokenizer(\n", " examples[\"english\"], \n", " text_target=examples[\"manipuri\"], \n", " max_length=128, \n", " truncation=True\n", " )\n", " return model_inputs\n", "\n", "print(\"Tokenizing data...\")\n", "tokenized_ds = dataset.map(\n", " preprocess_function, \n", " batched=True, \n", " remove_columns=[\"english\", \"manipuri\"]\n", ")\n", "\n", "# Load model in FP16 to avoid bitsandbytes/quantization issues\n", "model = AutoModelForSeq2SeqLM.from_pretrained(\n", " model_id, \n", " torch_dtype=torch.float16, \n", " device_map=\"auto\"\n", ")\n", "\n", "# LSFTL Framework: Low-Rank Adaptation (LoRA)\n", "peft_config = LoraConfig(\n", " task_type=TaskType.SEQ_2_SEQ_LM,\n", " r=16, \n", " lora_alpha=32, \n", " target_modules=[\"q_proj\", \"v_proj\", \"k_proj\", \"out_proj\"],\n", " lora_dropout=0.05\n", ")\n", "model = get_peft_model(model, peft_config)\n", "model.print_trainable_parameters()\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "651bce1c-34e5-4951-b887-4d114bbecd10", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "bf6a71f5-a65e-4884-84c5-02f35b3ff47d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "2bac2437-48f1-401f-ba6a-c7b5152c45b4", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c6fded3a5ffb4343a3495b31194f18a2", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Downloading builder script: 0.00B [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "/home/zeus/miniconda3/envs/cloudspace/lib/python3.8/site-packages/transformers/training_args.py:1568: FutureWarning: `evaluation_strategy` is deprecated and will be removed in version 4.46 of 🤗 Transformers. Use `eval_strategy` instead\n", " warnings.warn(\n", "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", "To disable this warning, you can either:\n", "\t- Avoid using `tokenizers` before the fork if possible\n", "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n", "/tmp/ipykernel_4611/2745601905.py:45: FutureWarning: `tokenizer` is deprecated and will be removed in version 5.0.0 for `Seq2SeqTrainer.__init__`. Use `processing_class` instead.\n", " trainer = Seq2SeqTrainer(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Starting Fine-tuning...\n" ] }, { "data": { "text/html": [ "\n", "
| Epoch | \n", "Training Loss | \n", "Validation Loss | \n", "
|---|
"
],
"text/plain": [
"