|
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