{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "ebcf3daa-78ce-4baa-846a-ea5e298c9de5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", "\u001b[0mNote: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "pip install -q datasets trl peft bitsandbytes sentencepiece wandb huggingface_hub" ] }, { "cell_type": "code", "execution_count": 1, "id": "4d54dddd-dfda-481a-95d4-79d1525524c4", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a9bddf0a36c64d3f9c6d4a58c3d59282", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(HTML(value='
0:\n", " message = {\"role\": \"system\", \"content\": example['task']}\n", " system = tokenizer.apply_chat_template([message], tokenize=False)\n", " else:\n", " system = \"\"\n", "\n", " # Format instruction\n", " message = {\"role\": \"user\", \"content\": example['query']}\n", " prompt = tokenizer.apply_chat_template([message], tokenize=False, add_generation_prompt=True)\n", "\n", " # Format chosen answer\n", " chosen = example['pos'] + \"<|im_end|>\\n\"\n", "\n", " # Format rejected answer\n", " rejected = example['neg'] + \"<|im_end|>\\n\"\n", "\n", " return {\n", " \"prompt\": system + prompt,\n", " \"chosen\": chosen,\n", " \"rejected\": rejected,\n", " }\n", "\n", "# Load dataset\n", "dataset = load_dataset(\"TokenBender/e5_FT_sentence_retrieval_task_Hindi_mini\")['train']\n", "\n", "# Save columns\n", "original_columns = dataset.column_names\n", "\n", "# Tokenizer\n", "tokenizer = AutoTokenizer.from_pretrained(model_name)\n", "tokenizer.pad_token = tokenizer.eos_token\n", "tokenizer.padding_side = \"left\"\n", "\n", "# Format dataset\n", "dataset = dataset.map(\n", " chatml_format,\n", " remove_columns=original_columns\n", ")" ] }, { "cell_type": "code", "execution_count": 10, "id": "fb9be1e7-9677-4dbd-8a75-946f39e232dd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Dataset({\n", " features: ['prompt', 'chosen', 'rejected'],\n", " num_rows: 6633\n", "})" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset" ] }, { "cell_type": "code", "execution_count": 13, "id": "7282026e-3a22-4d57-b39b-761b3f9cf7b3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'prompt': '<|system|>\\nप्रश्न के रूप में एक सेलिब्रिटी का नाम दिए जाने पर, साक्षात्कार और जीवनी पुनर्प्राप्त करें।\\n<|user|>\\nलियोनार्डो डिकैप्रियो एक अमेरिकी अभिनेता, फिल्म निर्माता और पर्यावरण कार्यकर्ता हैं। उन्हें छह अकादमी पुरस्कारों, चार ब्रिटिश अकादमी फिल्म पुरस्कारों और नौ स्क्रीन एक्टर्स गिल्ड पुरस्कारों के लिए नामांकित किया गया है, जिनमें से प्रत्येक पुरस्कार में से एक और ग्यारह नामांकनों में से तीन गोल्डन ग्लोब पुरस्कार जीते हैं। डिकैप्रियो ने 1980 के दशक के अंत में टेलीविजन विज्ञापनों में दिखाई देकर अपने करियर की शुरुआत की। इसके बाद उन्होंने विभिन्न टेलीविजन श्रृंखलाओं में आवर्ती भूमिकाएँ निभाईं, जैसे कि सोप ओपेरा सांता बारबरा और सिटकॉम ग्रोइंग पेन्स। उन्होंने रॉबर्ट डी नीरो के साथ संस्मरण दिस बॉयज़ लाइफ के फिल्म रूपांतरण में अभिनय करने से पहले क्रिटर्स 3 में जोश के रूप में अभिनय करके अपने फिल्म करियर की शुरुआत की। डिकैप्रियो को नाटक वॉट्स ईटिंग गिल्बर्ट ग्रेप (1993) में उनकी सहायक भूमिका के लिए सराहा गया था, और जेम्स कैमरून के महाकाव्य रोमांस टाइटैनिक (1997) के साथ अंतर्राष्ट्रीय प्रसिद्धि प्राप्त करने से पहले, द बास्केटबॉल डायरीज़ (1995) और रोमांटिक ड्रामा रोमियो + जूलियट (1996) नाटक में प्रमुख भूमिकाओं के साथ सार्वजनिक पहचान प्राप्त की, जो उस समय तक की सबसे अधिक कमाई करने वाली फिल्म बन गई। 2000 के दशक से, डिकैप्रियो को फिल्म शैलियों की एक विस्तृत श्रृंखला में उनके काम के लिए आलोचनात्मक प्रशंसा मिली है। उनकी बाद की फिल्मों में द मैन इन द आयरन मास्क (1998), जीवनी अपराध नाटक कैच मी इफ यू कैन (2002) और महाकाव्य ऐतिहासिक नाटक गैंग्स ऑफ न्यूयॉर्क (2002) शामिल हैं, जो निर्देशक मार्टिन स्कॉर्सेज़ के साथ उनके कई सहयोगों में से पहली थी। डिकैप्रियो को राजनीतिक युद्ध थ्रिलर ब्लड डायमंड (2006), नियो-नॉयर क्राइम ड्रामा द डिपार्टेड (2006), जासूसी थ्रिलर बॉडी ऑफ लाइज़ (2008), ड्रामा रिवोल्यूशनरी रोड (2008), मनोवैज्ञानिक थ्रिलर शटर आइलैंड (2010), विज्ञान कथा थ्रिलर इंसेप्शन (2010), जीवनी फिल्म जे. एडगर (2011), पश्चिमी जांगो अनचेन्ड (2012) और पीरियड ड्रामा द ग्रेट गैट्सबी (2013) में उनके प्रदर्शन के लिए सराहा गया था। द एविएटर (2004) में हॉवर्ड ह्यूजेस और द रेवनेंट (2015) में ह्यूग ग्लास के डिकैप्रियो के चित्रण ने उन्हें सर्वश्रेष्ठ अभिनेता-मोशन पिक्चर ड्रामा के लिए गोल्डन ग्लोब पुरस्कार दिलाया। द वुल्फ ऑफ वॉल स्ट्रीट (2013) में जॉर्डन बेल्फोर्ट के रूप में उनके प्रदर्शन ने उन्हें सर्वश्रेष्ठ अभिनेता-मोशन पिक्चर म्यूजिकल या कॉमेडी के लिए गोल्डन ग्लोब पुरस्कार दिलाया। उन्होंने द रेवनेंट के लिए सर्वश्रेष्ठ अभिनेता का अपना पहला अकादमी पुरस्कार भी जीता। डिकैप्रियो एपियन वे प्रोडक्शंस के संस्थापक हैं-एक निर्माण कंपनी जिसने उनकी कुछ फिल्मों और वृत्तचित्र श्रृंखला ग्रीन्सबर्ग (2008-2010) का निर्माण किया है-और पर्यावरण जागरूकता को बढ़ावा देने के लिए समर्पित एक गैर-लाभकारी संगठन लियोनार्डो डिकैप्रियो फाउंडेशन। वह एक प्रतिबद्ध पर्यावरण कार्यकर्ता भी हैं। 2016 में, उन्हें जलवायु परिवर्तन के लिए संयुक्त राष्ट्र शांति दूत नामित किया गया था और जलवायु परिवर्तन से निपटने के लिए उनके काम के लिए विश्व आर्थिक मंच में क्रिस्टल पुरस्कार प्राप्त हुआ था। 2018 में, जल भृंग की एक प्रजाति का नाम उनकी पर्यावरणीय सक्रियता की मान्यता में उनके नाम पर रखा गया था, ग्रौवेलिनस लियोनार्डोडिकाप्रियोई। डिकैप्रियो के पास लॉस फेलिज़, लॉस एंजिल्स में एक घर और बैटरी पार्क सिटी, लोअर मैनहट्टन में एक अपार्टमेंट है। वह जलवायु परिवर्तन पर कार्रवाई के लिए एक मुखर अधिवक्ता रहे हैं और उन्हें पर्यावरण समूहों से प्रशंसा मिली है। जलवायु परिवर्तन के खतरों के बारे में जागरूकता बढ़ाने के उनके प्रयासों और अक्षय ऊर्जा में उनके निवेश के लिए उनकी विशेष रूप से प्रशंसा की गई है। डिकैप्रियो 1992 से शाकाहारी रहे हैं और पर्यावरणवाद और मानवीय कारणों के प्रति अपने समर्पण के लिए जाने जाते हैं। वह पर्यावरण के मुद्दों के बारे में जागरूकता बढ़ाने के अभियानों में शामिल रहे हैं और टीएजी ह्यूअर के ब्रांड एंबेसडर के रूप में कार्य किया है। वह द 11थ आवर जैसे वृत्तचित्रों के निर्माण में भी शामिल रहे हैं। 2010 में, उन्होंने भूकंप के बाद हैती में राहत प्रयासों के लिए $1 मिलियन का दान दिया। 2017 में, उन्होंने तूफान हार्वे के पीड़ितों को $1 मिलियन का दान दिया। 2018 में, उन्होंने गंभीर रूप से लुप्तप्राय सुमात्रा हाथी के संरक्षण और संरक्षण का समर्थन करने के लिए लियोनार्डो डिकैप्रियो फाउंडेशन को $30 लाख का दान दिया। 2020 में, उन्होंने गंभीर रूप से लुप्तप्राय सुमात्रा हाथी के संरक्षण और संरक्षण का समर्थन करने के लिए लियोनार्डो डिकैप्रियो फाउंडेशन को $30 लाख का दान दिया। 2021 में, उन्होंने गंभीर रूप से लुप्तप्राय सुमात्रा हाथी के संरक्षण और संरक्षण का समर्थन करने के लिए लियोनार्डो डिकैप्रियो फाउंडेशन को $43 मिलियन का दान दिया।\\n<|assistant|>\\n', 'chosen': 'लियोनार्डो डिकैप्रियो एक प्रतिभाशाली अभिनेता हैं जिन्हें टाइटैनिक और द रेवनेंट जैसी फिल्मों में उनकी भूमिकाओं के लिए जाना जाता है। ओ पर्यावरण सक्रियतामे सेहो शामिल रहल छथि आ अपन प्रदर्शनक लेल कतेको पुरस्कार प्राप्त कयने छथि। डिकैप्रियो जलवायु परिवर्तन पर कार्रवाई के लिए एक मुखर अधिवक्ता रहे हैं और उन्हें पर्यावरण समूहों से प्रशंसा मिली है। जलवायु परिवर्तन के खतरों के बारे में जागरूकता बढ़ाने के उनके प्रयासों और अक्षय ऊर्जा में उनके निवेश के लिए उनकी विशेष रूप से प्रशंसा की गई है। डिकैप्रियो 1992 से शाकाहारी रहे हैं और पर्यावरणवाद और मानवीय कारणों के प्रति अपने समर्पण के लिए जाने जाते हैं। वह पर्यावरण के मुद्दों के बारे में जागरूकता बढ़ाने के अभियानों में शामिल रहे हैं और टीएजी ह्यूअर के ब्रांड एंबेसडर के रूप में कार्य किया है। वह द 11थ आवर जैसे वृत्तचित्रों के निर्माण में भी शामिल रहे हैं। 2010 में, उन्होंने भूकंप के बाद हैती में राहत प्रयासों के लिए $1 मिलियन का दान दिया। 2017 में, उन्होंने तूफान हार्वे के पीड़ितों को $1 मिलियन का दान दिया। 2018 में, उन्होंने गंभीर रूप से लुप्तप्राय सुमात्रा हाथी के संरक्षण और संरक्षण का समर्थन करने के लिए लियोनार्डो डिकैप्रियो फाउंडेशन को $30 लाख का दान दिया। 2020 में, उन्होंने गंभीर रूप से लुप्तप्राय सुमात्रा हाथी के संरक्षण और संरक्षण का समर्थन करने के लिए लियोनार्डो डिकैप्रियो फाउंडेशन को $30 लाख का दान दिया। 2021 में, उन्होंने गंभीर रूप से लुप्तप्राय सुमात्रा हाथी के संरक्षण और संरक्षण का समर्थन करने के लिए लियोनार्डो डिकैप्रियो फाउंडेशन को $43 मिलियन का दान दिया।<|im_end|>\\n', 'rejected': 'प्रसिद्ध अभिनेता और परोपकारी, लियोनार्डो डिकैप्रियो के साक्षात्कार और जीवनी खोजें, जो अपनी पर्यावरणीय सक्रियता और टाइटैनिक और द रेवनेंट जैसी फिल्मों में पुरस्कार विजेता प्रदर्शन के लिए जाने जाते हैं।<|im_end|>\\n'}\n" ] } ], "source": [ "print(dataset[0])" ] }, { "cell_type": "code", "execution_count": 3, "id": "2c17bae2-a6a3-4f6c-b842-bc32847def79", "metadata": {}, "outputs": [], "source": [ "# LoRA configuration\n", "peft_config = LoraConfig(\n", " r=16,\n", " lora_alpha=16,\n", " lora_dropout=0.05,\n", " bias=\"none\",\n", " task_type=\"CAUSAL_LM\",\n", " target_modules=['k_proj', 'gate_proj', 'v_proj', 'up_proj', 'q_proj', 'o_proj', 'down_proj']\n", ")" ] }, { "cell_type": "code", "execution_count": 4, "id": "c8003e61-ae44-400f-8b5c-668c5499bf78", "metadata": {}, "outputs": [], "source": [ "# Model to fine-tune\n", "model = AutoModelForCausalLM.from_pretrained(\n", " model_name,\n", " torch_dtype=torch.float16,\n", " load_in_4bit=True\n", ")\n", "model.config.use_cache = False\n", "\n", "# Reference model\n", "ref_model = AutoModelForCausalLM.from_pretrained(\n", " model_name,\n", " torch_dtype=torch.float16,\n", " load_in_4bit=True\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "af86df74-040d-4253-bc41-56c8b0d760f4", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/trl/trainer/dpo_trainer.py:314: UserWarning: When using DPODataCollatorWithPadding, you should set `remove_unused_columns=False` in your TrainingArguments we have set it for you, but you should do it yourself in the future.\n", " warnings.warn(\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0d6384bdbfec4041a50bc55c3567eabf", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Map: 0%| | 0/6633 [00:00 2048). Running this sequence through the model will result in indexing errors\n", "Detected kernel version 5.4.0, which is below the recommended minimum of 5.5.0; this can cause the process to hang. It is recommended to upgrade the kernel to the minimum version or higher.\n" ] }, { "data": { "text/html": [ "Changes to your `wandb` environment variables will be ignored because your `wandb` session has already started. For more information on how to modify your settings with `wandb.init()` arguments, please refer to the W&B docs." ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Tracking run with wandb version 0.16.2" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Run data is saved locally in /workspace/wandb/run-20240128_065712-os8qoadz" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Syncing run logical-monkey-4 to Weights & Biases (docs)
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View project at https://wandb.ai/ahm-rimer/hindi_dpo_test" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View run at https://wandb.ai/ahm-rimer/hindi_dpo_test/runs/os8qoadz" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/bitsandbytes/nn/modules.py:226: UserWarning: Input type into Linear4bit is torch.float16, but bnb_4bit_compute_dtype=torch.float32 (default). This will lead to slow inference or training speed.\n", " warnings.warn(f'Input type into Linear4bit is torch.float16, but bnb_4bit_compute_dtype=torch.float32 (default). This will lead to slow inference or training speed.')\n", "Could not estimate the number of tokens of the input, floating-point operations will not be computed\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " [ 92/621 1:09:37 < 6:49:13, 0.02 it/s, Epoch 0.44/3]\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
StepTraining Loss
10.703000
20.698300
30.703000
40.675100
50.694200
60.675100
70.675300
80.658600
90.641100
100.634400
110.609300
120.606500
130.607200
140.560900
150.563000
160.527200
170.473300
180.486900
190.454200
200.426300
210.381000
220.361900
230.344100
240.298400
250.298100
260.256600
270.245600
280.214800
290.190200
300.163100
310.148100
320.136700
330.117100
340.097800
350.105300
360.072300
370.077200
380.056100
390.051000
400.041900
410.035800
420.031700
430.013200
440.014600
450.036300
460.012200
470.012500
480.011200
490.013500
500.008400
510.004900
520.006900
530.010800
540.006800
550.003900
560.005600
570.002100
580.001800
590.004600
600.001600
610.002000
620.001400
630.001000
640.002900
650.000800
660.004300
670.000700
680.002700
690.000500
700.002600
710.000600
720.000400
730.000800
740.000700
750.000400
760.000600
770.000900
780.000300
790.001000
800.000300
810.002800
820.000900
830.000300
840.000200
850.000300
860.010300
870.001800
880.000400
890.000300
900.000200

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Training arguments\n", "training_args = TrainingArguments(\n", " per_device_train_batch_size=,\n", " gradient_accumulation_steps=4,\n", " gradient_checkpointing=True,\n", " learning_rate=5e-5,\n", " lr_scheduler_type=\"cosine\",\n", " num_train_epochs=3,\n", " save_strategy=\"no\",\n", " logging_steps=1,\n", " output_dir=new_model,\n", " optim=\"paged_adamw_32bit\",\n", " warmup_steps=100,\n", " bf16=True,\n", " report_to=\"wandb\",\n", ")\n", "\n", "# Create DPO trainer\n", "dpo_trainer = DPOTrainer(\n", " model,\n", " ref_model,\n", " args=training_args,\n", " train_dataset=dataset,\n", " tokenizer=tokenizer,\n", " peft_config=peft_config,\n", " beta=0.1,\n", " max_prompt_length=1024,\n", " max_length=1536,\n", ")\n", "\n", "# Fine-tune model with DPO\n", "dpo_trainer.train()" ] }, { "cell_type": "code", "execution_count": null, "id": "4383edf2-f7e9-4502-b375-8918a9712f80", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.11" } }, "nbformat": 4, "nbformat_minor": 5 }