{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Low Rank Adaptation or LoRA\n\nThe LoRA paper https://arxiv.org/abs/2106.09685 introduced a wild idea for training foundational models that can **\"reduce the number of trainable parameters by 10,000 times and the GPU memory requirement by 3 times\"**. It is ubiquitous in Language Modeling, being rapidly adopted in generative modeling and is also used in, you guessed it, speech rec! Just to understand how powerful it can be, check out the following table (from the paper) showing the performance of standard fine-tuning vs LoRA fine-tuning of GPT3 on the WikiSQL task. LoRA requires training only ~5M params for the 175B param GPT3!! Perfect for low compute settings!\n\n![image.png](attachment:c01573d5-d586-4592-b3fc-c79b5122ba0e.png)\n\n# The trick\n\nAs the name suggests, instead of training whole weight matrices, LoRA keeps the original weights frozen and 'adapts' the frozen weights by adding a low rank matrix to the original weights. Suppose you have input $x$ to any weight matrix $W$ (e.g., the key or query embedding matrix) that produces output via $Wx$. LoRA will freeze $W$ and add two new trainable matrices $A$ and $B$ to learn the operation $(W + AB)x$. If the inner dimension $r$ of $A$ and $B$ is smaller than the dimensionality of $x$ and $h$, then $r$ will upper bound the rank of resultant matrix $AB$. Hence by controlling $r$ we can control the number of parameters we are actually learning! I'm skipping all the additional motivations as they can be found in the paper. Low #params good enough motivation for us atm xD \n\n# Training Whisper-Large\n\nWe will do mixed precision training of LoRA + Whisper-Large. Small detail, LoRA falls under the umbrella of Parameter-Efficient Fine-Tuning or PEFT. We'll be using the PEFT library to implement LoRA. First we will import the model in 8-bit and add the LoRA adapter. Then we will only keep the LoRA weights trainable and train on a part of the training dataset (for this example). \n\nThe code below is adopted from [here](https://github.com/huggingface/peft/blob/main/examples/int8_training/peft_bnb_whisper_large_v2_training.ipynb). Bits and pieces of codes are adopted from the notebook by Nicholas Broad Whisper starter kit for the competition https://www.kaggle.com/code/nbroad/whisper-training-starter-kit. Also using the parquet files by Nicholas containing extracted spectrograms.  \n\n#### Disclaimer\nThis notebook is still not working as expected. I had to use an `autocast` to make it work out. Will try to find time and fix the bugs. Please feel free to copy and use/improve it yourself!! Would be super grateful!\n","metadata":{},"attachments":{"c01573d5-d586-4592-b3fc-c79b5122ba0e.png":{"image/png":"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"}}},{"cell_type":"code","source":"!pip install -q transformers datasets librosa evaluate jiwer gradio bitsandbytes #accelerate bitsandbytes==0.37\n!pip install -q git+https://github.com/huggingface/peft.git@main\n!pip install -q git+https://github.com/huggingface/accelerate.git@main\n!pip install -q git+https://github.com/huggingface/datasets.git@main","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-08-08T10:35:54.050281Z","iopub.execute_input":"2023-08-08T10:35:54.050730Z","iopub.status.idle":"2023-08-08T10:37:27.787789Z","shell.execute_reply.started":"2023-08-08T10:35:54.050671Z","shell.execute_reply":"2023-08-08T10:37:27.786308Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_name_or_path = \"openai/whisper-large-v2\"\ntask = \"transcribe\"","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:38:11.433182Z","iopub.execute_input":"2023-08-08T10:38:11.433605Z","iopub.status.idle":"2023-08-08T10:38:11.439529Z","shell.execute_reply.started":"2023-08-08T10:38:11.433569Z","shell.execute_reply":"2023-08-08T10:38:11.438417Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from transformers import WhisperFeatureExtractor\n\nfeature_extractor = WhisperFeatureExtractor.from_pretrained(model_name_or_path)","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:38:12.968739Z","iopub.execute_input":"2023-08-08T10:38:12.969755Z","iopub.status.idle":"2023-08-08T10:38:16.002093Z","shell.execute_reply.started":"2023-08-08T10:38:12.969691Z","shell.execute_reply":"2023-08-08T10:38:16.001059Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from transformers import WhisperTokenizer\n\ntokenizer = WhisperTokenizer.from_pretrained(model_name_or_path, language='bn', task=task)","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:38:16.004182Z","iopub.execute_input":"2023-08-08T10:38:16.004802Z","iopub.status.idle":"2023-08-08T10:38:16.219530Z","shell.execute_reply.started":"2023-08-08T10:38:16.004756Z","shell.execute_reply":"2023-08-08T10:38:16.218527Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from transformers import WhisperProcessor\n\nprocessor = WhisperProcessor.from_pretrained(model_name_or_path, language='bn', task=task)","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:38:16.221027Z","iopub.execute_input":"2023-08-08T10:38:16.221400Z","iopub.status.idle":"2023-08-08T10:38:16.459518Z","shell.execute_reply.started":"2023-08-08T10:38:16.221363Z","shell.execute_reply":"2023-08-08T10:38:16.458302Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch\n\nfrom dataclasses import dataclass\nfrom typing import Any, Dict, List, Union\n\n\n# @dataclass\n# class DataCollatorSpeechSeq2SeqWithPadding:\n#     processor: Any\n\n#     def __call__(self, features: List[Dict[str, Union[List[int], torch.Tensor]]]) -> Dict[str, torch.Tensor]:\n#         # split inputs and labels since they have to be of different lengths and need different padding methods\n#         # first treat the audio inputs by simply returning torch tensors\n#         input_features = [{\"input_features\": feature[\"input_features\"]} for feature in features]\n#         batch = self.processor.feature_extractor.pad(input_features, return_tensors=\"pt\")\n\n#         # get the tokenized label sequences\n#         label_features = [{\"input_ids\": feature[\"labels\"]} for feature in features]\n#         # pad the labels to max length\n#         labels_batch = self.processor.tokenizer.pad(label_features, return_tensors=\"pt\")\n\n#         # replace padding with -100 to ignore loss correctly\n#         labels = labels_batch[\"input_ids\"].masked_fill(labels_batch.attention_mask.ne(1), -100)\n\n#         # if bos token is appended in previous tokenization step,\n#         # cut bos token here as it's append later anyways\n#         if (labels[:, 0] == self.processor.tokenizer.bos_token_id).all().cpu().item():\n#             labels = labels[:, 1:]\n\n#         batch[\"labels\"] = labels\n        \n\n#         return batch\n    \n    \n@dataclass\nclass DataCollatorSpeechSeq2SeqWithPadding:\n    \"\"\"\n    Data collator that will dynamically pad the inputs received.\n    Args:\n        processor ([`WhisperProcessor`])\n            The processor used for processing the data.\n        decoder_start_token_id (`int`)\n            The begin-of-sentence of the decoder.\n        forward_attention_mask (`bool`)\n            Whether to return attention_mask.\n    \"\"\"\n\n    processor: Any\n#     decoder_start_token_id: int\n#     forward_attention_mask: bool\n\n    def __call__(\n        self, features: List[Dict[str, Union[List[int], torch.Tensor]]]\n    ) -> Dict[str, torch.Tensor]:\n        # split inputs and labels since they have to be of different lengths and need\n        # different padding methods\n        model_input_name = self.processor.model_input_names[0]\n        input_features = [\n            {model_input_name: feature[model_input_name]} for feature in features\n        ]\n        label_features = [{\"input_ids\": feature[\"labels\"]} for feature in features]\n\n        batch = self.processor.feature_extractor.pad(\n            input_features, return_tensors=\"pt\"\n        )\n\n#         if self.forward_attention_mask:\n#             batch[\"attention_mask\"] = torch.LongTensor(\n#                 [feature[\"attention_mask\"] for feature in features]\n#             )\n\n        labels_batch = self.processor.tokenizer.pad(label_features, return_tensors=\"pt\")\n        \n        # replace padding with -100 to ignore loss correctly\n        labels = labels_batch[\"input_ids\"].masked_fill(labels_batch.attention_mask.ne(1), -100)\n\n        # if bos token is appended in previous tokenization step,\n        # cut bos token here as it's append later anyways\n        if (labels[:, 0] == self.processor.tokenizer.bos_token_id).all().cpu().item():\n            labels = labels[:, 1:]\n        \n        # replace padding with -100 to ignore loss correctly\n#         labels = labels_batch[\"input_ids\"].masked_fill(\n#             labels_batch.attention_mask.ne(1), -100\n#         )\n\n#         # if bos token is appended in previous tokenization step,\n#         # cut bos token here as it's append later anyways\n#         if (labels[:, 0] == self.decoder_start_token_id).all().cpu().item():\n#             labels = labels[:, 1:]\n\n        batch[\"labels\"] = labels\n\n        return batch\n\ndata_collator = DataCollatorSpeechSeq2SeqWithPadding(\n    processor=processor,\n#     decoder_start_token_id=model.config.decoder_start_token_id,\n#     forward_attention_mask=forward_attention_mask,\n)","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:38:16.462347Z","iopub.execute_input":"2023-08-08T10:38:16.462763Z","iopub.status.idle":"2023-08-08T10:38:21.741030Z","shell.execute_reply.started":"2023-08-08T10:38:16.462720Z","shell.execute_reply":"2023-08-08T10:38:21.740035Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import evaluate\n\nmetric = evaluate.load(\"wer\")","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:38:21.742734Z","iopub.execute_input":"2023-08-08T10:38:21.743434Z","iopub.status.idle":"2023-08-08T10:38:37.758406Z","shell.execute_reply.started":"2023-08-08T10:38:21.743396Z","shell.execute_reply":"2023-08-08T10:38:37.757195Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from transformers import WhisperForConditionalGeneration\n\nmodel = WhisperForConditionalGeneration.from_pretrained(model_name_or_path, load_in_8bit=True,\n#                                                         torch_dtype=torch.float16,\n                                                        device_map=\"auto\")","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:38:37.759759Z","iopub.execute_input":"2023-08-08T10:38:37.760137Z","iopub.status.idle":"2023-08-08T10:39:57.866503Z","shell.execute_reply.started":"2023-08-08T10:38:37.760097Z","shell.execute_reply":"2023-08-08T10:39:57.865354Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# for param in model.parameters():\n#     param.requires_grad = False  # freeze the model - train adapters later\n#     if param.ndim == 1:\n#     # cast the small parameters (e.g. layernorm) to fp32 for stability\n#         param.data = param.data.to(torch.float32)\n\n# model.gradient_checkpointing_enable()  # reduce number of stored activations\n# model.enable_input_require_grads()\n\n# class CastOutputToFloat(torch.nn.Sequential):\n#     def forward(self, x): return super().forward(x).to(torch.float32)\n# model.proj_out = CastOutputToFloat(model.proj_out)","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:39:57.868114Z","iopub.execute_input":"2023-08-08T10:39:57.868698Z","iopub.status.idle":"2023-08-08T10:39:57.874211Z","shell.execute_reply.started":"2023-08-08T10:39:57.868660Z","shell.execute_reply":"2023-08-08T10:39:57.873028Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from peft import prepare_model_for_int8_training\n\nmodel = prepare_model_for_int8_training(model)","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:39:57.878471Z","iopub.execute_input":"2023-08-08T10:39:57.878987Z","iopub.status.idle":"2023-08-08T10:39:57.941654Z","shell.execute_reply.started":"2023-08-08T10:39:57.878962Z","shell.execute_reply":"2023-08-08T10:39:57.940733Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def make_inputs_require_grad(module, input, output):\n    output.requires_grad_(True)\n\nmodel.model.encoder.conv1.register_forward_hook(make_inputs_require_grad)","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:39:57.943125Z","iopub.execute_input":"2023-08-08T10:39:57.943889Z","iopub.status.idle":"2023-08-08T10:39:57.952693Z","shell.execute_reply.started":"2023-08-08T10:39:57.943837Z","shell.execute_reply":"2023-08-08T10:39:57.951596Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from peft import LoraConfig, PeftModel, LoraModel, LoraConfig, get_peft_model\n\nlora_config = LoraConfig(r=16, lora_alpha=32, target_modules=[\"q_proj\", \"v_proj\"], lora_dropout=0.05, bias=\"none\")\n\nmodel = get_peft_model(model, lora_config)\nmodel.print_trainable_parameters()","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:39:57.954395Z","iopub.execute_input":"2023-08-08T10:39:57.954755Z","iopub.status.idle":"2023-08-08T10:40:00.277993Z","shell.execute_reply.started":"2023-08-08T10:39:57.954722Z","shell.execute_reply":"2023-08-08T10:40:00.276909Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### load data\nimport datasets\nfrom datasets import DatasetDict, load_dataset\nfrom pathlib import Path\n\nvectorized_datasets = DatasetDict()\ntrain_data_dir = '/kaggle/input/bengali-ai-asr-10k'\nvalidation_data_dir = '/kaggle/input/bengali-ai-asr-10k'\n\ntrain_files = list(map(str, Path(train_data_dir).glob(\"train*.parquet\")))\nvectorized_datasets[\"train\"] = load_dataset(\"parquet\", data_files=train_files[:1], split=\"train\")\n\neval_files = list(map(str, Path(validation_data_dir).glob(\"eval*.parquet\")))\nvectorized_datasets[\"eval\"] = load_dataset(\n    \"parquet\", data_files=eval_files, split=\"train\"\n)","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:40:00.279778Z","iopub.execute_input":"2023-08-08T10:40:00.280265Z","iopub.status.idle":"2023-08-08T10:40:00.744755Z","shell.execute_reply.started":"2023-08-08T10:40:00.280225Z","shell.execute_reply":"2023-08-08T10:40:00.743769Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from transformers import Seq2SeqTrainingArguments\n\ntraining_args = Seq2SeqTrainingArguments(\n    output_dir=\"lora/test\",  # change to a repo name of your choice\n    report_to=\"none\", ### comment this out to login to wandb\n    per_device_train_batch_size=8,\n    gradient_accumulation_steps=1,  # increase by 2x for every 2x decrease in batch size\n    learning_rate=1e-5,\n    warmup_steps=50,\n    num_train_epochs=1,\n    evaluation_strategy=\"steps\",\n    fp16=True,\n    per_device_eval_batch_size=8,\n#     generation_max_length=128,\n    logging_steps=100,\n#     max_steps=100, # only for testing purposes, remove this from your final run :)\n    remove_unused_columns=False,  # required as the PeftModel forward doesn't have the signature of the wrapped model's forward\n    label_names=[\"labels\"],  # same reason as above\n)","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:40:00.746430Z","iopub.execute_input":"2023-08-08T10:40:00.747316Z","iopub.status.idle":"2023-08-08T10:40:00.772855Z","shell.execute_reply.started":"2023-08-08T10:40:00.747277Z","shell.execute_reply":"2023-08-08T10:40:00.771971Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from transformers import Seq2SeqTrainer, TrainerCallback, TrainingArguments, TrainerState, TrainerControl\nfrom transformers.trainer_utils import PREFIX_CHECKPOINT_DIR\n\n# This callback helps to save only the adapter weights and remove the base model weights.\nclass SavePeftModelCallback(TrainerCallback):\n    def on_save(\n        self,\n        args: TrainingArguments,\n        state: TrainerState,\n        control: TrainerControl,\n        **kwargs,\n    ):\n        checkpoint_folder = os.path.join(args.output_dir, f\"{PREFIX_CHECKPOINT_DIR}-{state.global_step}\")\n\n        peft_model_path = os.path.join(checkpoint_folder, \"adapter_model\")\n        kwargs[\"model\"].save_pretrained(peft_model_path)\n\n        pytorch_model_path = os.path.join(checkpoint_folder, \"pytorch_model.bin\")\n        if os.path.exists(pytorch_model_path):\n            os.remove(pytorch_model_path)\n        return control\n\n\ntrainer = Seq2SeqTrainer(\n    args=training_args,\n    model=model,\n    train_dataset=vectorized_datasets[\"train\"],\n    eval_dataset=vectorized_datasets[\"eval\"],\n    data_collator=data_collator,\n    # compute_metrics=compute_metrics,\n    tokenizer=processor.feature_extractor,\n    callbacks=[SavePeftModelCallback],\n\n)\nmodel.config.use_cache = False  # silence the warnings. Please re-enable for inference!","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:40:00.774118Z","iopub.execute_input":"2023-08-08T10:40:00.774494Z","iopub.status.idle":"2023-08-08T10:40:00.809625Z","shell.execute_reply.started":"2023-08-08T10:40:00.774457Z","shell.execute_reply":"2023-08-08T10:40:00.808745Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# with torch.autocast(\"cuda\"):\ntrainer.train()\ntrainer.save_model()","metadata":{"execution":{"iopub.status.busy":"2023-08-08T10:40:00.810992Z","iopub.execute_input":"2023-08-08T10:40:00.811338Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}