日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Llama2-7B基于DSW的全參數微調訓練

本方案使用阿里云DSWLlama-2-7B-Chat模型進行全參數微調。DSW是一款交互式建模平臺,適合需要定制化微調模型并追求優化效果的開發者。

準備環境和資源

  • 創建工作空間,詳情請參見創建工作空間

  • 創建DSW實例,其中關鍵參數配置如下。具體操作,請參見創建DSW實例

    • 資源規格:推薦使用GU100。本方案選擇:ecs.gn7e-c16g1.4xlarge。

    • 鏡像:建議使用Python3.9及以上版本。本方案在官方鏡像中選擇pytorch-develop:1.12-gpu-py39-cu113-ubuntu20.04

  • 創建OSS Bucket存儲空間和目錄,用來存放訓練獲得的模型文件。具體操作,請參見控制臺創建存儲空間管理目錄

步驟一:準備Llama-2-7B-Chat模型

  1. 進入DSW開發環境。

    1. 登錄PAI控制臺

    2. 在頁面左上方,選擇DSW實例所在的地域。

    3. 在左側導航欄單擊工作空間列表,在工作空間列表頁面中單擊默認工作空間名稱,進入對應工作空間內。

    4. 在左側導航欄,選擇模型開發與訓練>交互式建模(DSW)

    5. 單擊需要打開的實例操作列下的打開,進入DSW實例開發環境。

  2. Launcher頁面中,單擊快速開始區域Notebook下的Python3

  3. Notebook中執行以下代碼下載模型文件。代碼會自動選擇適當的下載地址,并將模型文件下載至當前目錄。

    說明

    如果您所在的地域不在url_link指定的可用地域范圍內,您可以選擇與您最近的可用地域鏈接進行下載。不同的地域之間不共享內網,因此您需要將鏈接中的-internal刪除。同一個地域內的數據下載速度更快,雖然不同地域之間的數據也是可以下載的,但下載速度會相對較慢。

    import os
    dsw_region = os.environ.get("dsw_region")
    url_link = {
        "cn-shanghai": "https://atp-modelzoo-sh.oss-cn-shanghai-internal.aliyuncs.com/release/tutorials/llama2/llama2-7b.tar.gz",
        "cn-hangzhou": "https://atp-modelzoo.oss-cn-hangzhou-internal.aliyuncs.com/release/tutorials/llama2/llama2-7b.tar.gz",
        "cn-shenzhen": "https://atp-modelzoo-sz.oss-cn-shenzhen-internal.aliyuncs.com/release/tutorials/llama2/llama2-7b.tar.gz",
        "cn-beijing": "https://atp-modelzoo-bj.oss-cn-beijing-internal.aliyuncs.com/release/tutorials/llama2/llama2-7b.tar.gz", 
    }
    
    path = url_link[dsw_region]
    os.environ['LINK_CHAT'] = path
    !wget $LINK_CHAT
    !tar -zxvf llama2-7b.tar.gz

    系統輸出結果示例如下。

    --2024-06-17 15:45:05--  https://atp-modelzoo-bj.oss-cn-beijing-internal.aliyuncs.com/release/tutorials/llama2/llama2-7b.tar.gz
    Resolving atp-modelzoo-bj.oss-cn-beijing-internal.aliyuncs.com (atp-modelzoo-bj.oss-cn-beijing-internal.aliyuncs.com)... 100.118.58.7, 100.118.58.8, 100.118.58.9, ...
    Connecting to atp-modelzoo-bj.oss-cn-beijing-internal.aliyuncs.com (atp-modelzoo-bj.oss-cn-beijing-internal.aliyuncs.com)|100.118.58.7|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 12621474981 (12G) [application/gzip]
    Saving to: ‘llama2-7b.tar.gz’
    
    llama2-7b.tar.gz    100%[===================>]  11.75G   103MB/s    in 1m 54s  
    
    2024-06-17 15:47:00 (105 MB/s) - ‘llama2-7b.tar.gz’ saved [12621474981/12621474981]
    
    llama2-7b/
    llama2-7b/generation_config.json
    llama2-7b/gitattributes.txt
    llama2-7b/config.json
    llama2-7b/pytorch_model.bin.index.json
    llama2-7b/USE_POLICY.md
    llama2-7b/README.md
    llama2-7b/LICENSE.txt
    llama2-7b/pytorch_model-00003-of-00003.bin
    llama2-7b/special_tokens_map.json
    llama2-7b/Responsible-Use-Guide.pdf
    llama2-7b/tokenizer.model
    llama2-7b/pytorch_model-00001-of-00003.bin
    llama2-7b/tokenizer_config.json
    llama2-7b/pytorch_model-00002-of-00003.bin
    llama2-7b/tokenizer.json
    llama2-7b/added_tokens.json

此外,您也可以在ModelScope下載Llama-2-7B-Chat模型文件,然后將其上傳到DSW開發環境中。具體操作,請參見上傳與下載數據文件

步驟二:下載和安裝環境

DSWNotebook中執行以下命令,即可下載并安裝微調Llama-2-7B-Chat模型所需的環境。

! wget https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/llama2/ColossalAI.tar.gz
! tar -zxvf ColossalAI.tar.gz
! pip install ColossalAI/.
! pip install ColossalAI/applications/Chat/.
! pip install transformers==4.30.0
! pip install gradio==3.11

其中:

  • ColossalAI是大規模并行AI訓練系統。在本方案中,DSW使用該框架進行模型微調。

  • transformers是基于transformers模型結構的預訓練語言庫。

  • gradio是一個快速構建機器學習Web展示頁面的開源庫。

步驟三:下載訓練數據

DSWNotebook中執行以下命令下載模型訓練所需的數據。在本方案中,PAI提供的是一份創意生成數據,包括發言稿生成等內容。您也可以參考該數據格式自行準備訓練數據。

! wget https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/llama2/llama_data.json
! wget https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/llama2/llama_test.json

步驟四:微調模型

DSWNotebook中執行以下命令進行模型微調訓練。命令執行成功后,系統將會把訓練得到的模型文件輸出到當前目錄下的sft_llama2-7b子目錄中。

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

命令執行成功后,系統輸出結果示例如下:

[08/01/23 16:00:27] INFO     colossalai - colossalai - INFO:                    
                             /home/pai/lib/python3.9/site-packages/colossalai/co
                             ntext/parallel_context.py:522 set_device           
                    INFO     colossalai - colossalai - INFO: process rank 0 is  
                             bound to device 0                                  
dsw-76037-687bb6c4c-plp2k:625:625 [0] NCCL INFO Bootstrap : Using eth0:10.224.160.21<0>
dsw-76037-687bb6c4c-plp2k:625:625 [0] NCCL INFO NET/Plugin : No plugin found (libnccl-net.so), using internal implementation
......
steps:  95%|██████████████████████████████▍ | 1178/1240 [11:41<00:36,  1.69it/s][08/01/23 16:14:25] INFO     colossalai - colossalai - INFO:                    
                             /home/pai/lib/python3.9/site-packages/coati/trainer
                             /sft.py:98 _eval                                   
                    INFO     colossalai - colossalai - INFO: Eval Epoch 18/20   
                             loss 0.4501953125                                  
steps: 100%|████████████████████████████████| 1240/1240 [12:18<00:00,  1.72it/s][08/01/23 16:15:02] INFO     colossalai - colossalai - INFO:                    
                             /home/pai/lib/python3.9/site-packages/coati/trainer
                             /sft.py:98 _eval                                   
                    INFO     colossalai - colossalai - INFO: Eval Epoch 19/20   
                             loss 0.4501953125                                  
steps: 100%|████████████████████████████████| 1240/1240 [13:30<00:00,  1.53it/s]

步驟五:離線推理模型

模型訓練完成后,您可以在DSWNotebook中執行以下命令啟動WebUI應用。在WebUI頁面試玩模型,并根據返回結果來評估模型推理效果。

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

# 模型地址替換為自己訓練好的模型地址。
tokenizer = AutoTokenizer.from_pretrained("/mnt/workspace/sft_llama2-7b", trust_remote_code=True)
# 模型地址替換為自己訓練好的模型地址。
model = AutoModelForCausalLM.from_pretrained("/mnt/workspace/sft_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=50)
    res = pipe(text)
    parts = res[0]['generated_text'].split('<|endoftext|>', 1)
    return parts[0][len(text):]   


demo = gr.Blocks()
with demo:
    input_prompt = gr.Textbox(label="請輸入問題", value="That game hurt.The emotion expressed in the above sentence is anger or not, answer yes or no.", 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)

其中:tokenizermodel中的路徑需要替換為步驟四中訓練獲得的模型路徑。

系統返回結果示例如下:

說明
  • 如果在回顯結果中出現錯誤ImportError: cannot import name 'TypeAliasType' from 'typing_extensions',您可以嘗試執行以下命令并重啟Notebook,然后重新執行上述命令即可。

    pip install --upgrade typing_extensions
  • 如果在回顯結果中出現TypeError: __init__() got an unexpected keyword argument 'socket_options',您可以嘗試執行以下命令并重啟Notebook,然后重新執行上述命令即可。

    pip install --upgrade httpx httpcore
Loading widget...
Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.
說明

由于http://127.0.0.1:7860為內網訪問地址,僅支持在當前的DSW實例內部通過單擊鏈接來訪問WebUI頁面,不支持通過外部瀏覽器直接訪問。

在返回結果中,單擊local URL后面的鏈接可以打開WebUI頁面。在WebUI頁面進行離線推理的效果示例如下:image.png

步驟六:部署模型服務

您可以參照以下操作步驟將上述訓練獲得的模型部署至EAS

  1. 步驟四中訓練獲得的模型文件上傳至OSS Bucket存儲目錄中。

    1. DSW中安裝ossutil并完成配置,詳情請參見安裝ossutil

    2. DSWTerminal中,在sft_llama2-7b目錄同級的目錄中執行以下命令,將模型文件上傳到OSS Bucket存儲空間。更多詳細內容,請參見命令行工具ossutil命令參考

      ossutil64 cp -r sft_llama2-7b/ oss://examplebucket/exampledirectory/
  2. 登錄PAI控制臺,在頁面上方選擇目標地域,并在右側選擇目標工作空間,然后單擊進入EAS

  3. 單擊部署服務,然后在自定義模型部署區域,單擊自定義部署

  4. 自定義部署頁面,配置以下關鍵參數。

    參數

    描述

    服務名稱

    自定義服務名稱。本案例使用的示例值為:chatllm_llama2_7b

    部署方式

    選擇鏡像部署,并選中開啟Web應用

    鏡像配置

    官方鏡像列表中選擇chat-llm-webui>chat-llm-webui:3.0

    說明

    由于版本迭代迅速,部署時鏡像版本選擇最高版本即可。

    模型配置

    選擇OSS類型的掛載方式,并配置以下參數:

    • OSS:配置為模型文件所在的OSS存儲路徑。

    • 掛載路徑:配置為/llama2-finetune

    運行命令

    服務運行命令配置如下,本方案選擇使用自定義模型配置。

    • 使用自定義模型配置為:python webui/webui_server.py --port=8000 --model-path=/llama2-finetune

    • 如果使用7B的模型進行部署:python webui/webui_server.py --port=8000 --model-path=meta-llama/Llama-2-7b-chat-hf

    • 如果使用13B的模型進行部署:python webui/webui_server.py --port=8000 --model-path=meta-llama/Llama-2-13b-chat-hf --precision=fp16

    端口號

    8000

    資源類型

    選擇公共資源

    部署資源

    本方案選擇GPU類型,資源規格推薦使用ecs.gn6e-c12g1.3xlarge

    • 13B的模型務必使用gn6e及更高規格的機型。

    • 7B的模型可以使用A10GU30機型。

    額外系統盤

    配置為50 GB。

  5. 單擊部署,大約等待5分鐘后即可完成模型部署。

步驟七:啟動WebUI進行模型推理

  1. 單擊目標服務的服務方式列下的查看Web應用image

  2. WebUI頁面進行模型推理驗證。

    在輸入文本框中輸入請求內容,例如:請以軟件工程師的身份,寫一篇入職的發言稿。,單擊Send,即可輸出結果。image.png