{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "5d81bb13", "metadata": {}, "outputs": [], "source": [ "from datasets import load_dataset\n", "\n", "dataset = load_dataset(\"facebook/natural_reasoning\")\n", "train_data = dataset[\"train\"].select(range(5000)) # Start with 5k examples\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "5279c3c3", "metadata": {}, "outputs": [], "source": [ "def format_for_training(example):\n", " return {\n", " \"prompt\": example[\"question\"],\n", " \"completion\": example[\"reference_answer\"]\n", " }\n", "\n", "train_data = train_data.map(format_for_training)\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "d5f715b3", "metadata": {}, "outputs": [], "source": [ "from transformers import AutoTokenizer\n", "\n", "model_checkpoint = \"distilgpt2\"\n", "tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)\n", "tokenizer.pad_token = tokenizer.eos_token\n", "max_seq_length = 512\n", "\n", "def tokenize(example):\n", " input_text = f\"### Question: {example['prompt']}\\n### Answer: {example['completion']}{tokenizer.eos_token}\"\n", " tokenized = tokenizer(\n", " input_text,\n", " padding=\"max_length\",\n", " truncation=True,\n", " max_length=max_seq_length\n", " )\n", " tokenized[\"labels\"] = tokenized[\"input_ids\"].copy()\n", " return tokenized\n", "\n", "tokenized_data = train_data.map(tokenize)\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "61cb619d", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\Users\\shukl\\anaconda3\\Lib\\site-packages\\transformers\\training_args.py:1611: FutureWarning: `evaluation_strategy` is deprecated and will be removed in version 4.46 of 🤗 Transformers. Use `eval_strategy` instead\n", " warnings.warn(\n", "C:\\Users\\shukl\\AppData\\Local\\Temp\\ipykernel_7600\\3538093026.py:16: FutureWarning: `tokenizer` is deprecated and will be removed in version 5.0.0 for `Trainer.__init__`. Use `processing_class` instead.\n", " trainer = Trainer(\n", "`loss_type=None` was set in the config but it is unrecognised.Using the default loss: `ForCausalLMLoss`.\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " [2500/2500 3:07:00, Epoch 1/1]\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \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
5000.836400
10000.629200
15000.631400
20000.622300
25000.631600

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "('./my_bot_model\\\\tokenizer_config.json',\n", " './my_bot_model\\\\special_tokens_map.json',\n", " './my_bot_model\\\\vocab.json',\n", " './my_bot_model\\\\merges.txt',\n", " './my_bot_model\\\\added_tokens.json',\n", " './my_bot_model\\\\tokenizer.json')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from transformers import AutoModelForCausalLM, TrainingArguments, Trainer\n", "\n", "model = AutoModelForCausalLM.from_pretrained(model_checkpoint)\n", "\n", "training_args = TrainingArguments(\n", " output_dir=\"./my_bot_model\",\n", " evaluation_strategy=\"no\",\n", " learning_rate=2e-5,\n", " per_device_train_batch_size=2,\n", " num_train_epochs=1,\n", " save_strategy=\"epoch\",\n", " weight_decay=0.01,\n", " fp16=True # You said you have 4GB GPU\n", ")\n", "\n", "trainer = Trainer(\n", " model=model,\n", " args=training_args,\n", " train_dataset=tokenized_data,\n", " tokenizer=tokenizer\n", ")\n", "\n", "trainer.train()\n", "model.save_pretrained(\"./my_bot_model\")\n", "tokenizer.save_pretrained(\"./my_bot_model\")\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "57b71657", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "💬 Model Answer:\n", " The total work done on an object when it is moved upwards against gravity is approximately 3.8x faster than the total work done on an object in a vacuum.\n" ] } ], "source": [ "import torch\n", "\n", "model = AutoModelForCausalLM.from_pretrained(\"./my_bot_model\")\n", "tokenizer = AutoTokenizer.from_pretrained(\"./my_bot_model\")\n", "\n", "question = \"What is the total work done on an object when it is moved upwards against gravity?\"\n", "input_text = f\"### Question: {question}\\n### Answer:\"\n", "inputs = tokenizer(input_text, return_tensors=\"pt\").to(model.device)\n", "\n", "with torch.no_grad():\n", " output = model.generate(\n", " **inputs,\n", " max_length=256,\n", " do_sample=True,\n", " temperature=0.7,\n", " top_p=0.9,\n", " top_k=50,\n", " pad_token_id=tokenizer.eos_token_id\n", " )\n", "\n", "response = tokenizer.decode(output[0], skip_special_tokens=True)\n", "answer = response.replace(input_text, \"\").strip()\n", "\n", "print(\"💬 Model Answer:\\n\", answer)\n" ] } ], "metadata": { "kernelspec": { "display_name": "base", "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.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }