|
31 | 31 | }, |
32 | 32 | "outputs": [], |
33 | 33 | "source": [ |
34 | | - "!pip install xturing --upgrade" |
| 34 | + "!pip install xturing --upgrade\n", |
| 35 | + "!pip install xturing[int4] --upgrade" |
35 | 36 | ] |
36 | 37 | }, |
37 | 38 | { |
38 | | - "cell_type": "code", |
39 | | - "execution_count": 7, |
| 39 | + "cell_type": "markdown", |
40 | 40 | "metadata": { |
41 | 41 | "collapsed": false |
42 | 42 | }, |
43 | | - "outputs": [], |
44 | 43 | "source": [ |
45 | | - "import subprocess\n", |
46 | | - "from pathlib import Path\n", |
47 | | - "\n", |
48 | | - "def pull_docker_image(image):\n", |
49 | | - " cmd = [\"docker\", \"pull\", image]\n", |
50 | | - " subprocess.run(cmd, check=True)\n", |
51 | | - "\n", |
52 | | - "\n", |
53 | | - "def run_docker_container(image, port_mapping, env_vars=None, gpus=None, volumes=None):\n", |
54 | | - " cmd = [\"docker\", \"container\", \"run\"]\n", |
55 | | - "\n", |
56 | | - " if env_vars is None:\n", |
57 | | - " env_vars = {}\n", |
58 | | - "\n", |
59 | | - " if volumes is None:\n", |
60 | | - " volumes = {}\n", |
61 | | - "\n", |
62 | | - " if gpus is not None:\n", |
63 | | - " cmd.extend([\"--gpus\", gpus])\n", |
64 | | - "\n", |
65 | | - " for key, value in env_vars.items():\n", |
66 | | - " cmd.extend([\"-e\", f\"{key}={value}\"])\n", |
67 | | - "\n", |
68 | | - " for local_path, container_path in volumes.items():\n", |
69 | | - " cmd.extend([\"-v\", f\"{str(Path(local_path).resolve())}:{container_path}\"])\n", |
70 | | - "\n", |
71 | | - " cmd.extend([\"-p\", port_mapping, image])\n", |
72 | | - "\n", |
73 | | - " subprocess.run(cmd)" |
| 44 | + "## 2. Load model and dataset" |
74 | 45 | ] |
75 | 46 | }, |
76 | 47 | { |
77 | | - "cell_type": "markdown", |
| 48 | + "cell_type": "code", |
| 49 | + "execution_count": null, |
78 | 50 | "metadata": { |
79 | | - "collapsed": false |
| 51 | + "collapsed": false, |
| 52 | + "pycharm": { |
| 53 | + "is_executing": true |
| 54 | + } |
80 | 55 | }, |
| 56 | + "outputs": [], |
81 | 57 | "source": [ |
82 | | - "## 2. Load and run docker image" |
| 58 | + "from xturing.datasets.instruction_dataset import InstructionDataset\n", |
| 59 | + "from xturing.models import BaseModel\n", |
| 60 | + "\n", |
| 61 | + "instruction_dataset = InstructionDataset(\"../llama/alpaca_data\")\n", |
| 62 | + "# Initializes the model\n", |
| 63 | + "model = BaseModel.create(\"llama_lora_int4\")" |
83 | 64 | ] |
84 | 65 | }, |
85 | 66 | { |
86 | 67 | "cell_type": "markdown", |
| 68 | + "source": [ |
| 69 | + "## 3. Start the finetuning" |
| 70 | + ], |
87 | 71 | "metadata": { |
88 | 72 | "collapsed": false |
89 | | - }, |
90 | | - "source": [ |
91 | | - "1. Install Docker on your machine if you haven't already. You can follow the [official Docker documentation](https://docs.docker.com/engine/install/) for installation instructions.\n", |
92 | | - "2. Install NVIDIA Container Toolkit\n", |
93 | | - " ```bash\n", |
94 | | - " sudo apt-get install -y nvidia-docker2\n", |
95 | | - " ```\n", |
96 | | - "3. Run the Docker daemon\n", |
97 | | - " ```bash\n", |
98 | | - " sudo systemctl start docker\n", |
99 | | - " ```\n" |
100 | | - ] |
| 73 | + } |
101 | 74 | }, |
102 | 75 | { |
103 | 76 | "cell_type": "code", |
104 | 77 | "execution_count": null, |
105 | | - "metadata": { |
106 | | - "collapsed": false, |
107 | | - "pycharm": { |
108 | | - "is_executing": true |
109 | | - } |
110 | | - }, |
111 | 78 | "outputs": [], |
112 | 79 | "source": [ |
113 | | - "image = \"public.ecr.aws/t8g5g2q5/xturing:int4_finetuning\"\n", |
114 | | - "port_mapping = \"5000:5000\"\n", |
115 | | - "env_vars = {\n", |
116 | | - " \"WANDB_MODE\": \"dryrun\",\n", |
117 | | - " \"MICRO_BATCH_SIZE\": \"1\", # change this to increase your micro batch size\n", |
118 | | - "}\n", |
119 | | - "# if you want to log results to wandb, set the following env var\n", |
120 | | - "# env_vars = {\n", |
121 | | - "# \"WANDB_API_KEY\": \"<your_wandb_api_key>\",\n", |
122 | | - "# \"WANDB_PROJECT\": \"your_project_name\",\n", |
123 | | - "# \"WANDB_ENTITY\": \"your_entity_name\",\n", |
124 | | - "# # Add more environment variables as needed\n", |
125 | | - "# }\n", |
126 | | - "volumes = {\n", |
127 | | - " # \"<where to save model>\": \"/model\",\n", |
128 | | - " \"../llama/alpaca_data\": \"/data\", # change this to your data path if you want\n", |
129 | | - "}\n", |
130 | | - "gpus = \"all\"\n", |
131 | | - "\n", |
132 | | - "pull_docker_image(image)\n", |
133 | | - "\n", |
134 | | - "run_docker_container(image, port_mapping, env_vars, gpus, volumes)" |
135 | | - ] |
| 80 | + "# Finetuned the model\n", |
| 81 | + "model.finetune(dataset=instruction_dataset)" |
| 82 | + ], |
| 83 | + "metadata": { |
| 84 | + "collapsed": false |
| 85 | + } |
136 | 86 | }, |
137 | 87 | { |
138 | 88 | "cell_type": "markdown", |
139 | | - "metadata": {}, |
140 | 89 | "source": [ |
141 | | - "## Alternately, you can run the example using CLI command:\n", |
142 | | - "\n", |
143 | | - "```bash\n", |
144 | | - "docker run -p 5000:5000 --gpus all -e WANDB_MODE=dryrun -e MICRO_BATCH_SIZE=1 -v /absolute/path/to/alpaca/data:/data public.ecr.aws/t8g5g2q5/xturing:int4_finetuning\n", |
145 | | - "```" |
146 | | - ] |
| 90 | + "## 4. Generate an output text with the fine-tuned model" |
| 91 | + ], |
| 92 | + "metadata": { |
| 93 | + "collapsed": false |
| 94 | + } |
| 95 | + }, |
| 96 | + { |
| 97 | + "cell_type": "code", |
| 98 | + "execution_count": null, |
| 99 | + "outputs": [], |
| 100 | + "source": [ |
| 101 | + "# Once the model has been finetuned, you can start doing inferences\n", |
| 102 | + "output = model.generate(texts=[\"Why LLM models are becoming so important?\"])\n", |
| 103 | + "print(\"Generated output by the model: {}\".format(output))" |
| 104 | + ], |
| 105 | + "metadata": { |
| 106 | + "collapsed": false |
| 107 | + } |
147 | 108 | } |
148 | 109 | ], |
149 | 110 | "metadata": { |
|
0 commit comments