Llama2-7B-Chat大模型微调实战

Llama2-7B-Chat大模型微调实战

Llama2系列是Meta开发并公开的大型语言模型(LLMs),有7B、13B和70B三种不同参数大小的模型,每种参数大小分别对应一个预训练和一个微调的版本。

微调版本称为Llama2-Chat,使用了和 ChatGPT 相似的技术,针对对话进行了优化。相比于 Llama1,Llama2的训练数据多了 40%,上下文长度翻倍,并采用了分组查询注意力机制。特别地,Llama2的预训练模型在2万亿的token 上训练,精调的Llama2-Chat模型在100万人类标记数据上进行进一步训练得到。Llama-2-Chat模型在Meta多数基准上优于开源聊天模型,并且在Meta和安全性的人类评估中,与一些流行的闭源模型如ChatGPT和PaLM相当。

Llama2-7B-Chat是具有70亿参数的微调模型,本文将以Llama2-7B-Chat为例,为您介绍如何在PAI-DSW中微调Llama2大模型。

运行环境要求

Python环境3.9以上,GPU推荐使用V100(32GB)

准备工作

下载Llama2-7B-Chat

首先,下载模型文件。 您可以选择直接执行下面脚本下载,也可以选择从ModelScope下载模型(Modelscope模型主页)。 运行如下代码,会根据当前地域为您选择合适的下载地址,并将模型下载到当前目录。
wget后自解压的文件目录如下:

Llama-2-7b-chat目录结构

下载和安装环境

接着下载和安装所需要的环境。(记得安装完成之后重启notebook,不然这些包导入不进来发生报错)

  • ColossalAI是大规模并行AI训练系统,在本例中我们使用该框架进行模型微调。
  • transformers是基于transformers模型结构的预训练语言库。
  • gradio是一个快速构建机器学习Web展示页面的开源库。


    依赖安装

下载json训练数据

下载训练所需的数据,这里我们提供的一份创意生成数据,包括发言稿生成等内容。
您也可以参考该格式,自行准备所需数据。

数据格式如图:
训练数据和测试数据格式

微调模型

! pwd
! sh ColossalAI/applications/Chat/examples/train_sft.sh

试用模型

模型训练完成后,下载我们提供的webUI demo,使用Gradio构建页面,使用pipeline进行推理,试玩微调完成的模型(注意模型地址替换为自己训练好的模型地址)。建议用英文进行提问。

import gradio as gr
import requests
import json
from transformers import AutoTokenizer, AutoModelForCausalLM

#模型地址替换为自己训练好的模型地址
tokenizer = AutoTokenizer.from_pretrained("llama2-7b",trust_remote_code=True)
#模型地址替换为自己训练好的模型地址
model = AutoModelForCausalLM.from_pretrained("llama2-7b",trust_remote_code=True).eval().half().cuda()

def inference(text):
    from transformers import pipeline

    pipe = pipeline("text-generation", model=model, tokenizer=tokenizer,device='cuda:0', max_new_tokens=400)
    res=pipe(text)
    return res[0]['generated_text'][len(text):]
    

demo = gr.Blocks()
with demo:
    input_prompt = gr.Textbox(label="请输入需求", value="请以软件工程师的身份,写一篇入职的发言稿。", lines=6)
    generated_txt = gr.Textbox(lines=6)
    b1 = gr.Button("发送")
    b1.click(inference, inputs=[input_prompt], outputs=generated_txt) 

demo.launch(enable_queue=True, share=False)

完整的Jupyter文件llama2_notebook.ipynb如下:

{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d43602a6-233c-4281-b468-30fdd92b57b7",
   "metadata": {},
   "source": [
    "# Llama2-7B-Chat大模型微调实战"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be1672a2-32a8-4def-807c-1423791f3ed7",
   "metadata": {},
   "source": [
    "Llama2系列是Meta开发并公开的大型语言模型(LLMs),有7B、13B和70B三种不同参数大小的模型,每种参数大小分别对应一个预训练和一个微调的版本。\n",
    "\n",
    "微调版本称为Llama2-Chat,使用了和 ChatGPT 相似的技术,针对对话进行了优化。相比于 Llama1,Llama2的训练数据多了 40%,上下文长度翻倍,并采用了分组查询注意力机制。特别地,Llama2的预训练模型在2万亿的token 上训练,精调的Llama2-Chat模型在100万人类标记数据上进行进一步训练得到。Llama-2-Chat模型在Meta多数基准上优于开源聊天模型,并且在Meta和安全性的人类评估中,与一些流行的闭源模型如ChatGPT和PaLM相当。\n",
    "\n",
    "Llama2-7B-Chat是具有70亿参数的微调模型,本文将以Llama2-7B-Chat为例,为您介绍如何在PAI-DSW中微调Llama2大模型。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eb728f1f-6b56-41dd-867f-1a133abf3fad",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true,
    "tags": []
   },
   "source": [
    "### 注意:使用此模型受Meta许可证的约束。在使用模型前,请确认已经前往[自定义可商用开源协议](https://ai.meta.com/resources/models-and-libraries/llama-downloads/)网站并完成申请。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7aa624e9-5329-4547-9d79-720da66888de",
   "metadata": {
    "tags": []
   },
   "source": [
    "## 运行环境要求"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "99a786ce-0ea1-4295-94e2-8e34b26df9fe",
   "metadata": {},
   "source": [
    "Python环境3.9以上,GPU推荐使用V100(32GB)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6419088a-76b9-47bd-be1c-91829db2745e",
   "metadata": {
    "tags": []
   },
   "source": [
    "## 准备工作"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "516b74dd-77dd-4800-b79d-0741223891fc",
   "metadata": {},
   "source": [
    "### 下载Llama2-7B-Chat"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "da3c86c3-5c18-4067-8915-0d3e8b69b8eb",
   "metadata": {
    "tags": []
   },
   "source": [
    "首先,下载模型文件。\n",
    "您可以选择直接执行下面脚本下载,也可以选择从ModelScope下载模型([Modelscope模型主页](https://modelscope.cn/models/modelscope/Llama-2-7b-chat-ms/summary))。\n",
    "运行如下代码,会根据当前地域为您选择合适的下载地址,并将模型下载到当前目录。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e91caf0b-a89d-4230-9322-6e924b93d7e6",
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "execution": {
     "iopub.execute_input": "2024-01-18T01:43:22.641118Z",
     "iopub.status.busy": "2024-01-18T01:43:22.640823Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--2024-01-18 09:43:22--  https://atp-modelzoo.oss-cn-hangzhou-internal.aliyuncs.com/release/tutorials/llama2/llama2-7b.tar.gz\n",
      "正在解析主机 atp-modelzoo.oss-cn-hangzhou-internal.aliyuncs.com (atp-modelzoo.oss-cn-hangzhou-internal.aliyuncs.com)... 100.118.28.44, 100.118.28.50, 100.118.28.49, ...\n",
      "正在连接 atp-modelzoo.oss-cn-hangzhou-internal.aliyuncs.com (atp-modelzoo.oss-cn-hangzhou-internal.aliyuncs.com)|100.118.28.44|:443... 已连接。\n",
      "已发出 HTTP 请求,正在等待回应... 200 OK\n",
      "长度: 12621474981 (12G) [application/gzip]\n",
      "正在保存至: ‘llama2-7b.tar.gz’\n",
      "\n",
      "llama2-7b.tar.gz    100%[===================>]  11.75G  72.2MB/s    用时 2m 40s  \n",
      "\n",
      "2024-01-18 09:46:02 (75.2 MB/s) - 已保存 ‘llama2-7b.tar.gz’ [12621474981/12621474981])\n",
      "\n",
      "llama2-7b/\n",
      "llama2-7b/generation_config.json\n",
      "llama2-7b/gitattributes.txt\n",
      "llama2-7b/config.json\n",
      "llama2-7b/pytorch_model.bin.index.json\n",
      "llama2-7b/USE_POLICY.md\n",
      "llama2-7b/README.md\n",
      "llama2-7b/LICENSE.txt\n",
      "llama2-7b/pytorch_model-00003-of-00003.bin\n",
      "llama2-7b/special_tokens_map.json\n",
      "llama2-7b/Responsible-Use-Guide.pdf\n",
      "llama2-7b/tokenizer.model\n",
      "llama2-7b/pytorch_model-00001-of-00003.bin\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "dsw_region = os.environ.get(\"dsw_region\")\n",
    "url_link = {\n",
    "    \"cn-shanghai\": \"https://atp-modelzoo-sh.oss-cn-shanghai-internal.aliyuncs.com/release/tutorials/llama2/llama2-7b.tar.gz\",\n",
    "    \"cn-hangzhou\": \"https://atp-modelzoo.oss-cn-hangzhou-internal.aliyuncs.com/release/tutorials/llama2/llama2-7b.tar.gz\",\n",
    "    \"cn-shenzhen\": \"https://atp-modelzoo-sz.oss-cn-shenzhen-internal.aliyuncs.com/release/tutorials/llama2/llama2-7b.tar.gz\",\n",
    "    \"cn-beijing\": \"https://atp-modelzoo-bj.oss-cn-beijing-internal.aliyuncs.com/release/tutorials/llama2/llama2-7b.tar.gz\", \n",
    "}\n",
    "\n",
    "path = url_link[dsw_region] if dsw_region in url_link else \"https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/tutorials/llama2/llama2-7b.tar.gz\"\n",
    "os.environ['LINK_CHAT'] = path\n",
    "!wget $LINK_CHAT\n",
    "!tar -zxvf llama2-7b.tar.gz"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4b79abd9-bedb-42d3-8f79-04ab8635e4e8",
   "metadata": {},
   "source": [
    "### 下载和安装环境\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e0358475-0163-495d-9434-eefc6f6afa1a",
   "metadata": {},
   "source": [
    "接着下载和安装所需要的环境。(记得安装完成之后重启notebook,不然这些包导入不进来发生报错)\n",
    "- ColossalAI是大规模并行AI训练系统,在本例中我们使用该框架进行模型微调。\n",
    "- transformers是基于transformers模型结构的预训练语言库。\n",
    "- gradio是一个快速构建机器学习Web展示页面的开源库。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "808fd780-bc67-44eb-96bd-fd716d2b2bb3",
   "metadata": {
    "ExecutionIndicator": {
     "show": false
    },
    "scrolled": true,
    "tags": []
   },
   "outputs": [],
   "source": [
    "! wget https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/llama2/ColossalAI.tar.gz\n",
    "! tar -zxvf ColossalAI.tar.gz\n",
    "! pip install ColossalAI/.\n",
    "! pip install ColossalAI/applications/Chat/.\n",
    "! pip install transformers==4.30.0\n",
    "! pip install gradio==4.7\n",
    "! pip install tokenizers==0.13.3"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e80d05a-6f40-438d-9a6a-927ad2279df4",
   "metadata": {},
   "source": [
    "### 下载示例训练数据"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f65757f-4275-48d6-a8b4-79d986af7ca0",
   "metadata": {},
   "source": [
    "下载训练所需的数据,这里我们提供的一份创意生成数据,包括发言稿生成等内容。\n",
    "\n",
    "您也可以参考该格式,自行准备所需数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ad6b5ae5-2e0c-42f6-b28e-73dc93d16e9f",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "! wget https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/llama2/llama_data.json\n",
    "! wget https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/llama2/llama_test.json"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0313c446-ccf7-4129-89a7-c677043c99b9",
   "metadata": {},
   "source": [
    "## 微调模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8220a63c-f752-47d1-8338-05c85a95329c",
   "metadata": {},
   "source": [
    "您可以使用已经写好的训练脚本,进行模型训练,约占用31G显存。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "32e01f3b-e9ed-4584-9091-44b10c9eceb0",
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "execution": {
     "iopub.execute_input": "2023-07-27T06:47:14.150932Z",
     "iopub.status.busy": "2023-07-27T06:47:14.150575Z",
     "iopub.status.idle": "2023-07-27T07:03:06.676378Z",
     "shell.execute_reply": "2023-07-27T07:03:06.675729Z",
     "shell.execute_reply.started": "2023-07-27T06:47:14.150908Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/mnt/workspace/demos/llama2_notebook\n",
      "\u001b[2;36m[07/27/23 14:47:18]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/colossalai/co\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35mntext/\u001b[0m\u001b[95mparallel_context.py\u001b[0m:\u001b[1;36m522\u001b[0m set_device           \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: process rank \u001b[1;36m0\u001b[0m is  \n",
      "\u001b[2;36m                    \u001b[0m         bound to device \u001b[1;36m0\u001b[0m                                  \n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2322 [0] NCCL INFO Bootstrap : Using eth0:10.224.144.113<0>\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2322 [0] NCCL INFO NET/Plugin : No plugin found (libnccl-net.so), using internal implementation\n",
      "\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2322 [0] misc/ibvwrap.cc:63 NCCL WARN Failed to open libibverbs.so[.1]\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2322 [0] NCCL INFO NET/Socket : Using [0]eth0:10.224.144.113<0>\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2322 [0] NCCL INFO Using network Socket\n",
      "NCCL version 2.10.3+cuda11.3\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2398 [0] NCCL INFO NCCL_MAX_NCHANNELS set by environment to 2.\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2398 [0] NCCL INFO NCCL_MIN_NCHANNELS set by environment to 2.\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2398 [0] NCCL INFO Channel 00/02 :    0\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2398 [0] NCCL INFO Channel 01/02 :    0\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2398 [0] NCCL INFO Trees [0] -1/-1/-1->0->-1 [1] -1/-1/-1->0->-1\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2398 [0] NCCL INFO Connected all rings\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2398 [0] NCCL INFO Connected all trees\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2398 [0] NCCL INFO 2 coll channels, 2 p2p channels, 2 p2p channels per peer\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2398 [0] NCCL INFO comm 0x7f0824002fb0 rank 0 nranks 1 cudaDev 0 busId 80 - Init COMPLETE\n",
      "\u001b[2;36m[07/27/23 14:47:19]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/colossalai/co\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35mntext/\u001b[0m\u001b[95mparallel_context.py\u001b[0m:\u001b[1;36m558\u001b[0m set_seed             \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: initialized seed on\n",
      "\u001b[2;36m                    \u001b[0m         rank \u001b[1;36m0\u001b[0m, numpy: \u001b[1;36m42\u001b[0m, python random: \u001b[1;36m42\u001b[0m,              \n",
      "\u001b[2;36m                    \u001b[0m         ParallelMode.DATA: \u001b[1;36m42\u001b[0m, ParallelMode.TENSOR: \u001b[1;36m42\u001b[0m,the \n",
      "\u001b[2;36m                    \u001b[0m         default parallel seed is ParallelMode.DATA.        \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/colossalai/\u001b[0m\u001b[95min\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[95mitialize.py\u001b[0m:\u001b[1;36m115\u001b[0m launch                             \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Distributed        \n",
      "\u001b[2;36m                    \u001b[0m         environment is initialized, data parallel size: \u001b[1;36m1\u001b[0m, \n",
      "\u001b[2;36m                    \u001b[0m         pipeline parallel size: \u001b[1;36m1\u001b[0m, tensor parallel size: \u001b[1;36m1\u001b[0m \n",
      "/home/pai/lib/python3.9/site-packages/colossalai/booster/booster.py:70: UserWarning: The plugin will control the accelerator, so the device argument will be ignored.\n",
      "  warnings.warn('The plugin will control the accelerator, so the device argument will be ignored.')\n",
      "/home/pai/lib/python3.9/site-packages/colossalai/booster/booster.py:76: UserWarning: The plugin will control the precision, so the mixed_precision argument will be ignored.\n",
      "  warnings.warn('The plugin will control the precision, so the mixed_precision argument will be ignored.')\n",
      "Loading checkpoint shards: 100%|██████████████████| 3/3 [00:13<00:00,  4.42s/it]\n",
      "\u001b[2;36m[07/27/23 14:48:26]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/mnt/workspace/demos/llama2_notebook/ColossalAI/app\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35mlications/Chat/examples/\u001b[0m\u001b[95msft_dataset_diy.py\u001b[0m:\u001b[1;36m136\u001b[0m     \n",
      "\u001b[2;36m                    \u001b[0m         __init__                                           \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Loading data\u001b[33m...\u001b[0m    \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/mnt/workspace/demos/llama2_notebook/ColossalAI/app\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35mlications/Chat/examples/\u001b[0m\u001b[95msft_dataset_diy.py\u001b[0m:\u001b[1;36m138\u001b[0m     \n",
      "\u001b[2;36m                    \u001b[0m         __init__                                           \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Loaded \u001b[1;36m250\u001b[0m         \n",
      "\u001b[2;36m                    \u001b[0m         examples.                                          \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/mnt/workspace/demos/llama2_notebook/ColossalAI/app\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35mlications/Chat/examples/\u001b[0m\u001b[95msft_dataset_diy.py\u001b[0m:\u001b[1;36m144\u001b[0m     \n",
      "\u001b[2;36m                    \u001b[0m         __init__                                           \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Formatting         \n",
      "\u001b[2;36m                    \u001b[0m         inputs\u001b[33m...\u001b[0m                                          \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/mnt/workspace/demos/llama2_notebook/ColossalAI/app\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35mlications/Chat/examples/\u001b[0m\u001b[95msft_dataset_diy.py\u001b[0m:\u001b[1;36m152\u001b[0m     \n",
      "\u001b[2;36m                    \u001b[0m         __init__                                           \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Tokenizing         \n",
      "\u001b[2;36m                    \u001b[0m         inputs\u001b[33m...\u001b[0m This may take some time\u001b[33m...\u001b[0m               \n",
      "\u001b[2;36m[07/27/23 14:48:27]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/mnt/workspace/demos/llama2_notebook/ColossalAI/app\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35mlications/Chat/examples/\u001b[0m\u001b[95msft_dataset_diy.py\u001b[0m:\u001b[1;36m136\u001b[0m     \n",
      "\u001b[2;36m                    \u001b[0m         __init__                                           \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Loading data\u001b[33m...\u001b[0m    \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/mnt/workspace/demos/llama2_notebook/ColossalAI/app\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35mlications/Chat/examples/\u001b[0m\u001b[95msft_dataset_diy.py\u001b[0m:\u001b[1;36m138\u001b[0m     \n",
      "\u001b[2;36m                    \u001b[0m         __init__                                           \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Loaded \u001b[1;36m6\u001b[0m examples. \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/mnt/workspace/demos/llama2_notebook/ColossalAI/app\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35mlications/Chat/examples/\u001b[0m\u001b[95msft_dataset_diy.py\u001b[0m:\u001b[1;36m144\u001b[0m     \n",
      "\u001b[2;36m                    \u001b[0m         __init__                                           \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Formatting         \n",
      "\u001b[2;36m                    \u001b[0m         inputs\u001b[33m...\u001b[0m                                          \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/mnt/workspace/demos/llama2_notebook/ColossalAI/app\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35mlications/Chat/examples/\u001b[0m\u001b[95msft_dataset_diy.py\u001b[0m:\u001b[1;36m152\u001b[0m     \n",
      "\u001b[2;36m                    \u001b[0m         __init__                                           \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Tokenizing         \n",
      "\u001b[2;36m                    \u001b[0m         inputs\u001b[33m...\u001b[0m This may take some time\u001b[33m...\u001b[0m               \n",
      "steps:   0%|                                           | 0/1240 [00:00<?, ?it/s]dsw-73160-7f4959c7b5-m7p8x:2322:2457 [0] NCCL INFO Channel 00/02 :    0\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2457 [0] NCCL INFO Channel 01/02 :    0\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2457 [0] NCCL INFO Trees [0] -1/-1/-1->0->-1 [1] -1/-1/-1->0->-1\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2457 [0] NCCL INFO Connected all rings\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2457 [0] NCCL INFO Connected all trees\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2457 [0] NCCL INFO 2 coll channels, 2 p2p channels, 2 p2p channels per peer\n",
      "dsw-73160-7f4959c7b5-m7p8x:2322:2457 [0] NCCL INFO comm 0x7f009c002fb0 rank 0 nranks 1 cudaDev 0 busId 80 - Init COMPLETE\n",
      "/home/pai/lib/python3.9/site-packages/torch/optim/lr_scheduler.py:131: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`.  Failure to do this will result in PyTorch skipping the first value of the learning rate schedule. See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate\n",
      "  warnings.warn(\"Detected call of `lr_scheduler.step()` before `optimizer.step()`. \"\n",
      "steps:   5%|█▋                                | 62/1240 [00:36<11:27,  1.71it/s]\u001b[2;36m[07/27/23 14:49:04]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m0\u001b[0m/\u001b[1;36m20\u001b[0m    \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.5631510416666666\u001b[0m                            \n",
      "steps:  10%|███▎                             | 124/1240 [01:13<10:47,  1.72it/s]\u001b[2;36m[07/27/23 14:49:41]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m1\u001b[0m/\u001b[1;36m20\u001b[0m    \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.5260416666666666\u001b[0m                            \n",
      "steps:  15%|████▉                            | 186/1240 [01:49<10:06,  1.74it/s]\u001b[2;36m[07/27/23 14:50:17]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m2\u001b[0m/\u001b[1;36m20\u001b[0m    \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.5039876302083334\u001b[0m                            \n",
      "steps:  20%|██████▌                          | 248/1240 [02:26<09:38,  1.72it/s]\u001b[2;36m[07/27/23 14:50:54]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m3\u001b[0m/\u001b[1;36m20\u001b[0m    \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4903971354166667\u001b[0m                            \n",
      "steps:  25%|████████▎                        | 310/1240 [03:02<09:06,  1.70it/s]\u001b[2;36m[07/27/23 14:51:30]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m4\u001b[0m/\u001b[1;36m20\u001b[0m    \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4816080729166667\u001b[0m                            \n",
      "steps:  30%|█████████▉                       | 372/1240 [03:39<08:20,  1.74it/s]\u001b[2;36m[07/27/23 14:52:07]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m5\u001b[0m/\u001b[1;36m20\u001b[0m    \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4752604166666667\u001b[0m                            \n",
      "steps:  35%|███████████▌                     | 434/1240 [04:16<07:51,  1.71it/s]\u001b[2;36m[07/27/23 14:52:43]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m6\u001b[0m/\u001b[1;36m20\u001b[0m    \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4700520833333333\u001b[0m                            \n",
      "steps:  40%|█████████████▏                   | 496/1240 [04:52<07:18,  1.70it/s]\u001b[2;36m[07/27/23 14:53:20]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m7\u001b[0m/\u001b[1;36m20\u001b[0m    \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.46533203125\u001b[0m                                 \n",
      "steps:  45%|██████████████▊                  | 558/1240 [05:29<06:37,  1.71it/s]\u001b[2;36m[07/27/23 14:53:57]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m8\u001b[0m/\u001b[1;36m20\u001b[0m    \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4623209635416667\u001b[0m                            \n",
      "steps:  50%|████████████████▌                | 620/1240 [06:05<05:53,  1.76it/s]\u001b[2;36m[07/27/23 14:54:33]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m9\u001b[0m/\u001b[1;36m20\u001b[0m    \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4593912760416667\u001b[0m                            \n",
      "steps:  55%|██████████████████▏              | 682/1240 [06:42<05:26,  1.71it/s]\u001b[2;36m[07/27/23 14:55:10]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m10\u001b[0m/\u001b[1;36m20\u001b[0m   \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4574381510416667\u001b[0m                            \n",
      "steps:  60%|███████████████████▊             | 744/1240 [07:18<04:50,  1.71it/s]\u001b[2;36m[07/27/23 14:55:46]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m11\u001b[0m/\u001b[1;36m20\u001b[0m   \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.454833984375\u001b[0m                                \n",
      "steps:  65%|█████████████████████▍           | 806/1240 [07:55<04:14,  1.71it/s]\u001b[2;36m[07/27/23 14:56:23]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m12\u001b[0m/\u001b[1;36m20\u001b[0m   \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.45361328125\u001b[0m                                 \n",
      "steps:  70%|███████████████████████          | 868/1240 [08:32<03:37,  1.71it/s]\u001b[2;36m[07/27/23 14:56:59]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m13\u001b[0m/\u001b[1;36m20\u001b[0m   \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4524739583333333\u001b[0m                            \n",
      "steps:  75%|████████████████████████▊        | 930/1240 [09:08<03:01,  1.71it/s]\u001b[2;36m[07/27/23 14:57:36]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m14\u001b[0m/\u001b[1;36m20\u001b[0m   \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.451416015625\u001b[0m                                \n",
      "steps:  80%|██████████████████████████▍      | 992/1240 [09:45<02:24,  1.72it/s]\u001b[2;36m[07/27/23 14:58:13]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m15\u001b[0m/\u001b[1;36m20\u001b[0m   \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4507649739583333\u001b[0m                            \n",
      "steps:  85%|███████████████████████████▏    | 1054/1240 [10:21<01:48,  1.71it/s]\u001b[2;36m[07/27/23 14:58:49]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m16\u001b[0m/\u001b[1;36m20\u001b[0m   \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4506022135416667\u001b[0m                            \n",
      "steps:  90%|████████████████████████████▊   | 1116/1240 [10:58<01:11,  1.73it/s]\u001b[2;36m[07/27/23 14:59:26]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m17\u001b[0m/\u001b[1;36m20\u001b[0m   \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4505208333333333\u001b[0m                            \n",
      "steps:  95%|██████████████████████████████▍ | 1178/1240 [11:35<00:36,  1.71it/s]\u001b[2;36m[07/27/23 15:00:02]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m18\u001b[0m/\u001b[1;36m20\u001b[0m   \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4501953125\u001b[0m                                  \n",
      "steps: 100%|████████████████████████████████| 1240/1240 [12:11<00:00,  1.75it/s]\u001b[2;36m[07/27/23 15:00:39]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO:                    \n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/home/pai/lib/python3.9/site-packages/coati/trainer\u001b[0m\n",
      "\u001b[2;36m                    \u001b[0m         \u001b[35m/\u001b[0m\u001b[95msft.py\u001b[0m:\u001b[1;36m98\u001b[0m _eval                                   \n",
      "\u001b[2;36m                   \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO    \u001b[0m colossalai - colossalai - INFO: Eval Epoch \u001b[1;36m19\u001b[0m/\u001b[1;36m20\u001b[0m   \n",
      "\u001b[2;36m                    \u001b[0m         loss \u001b[1;36m0.4501953125\u001b[0m                                  \n",
      "steps: 100%|████████████████████████████████| 1240/1240 [14:36<00:00,  1.41it/s]\n"
     ]
    }
   ],
   "source": [
    "! pwd\n",
    "! sh ColossalAI/applications/Chat/examples/train_sft.sh"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "96366c97-720e-49c3-9727-9be9e2552c28",
   "metadata": {},
   "source": [
    "## 试玩模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4d062161-e56f-45d5-9cd0-487476832fa9",
   "metadata": {},
   "source": [
    "模型训练完成后,下载我们提供的webUI demo,试玩微调完成的模型(注意模型地址替换为自己训练好的模型地址)。建议用英文进行提问。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bbd6d240-b903-4a0d-afbe-be07e64d5e52",
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import gradio as gr\n",
    "import requests\n",
    "import json\n",
    "from transformers import AutoTokenizer, AutoModelForCausalLM\n",
    "\n",
    "#模型地址替换为自己训练好的模型地址\n",
    "tokenizer = AutoTokenizer.from_pretrained(\"sft_llama2-7b\",trust_remote_code=True)\n",
    "#模型地址替换为自己训练好的模型地址\n",
    "model = AutoModelForCausalLM.from_pretrained(\"sft_llama2-7b\",trust_remote_code=True).eval().half().cuda()\n",
    "\n",
    "def inference(text):\n",
    "    from transformers import pipeline\n",
    "\n",
    "    pipe = pipeline(\"text-generation\", model=model, tokenizer=tokenizer,device='cuda:0', max_new_tokens=400)\n",
    "    res=pipe(text)\n",
    "    return res[0]['generated_text'][len(text):]\n",
    "    \n",
    "\n",
    "demo = gr.Blocks()\n",
    "with demo:\n",
    "    input_prompt = gr.Textbox(label=\"请输入需求\", value=\"请以软件工程师的身份,写一篇入职的发言稿。\", lines=6)\n",
    "    generated_txt = gr.Textbox(lines=6)\n",
    "    b1 = gr.Button(\"发送\")\n",
    "    b1.click(inference, inputs=[input_prompt], outputs=generated_txt) \n",
    "\n",
    "demo.launch(enable_queue=True, share=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "09a1875f-db2b-48ac-9582-e11f36417d8e",
   "metadata": {},
   "source": [
    "## 模型上传至OSS并在线部署"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bd80d943-cb08-4546-9e5e-e517d6cd26f2",
   "metadata": {},
   "source": [
    "如果希望将上述模型部署至PAI-EAS,您需要将前面训练完成的模型上传至OSS。\n",
    "\n",
    "下列OSS客户端参数配置请您根据自己的信息填写后再执行。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "14d809e0-de6a-4230-9086-f6ebdff87ae2",
   "metadata": {
    "ExecutionIndicator": {
     "show": false
    },
    "execution": {
     "iopub.execute_input": "2023-07-21T03:47:15.243065Z",
     "iopub.status.busy": "2023-07-21T03:47:15.242706Z",
     "iopub.status.idle": "2023-07-21T03:47:16.220501Z",
     "shell.execute_reply": "2023-07-21T03:47:16.219607Z",
     "shell.execute_reply.started": "2023-07-21T03:47:15.243045Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# encoding=utf-8\n",
    "import oss2\n",
    "import os\n",
    "\n",
    "AK='yourAccessKeyId'\n",
    "SK='yourAccessKeySecret'\n",
    "endpoint = 'yourEndpoint'\n",
    "dir='your model output dir'\n",
    "auth = oss2.Auth(AK, SK)\n",
    "bucket = oss2.Bucket(auth, endpoint, 'examplebucket')\n",
    "for filename in os.listdir(dir):\n",
    "    current_file_path = dir+filename\n",
    "    file_path = '需要上传地址'\n",
    "    bucket.put_object_from_file(file_path, current_file_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ef00f95b-cfef-445e-8fae-5ebc0de26eb3",
   "metadata": {},
   "source": [
    "最后进行部署工作,步骤请参考[EAS部署最佳实践](https://help.aliyun.com/document_detail/2392575.html)。"
   ]
  }
 ],
 "metadata": {
  "dsw_sample": {
   "buildId": "648",
   "pipeline": "pai-dsw-examples-master"
  },
  "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.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容