大語言模型數(shù)據(jù)增強與模型蒸餾解決方案
大語言模型的訓(xùn)練和推理過程存在高能耗及長響應(yīng)時間等問題,這些問題限制了其在資源有限場景中使用。為了解決這些問題,PAI提出了模型蒸餾功能。該功能支持將大模型知識遷移到較小模型,從而在保留大部分性能的同時,大幅降低模型的規(guī)模和對計算資源的需求,為更多的實際應(yīng)用場景提供支持。本文將以通義千問2(Qwen2)大語言模型為基礎(chǔ),為您介紹大語言模型數(shù)據(jù)增強和蒸餾解決方案的完整開發(fā)流程。
使用流程
該解決方案的完整開發(fā)流程如下:
您可以參照數(shù)據(jù)格式要求和數(shù)據(jù)準(zhǔn)備策略準(zhǔn)備相應(yīng)的訓(xùn)練數(shù)據(jù)集。
您可以在PAI-Model Gallery中使用預(yù)置的指令增廣模型(Qwen2-1.5B-Instruct-Exp或Qwen2-7B-Instruct-Exp),根據(jù)已準(zhǔn)備好的數(shù)據(jù)集中的指令語義信息,自動擴寫更多相似的指令。指令增廣有助于提升大語言模型的蒸餾訓(xùn)練的泛化性。
您可以在PAI-Model Gallery中使用預(yù)置的指令優(yōu)化模型(Qwen2-1.5B-Instruct-Refine或Qwen2-7B-Instruct-Refine),將已準(zhǔn)備好的數(shù)據(jù)集中的指令(以及增廣的指令)進行優(yōu)化精煉。指令優(yōu)化有助于提升大語言模型的語言生成能力。下表對比展示了Qwen2-7B-Instruct模型在接收簡略與詳細(xì)指令輸入時的輸出情況,表明指令的優(yōu)化對模型輸出有顯著的提升作用。
指令
回復(fù)
優(yōu)化后的指令
優(yōu)化后的回復(fù)
請解釋一下“重力”是什么。
重力是一種自然現(xiàn)象,是所有物體之間相互吸引的力量。它是由物體的質(zhì)量產(chǎn)生的,質(zhì)量越大,產(chǎn)生的重力也越大。重力是宇宙中所有物體之間存在的基本力之一,它決定了物體的運動和位置。地球上的重力是由地球的質(zhì)量產(chǎn)生的,因此所有物體都會受到地球的重力作用,從而產(chǎn)生重力加速度,即9.8米/秒2。
請詳細(xì)解釋“重力”是什么,包括它的定義、產(chǎn)生的原因以及在自然界中的作用。
重力是物理學(xué)中的一種基本力,它是由質(zhì)量體之間相互作用而產(chǎn)生的。根據(jù)牛頓的萬有引力定律,兩個物體之間的引力與它們的質(zhì)量成正比,與它們之間的距離的平方成反比。這意味著,質(zhì)量越大,引力也越大;距離越近,引力也越大。
### 定義
重力通常指的是地球表面附近物體受到的吸引力。地球?qū)λ形矬w施加的這種吸引力是重力的一個實例。在更廣泛的意義上,重力是所有物體之間的相互吸引力,不僅限于地球表面。
### 產(chǎn)生的原因
重力是由物體的質(zhì)量產(chǎn)生的。根據(jù)愛因斯坦的廣義相對論,質(zhì)量會彎曲它周圍的時空結(jié)構(gòu),這種彎曲會導(dǎo)致其他物體沿著彎曲的路徑移動,即我們所理解的“重力”。在牛頓的理論中,重力被解釋為所有物體之間的吸引力,而廣義相對論則提供了一個更深層次的解釋,即質(zhì)量彎曲了時空,從而影響了物體的運動軌跡。
### 在自然界中的作用
重力在自然界中扮演著極其重要的角色:
1. **維持行星軌道**:太陽系中的行星繞太陽運行,是因為它們受到太陽的引力,同時它們自身的引力也作用于太陽,這形成了一個穩(wěn)定的軌道。
2. **地球的形成**:在地球形成初期,巨大的質(zhì)量聚集在一起,通過重力作用形成了行星。
3. **維持地球的形狀**:地球不是完美的球體,而是稍微扁平的,這是由于地球自轉(zhuǎn)產(chǎn)生的離心力與重力的相互作用。
4. **物體的運動**:從蘋果落地到火箭發(fā)射,物體的運動都受到重力的影響。在沒有其他力干擾的情況下,物體將遵循重力作用下的運動規(guī)律。
5. **影響潮汐**:月球和太陽對地球的引力作用導(dǎo)致了潮汐現(xiàn)象,影響海洋水位的周期性變化。
### 結(jié)論
重力是自然界中一種基本且普遍的力,它不僅影響著我們?nèi)粘I钪械奈矬w運動,也是宇宙結(jié)構(gòu)和演化的關(guān)鍵因素。從地球上的物體運動到宇宙的宏觀結(jié)構(gòu),重力無處不在,是理解宇宙物理現(xiàn)象的基礎(chǔ)之一。
寫一首關(guān)于春天的詩。
春日暖陽照人間,
萬物復(fù)蘇展新顏。
綠草如茵鋪大地,
花兒競相綻放間。
微風(fēng)輕拂柳絲間,
鳥兒歡鳴歌聲甜。
溪水潺潺流不息,
魚兒跳躍水中翻。
春雨綿綿潤物華,
滋潤大地生機發(fā)。
農(nóng)民忙碌播種忙,
期待豐收的季節(jié)來。
春光無限好,
讓我們珍惜每一刻。
與大自然共呼吸,
感受春天的美妙與神奇。
創(chuàng)作一首表達春天美景與生機的詩歌。
注意事項:
1. 請在詩中描繪春天的自然景象,如花朵、樹木、小溪等。
2. 表達春天帶來的希望和活力。
3. 保持詩歌的節(jié)奏和韻律。
4. 詩歌長度在20至30行之間。
春之贊歌
春風(fēng)輕拂,萬物復(fù)蘇,
綠意盎然,生機勃發(fā)。
山間溪流,潺潺作響,
映照著,生機勃勃的春光。
桃花笑開,如霞似錦,
杏花輕舞,滿枝紅艷。
梨花雪白,點綴著山野,
一片片,如夢如幻的畫卷。
嫩葉輕搖,綠意盈枝,
鳥語花香,滿溢林間。
小溪潺潺,細(xì)流清澈,
滋潤著,大地的每一寸。
春雨綿綿,潤物無聲,
滋養(yǎng)著,生命的希望。
每一滴,都是大自然的恩賜,
喚醒了,沉睡的大地。
田野里,綠意盎然,
麥苗青青,生機勃勃。
農(nóng)人忙碌,播種希望,
期待著,金秋的豐收。
春風(fēng)吹過,帶著溫暖,
帶來的是,無盡的希望。
每一個生命,都在生長,
在這春的季節(jié),綻放光芒。
春日陽光,溫柔而明媚,
照亮了,每一個角落。
希望與活力,在這里匯聚,
春天的故事,正在上演。
讓我們擁抱這春的季節(jié),
感受生命的奇跡與美好。
在這萬物復(fù)蘇的時光里,
共同見證,希望與夢想的綻放。
您可以在PAI-Model Gallery中使用預(yù)置的教師大語言模型(通義千問2-72B-Instruct)對訓(xùn)練數(shù)據(jù)集中的指令生成回復(fù),從而將對應(yīng)教師大模型的知識進行蒸餾。
您可以在PAI-Model Gallery中使用生成完成的指令-回復(fù)數(shù)據(jù)集,蒸餾訓(xùn)練對應(yīng)較小的學(xué)生模型,用于實際的應(yīng)用場景。
前提條件
在開始執(zhí)行操作前,請確認(rèn)您已完成以下準(zhǔn)備工作:
已開通PAI(DLC、EAS)后付費,并創(chuàng)建默認(rèn)工作空間,詳情請參見開通PAI并創(chuàng)建默認(rèn)工作空間。
已創(chuàng)建OSS存儲空間(Bucket),用于存儲訓(xùn)練數(shù)據(jù)和訓(xùn)練獲得的模型文件。關(guān)于如何創(chuàng)建存儲空間,詳情請參見控制臺創(chuàng)建存儲空間。
準(zhǔn)備指令數(shù)據(jù)
您可以參考數(shù)據(jù)準(zhǔn)備策略和數(shù)據(jù)格式要求準(zhǔn)備指令數(shù)據(jù):
數(shù)據(jù)準(zhǔn)備策略
為了提升模型蒸餾的有效性和穩(wěn)定性,您可以參考以下策略準(zhǔn)備數(shù)據(jù):
您需要準(zhǔn)備至少數(shù)百條數(shù)據(jù),準(zhǔn)備的數(shù)據(jù)多有助于提升模型的效果。
準(zhǔn)備的種子數(shù)據(jù)集的分布應(yīng)該盡可能廣泛且均衡。例如:任務(wù)場景分布廣泛;數(shù)據(jù)輸入輸出長度應(yīng)該包含較短和較長場景;如果數(shù)據(jù)不止一種語言,例如有中文和英文,應(yīng)當(dāng)確保語言分布較為均衡。
處理異常數(shù)據(jù)。即使是少量的異常數(shù)據(jù)也會對微調(diào)效果造成很大的影響。您應(yīng)當(dāng)先使用基于規(guī)則的方式清洗數(shù)據(jù),過濾掉數(shù)據(jù)集中的異常數(shù)據(jù)。
數(shù)據(jù)格式要求
訓(xùn)練數(shù)據(jù)集格式要求為:JSON格式的文件,包含instruction一個字段,為輸入的指令。相應(yīng)的指令數(shù)據(jù)示例如下:
[
{
"instruction": "在2008年金融危機期間,各國政府采取了哪些主要措施來穩(wěn)定金融市場?"
},
{
"instruction": "在氣候變化加劇的背景下,各國政府采取了哪些重要行動來推動可持續(xù)發(fā)展?"
},
{
"instruction": "在2001年科技泡沫破裂期間,各國政府采取了哪些主要措施來支持經(jīng)濟復(fù)蘇?"
}
]
(可選)使用指令增廣模型進行指令增廣
指令增廣是大語言模型提示工程(Prompt Engineering)的一種常見應(yīng)用,用于自動增廣用戶提供的指令數(shù)據(jù)集,以實現(xiàn)數(shù)據(jù)增強的作用。
例如給定如下輸入:
如何做魚香肉絲? 如何準(zhǔn)備GRE考試? 如果被朋友誤會了怎么辦?
模型輸出類似如下結(jié)果:
教我如何做麻婆豆腐? 提供一個關(guān)于如何準(zhǔn)備托福考試的詳細(xì)指南? 如果你在工作中遇到了挫折,你會如何調(diào)整心態(tài)?
由于指令的多樣性直接影響了大語言模型的學(xué)習(xí)泛化性,進行指令增廣能有效提升最終產(chǎn)生的學(xué)生模型的效果。基于Qwen2基座模型,PAI提供了兩款自主研發(fā)的指令增廣模型,分別為Qwen2-1.5B-Instruct-Exp和Qwen2-7B-Instruct-Exp。您可以在PAI-Model Gallery中一鍵部署模型服務(wù),具體操作步驟如下:
部署模型服務(wù)
您可以按照以下操作步驟,將指令增廣模型部署為EAS在線服務(wù):
進入Model Gallery頁面。
登錄PAI控制臺。
在頂部左上角根據(jù)實際情況選擇地域。
在左側(cè)導(dǎo)航欄選擇工作空間列表,單擊指定工作空間名稱,進入對應(yīng)工作空間內(nèi)。
在左側(cè)導(dǎo)航欄選擇
。
在Model Gallery頁面右側(cè)的模型列表中,搜索Qwen2-1.5B-Instruct-Exp或Qwen2-7B-Instruct-Exp,并在相應(yīng)卡片中單擊部署。
在部署配置面板中,系統(tǒng)已默認(rèn)配置了模型服務(wù)信息和資源部署信息,您也可以根據(jù)需要進行修改。參數(shù)配置完成后單擊部署按鈕。
在計費提醒對話框中,單擊確定。
系統(tǒng)自動跳轉(zhuǎn)到部署任務(wù)頁面,當(dāng)狀態(tài)為運行中時,表示服務(wù)部署成功。
調(diào)用模型服務(wù)
服務(wù)部署成功后,您可以使用API進行模型推理。具體使用方法參考LLM大語言模型部署。以下提供一個示例,展示如何通過客戶端發(fā)起Request調(diào)用:
獲取服務(wù)訪問地址和Token。
在服務(wù)詳情頁面,單擊基本信息區(qū)域的查看調(diào)用信息。
在調(diào)用信息對話框中,查詢服務(wù)訪問地址和Token,并保存到本地。
在終端中,創(chuàng)建并執(zhí)行如下Python代碼文件來調(diào)用服務(wù)。
import argparse import json import requests from typing import List def post_http_request(prompt: str, system_prompt: str, host: str, authorization: str, max_new_tokens: int, temperature: float, top_k: int, top_p: float) -> requests.Response: headers = { "User-Agent": "Test Client", "Authorization": f"{authorization}" } pload = { "prompt": prompt, "system_prompt": system_prompt, "top_k": top_k, "top_p": top_p, "temperature": temperature, "max_new_tokens": max_new_tokens, "do_sample": True, "eos_token_id": 151645 } response = requests.post(host, headers=headers, json=pload) return response def get_response(response: requests.Response) -> List[str]: data = json.loads(response.content) output = data["response"] return output if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--top-k", type=int, default=50) parser.add_argument("--top-p", type=float, default=0.95) parser.add_argument("--max-new-tokens", type=int, default=2048) parser.add_argument("--temperature", type=float, default=1) parser.add_argument("--prompt", type=str, default="給我唱首歌。") args = parser.parse_args() prompt = args.prompt top_k = args.top_k top_p = args.top_p temperature = args.temperature max_new_tokens = args.max_new_tokens host = "EAS HOST" authorization = "EAS TOKEN" print(f" --- input: {prompt}\n", flush=True) system_prompt = "我希望你扮演一個指令創(chuàng)建者的角色。 你的目標(biāo)是從【給定指令】中獲取靈感,創(chuàng)建一個全新的指令。" response = post_http_request( prompt, system_prompt, host, authorization, max_new_tokens, temperature, top_k, top_p) output = get_response(response) print(f" --- output: {output}\n", flush=True)
其中:
host:配置為已獲取的服務(wù)訪問地址。
authorization:配置為已獲取的服務(wù)Token。
批量實現(xiàn)指令增廣
您可以使用上述EAS在線服務(wù)進行批量調(diào)用,實現(xiàn)批量指令增廣。以下代碼示例展示了如何讀取自定義的JSON格式數(shù)據(jù)集,批量調(diào)用上面的模型接口進行指令增廣。您需要在終端中,創(chuàng)建并執(zhí)行如下Python代碼文件來批量調(diào)用模型服務(wù)。
import requests
import json
import random
from tqdm import tqdm
from typing import List
input_file_path = "input.json" # 輸入文件名
with open(input_file_path) as fp:
data = json.load(fp)
total_size = 10 # 期望的擴展后的總數(shù)據(jù)量
pbar = tqdm(total=total_size)
while len(data) < total_size:
prompt = random.sample(data, 1)[0]["instruction"]
system_prompt = "我希望你扮演一個指令創(chuàng)建者的角色。 你的目標(biāo)是從【給定指令】中獲取靈感,創(chuàng)建一個全新的指令。"
top_k = 50
top_p = 0.95
temperature = 1
max_new_tokens = 2048
host = "EAS HOST"
authorization = "EAS TOKEN"
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
temp = {
"instruction": output
}
data.append(temp)
pbar.update(1)
pbar.close()
output_file_path = "output.json" # 輸出文件名
with open(output_file_path, 'w') as f:
json.dump(data, f, ensure_ascii=False)
其中:
host:配置為已獲取的服務(wù)訪問地址。
authorization:配置為已獲取的服務(wù)Token。
file_path:請?zhí)鎿Q為數(shù)據(jù)集文件所在的本地路徑。
post_http_request
和get_response
函數(shù)的定義與其在調(diào)用模型服務(wù)的Python腳本中對應(yīng)的函數(shù)定義保持一致。
您也可以使用PAI-Designer的LLM-指令擴充(DLC)組件零代碼實現(xiàn)上述功能。具體操作方法,請參考自定義工作流demo。
(可選)使用指令優(yōu)化模型進行指令優(yōu)化
指令優(yōu)化是大語言模型提示工程(Prompt Engineering)的另一種常見技術(shù),用于自動優(yōu)化用戶提供的指令數(shù)據(jù)集,生成更加詳細(xì)的指令。這些更詳細(xì)的指令能讓大語言模型輸出更詳細(xì)的回復(fù)。
例如,在指令優(yōu)化模型中給定如下輸入:
如何做魚香肉絲? 如何準(zhǔn)備GRE考試? 如果被朋友誤會了怎么辦?
模型輸出類似如下結(jié)果:
請?zhí)峁┮粋€詳細(xì)的中國四川風(fēng)味的魚香肉絲的食譜。包括所需的具體材料列表(如蔬菜、豬肉和調(diào)料),以及詳細(xì)的步驟說明。如果可能的話,還請推薦適合搭配這道菜的小菜和主食。 請?zhí)峁┮粋€詳細(xì)的指導(dǎo)方案,包括GRE考試的報名、所需資料、備考策略和建議的復(fù)習(xí)資料。同時,如果可以的話,也請推薦一些有效的練習(xí)題和模擬考試來幫助我更好地準(zhǔn)備考試。 請?zhí)峁┮粋€詳細(xì)的指導(dǎo),教我如何在被朋友誤會時保持冷靜和理智,并且有效地溝通來解決問題。請包括一些實用的建議,例如如何表達自己的想法和感受,以及如何避免誤解加劇,并且建議一些具體的對話場景和情境,以便我能更好地理解和練習(xí)。
由于指令的詳細(xì)性直接影響了大語言模型的輸出指令,進行指令優(yōu)化能有效提升最終產(chǎn)出學(xué)生模型的效果。基于Qwen2基座模型,PAI提供了兩款自主研發(fā)的指令優(yōu)化模型,分別為Qwen2-1.5B-Instruct-Refine和Qwen2-7B-Instruct-Refine。您可以在PAI-Model Gallery中一鍵部署模型服務(wù),具體操作步驟如下:
部署模型服務(wù)
進入Model Gallery頁面。
登錄PAI控制臺。
在頂部左上角根據(jù)實際情況選擇地域。
在左側(cè)導(dǎo)航欄選擇工作空間列表,單擊指定工作空間名稱,進入對應(yīng)工作空間內(nèi)。
在左側(cè)導(dǎo)航欄選擇
。
在Model Gallery頁面右側(cè)的模型列表中,搜索Qwen2-1.5B-Instruct-Refine或Qwen2-7B-Instruct-Refine,并在相應(yīng)卡片中單擊部署。
在部署配置面板中,系統(tǒng)已默認(rèn)配置了模型服務(wù)信息和資源部署信息,您也可以根據(jù)需要進行修改。參數(shù)配置完成后單擊部署按鈕。
在計費提醒對話框中,單擊確定。
系統(tǒng)自動跳轉(zhuǎn)到部署任務(wù)頁面,當(dāng)狀態(tài)為運行中時,表示服務(wù)部署成功。
調(diào)用模型服務(wù)
服務(wù)部署成功后,您可以使用API進行模型推理。具體使用方法參考LLM大語言模型部署。以下提供一個示例,展示如何通過客戶端發(fā)起Request調(diào)用:
獲取服務(wù)訪問地址和Token。
在服務(wù)詳情頁面,單擊基本信息區(qū)域的查看調(diào)用信息。
在調(diào)用信息對話框中,查詢服務(wù)訪問地址和Token,并保存到本地。
在終端中,創(chuàng)建并執(zhí)行如下Python代碼文件來調(diào)用服務(wù)。
import argparse import json import requests from typing import List def post_http_request(prompt: str, system_prompt: str, host: str, authorization: str, max_new_tokens: int, temperature: float, top_k: int, top_p: float) -> requests.Response: headers = { "User-Agent": "Test Client", "Authorization": f"{authorization}" } pload = { "prompt": prompt, "system_prompt": system_prompt, "top_k": top_k, "top_p": top_p, "temperature": temperature, "max_new_tokens": max_new_tokens, "do_sample": True, "eos_token_id": 151645 } response = requests.post(host, headers=headers, json=pload) return response def get_response(response: requests.Response) -> List[str]: data = json.loads(response.content) output = data["response"] return output if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--top-k", type=int, default=2) parser.add_argument("--top-p", type=float, default=0.95) parser.add_argument("--max-new-tokens", type=int, default=256) parser.add_argument("--temperature", type=float, default=0.5) parser.add_argument("--prompt", type=str, default="給我唱首歌。") args = parser.parse_args() prompt = args.prompt top_k = args.top_k top_p = args.top_p temperature = args.temperature max_new_tokens = args.max_new_tokens host = "EAS HOST" authorization = "EAS TOKEN" print(f" --- input: {prompt}\n", flush=True) system_prompt = "請優(yōu)化這個指令,將其修改為一個更詳細(xì)具體的指令。" response = post_http_request( prompt, system_prompt, host, authorization, max_new_tokens, temperature, top_k, top_p) output = get_response(response) print(f" --- output: {output}\n", flush=True)
其中:
host:配置為已獲取的服務(wù)訪問地址。
authorization:配置為已獲取的服務(wù)Token。
批量實現(xiàn)指令優(yōu)化
您可以使用上述EAS在線服務(wù)進行批量調(diào)用,實現(xiàn)批量指令優(yōu)化。以下代碼示例展示了如何讀取自定義的JSON格式數(shù)據(jù)集,批量調(diào)用上面的模型接口進行質(zhì)量優(yōu)化。您需要在終端中,創(chuàng)建并執(zhí)行如下Python代碼文件來批量調(diào)用模型服務(wù)。
import requests
import json
import random
from tqdm import tqdm
from typing import List
input_file_path = "input.json" # 輸入文件名
with open(input_file_path) as fp:
data = json.load(fp)
pbar = tqdm(total=len(data))
new_data = []
for d in data:
prompt = d["instruction"]
system_prompt = "請優(yōu)化以下指令。"
top_k = 50
top_p = 0.95
temperature = 1
max_new_tokens = 2048
host = "EAS HOST"
authorization = "EAS TOKEN"
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
temp = {
"instruction": output
}
new_data.append(temp)
pbar.update(1)
pbar.close()
output_file_path = "output.json" # 輸出文件名
with open(output_file_path, 'w') as f:
json.dump(new_data, f, ensure_ascii=False)
其中:
host:配置為已獲取的服務(wù)訪問地址。
authorization:配置為已獲取的服務(wù)Token。
file_path:請?zhí)鎿Q為數(shù)據(jù)集文件所在的本地路徑。
post_http_request
和get_response
函數(shù)的定義與其在調(diào)用模型服務(wù)的Python腳本中對應(yīng)的函數(shù)定義保持一致。
您也可以使用PAI-Designer的LLM-指令優(yōu)化(DLC)組件零代碼實現(xiàn)上述功能。具體操作方法,請參考自定義工作流demo。
部署教師大語言模型生成對應(yīng)回復(fù)
部署模型服務(wù)
在優(yōu)化好數(shù)據(jù)集中的指令以后,您可以按照以下操作步驟,部署教師大語言模型生成對應(yīng)回復(fù)。
進入Model Gallery頁面。
登錄PAI控制臺。
在頂部左上角根據(jù)實際情況選擇地域。
在左側(cè)導(dǎo)航欄選擇工作空間列表,單擊指定工作空間名稱,進入對應(yīng)工作空間內(nèi)。
在左側(cè)導(dǎo)航欄選擇
。
在Model Gallery頁面右側(cè)的模型列表中,搜索通義千問2-72B-Instruct,并在相應(yīng)卡片中單擊部署。
在部署配置面板中,系統(tǒng)已默認(rèn)配置了模型服務(wù)信息和資源部署信息,您也可以根據(jù)需要進行修改。參數(shù)配置完成后單擊部署按鈕。
在計費提醒對話框中,單擊確定。
系統(tǒng)自動跳轉(zhuǎn)到部署任務(wù)頁面,當(dāng)狀態(tài)為運行中時,表示服務(wù)部署成功。
調(diào)用模型服務(wù)
服務(wù)部署成功后,您可以使用API進行模型推理。具體使用方法參考LLM大語言模型部署。以下提供一個示例,展示如何通過客戶端發(fā)起Request調(diào)用:
獲取服務(wù)訪問地址和Token。
在服務(wù)詳情頁面,單擊基本信息區(qū)域的查看調(diào)用信息。
在調(diào)用信息對話框中,查詢服務(wù)訪問地址和Token,并保存到本地。
在終端中,創(chuàng)建并執(zhí)行如下Python代碼文件來調(diào)用服務(wù)。
import argparse import json import requests from typing import List def post_http_request(prompt: str, system_prompt: str, host: str, authorization: str, max_new_tokens: int, temperature: float, top_k: int, top_p: float) -> requests.Response: headers = { "User-Agent": "Test Client", "Authorization": f"{authorization}" } pload = { "prompt": prompt, "system_prompt": system_prompt, "top_k": top_k, "top_p": top_p, "temperature": temperature, "max_new_tokens": max_new_tokens, "do_sample": True, } response = requests.post(host, headers=headers, json=pload) return response def get_response(response: requests.Response) -> List[str]: data = json.loads(response.content) output = data["response"] return output if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--top-k", type=int, default=50) parser.add_argument("--top-p", type=float, default=0.95) parser.add_argument("--max-new-tokens", type=int, default=2048) parser.add_argument("--temperature", type=float, default=0.5) parser.add_argument("--prompt", type=str) parser.add_argument("--system_prompt", type=str) args = parser.parse_args() prompt = args.prompt system_prompt = args.system_prompt top_k = args.top_k top_p = args.top_p temperature = args.temperature max_new_tokens = args.max_new_tokens host = "EAS HOST" authorization = "EAS TOKEN" print(f" --- input: {prompt}\n", flush=True) response = post_http_request( prompt, system_prompt, host, authorization, max_new_tokens, temperature, top_k, top_p) output = get_response(response) print(f" --- output: {output}\n", flush=True)
其中:
host:配置為已獲取的服務(wù)訪問地址。
authorization:配置為已獲取的服務(wù)Token。
批量實現(xiàn)教師模型的指令標(biāo)注
以下代碼示范了如何讀取自定義JSON格式數(shù)據(jù)集,批量調(diào)用上述模型接口進行教師模型標(biāo)注。您需要在終端中,創(chuàng)建并執(zhí)行如下Python代碼文件來批量調(diào)用模型服務(wù)。
import json
from tqdm import tqdm
import requests
from typing import List
input_file_path = "input.json" # 輸入文件名
with open(input_file_path) as fp:
data = json.load(fp)
pbar = tqdm(total=len(data))
new_data = []
for d in data:
system_prompt = "You are a helpful assistant."
prompt = d["instruction"]
print(prompt)
top_k = 50
top_p = 0.95
temperature = 0.5
max_new_tokens = 2048
host = "EAS HOST"
authorization = "EAS TOKEN"
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
temp = {
"instruction": prompt,
"output": output
}
new_data.append(temp)
pbar.update(1)
pbar.close()
output_file_path = "output.json" # 輸出文件名
with open(output_file_path, 'w') as f:
json.dump(new_data, f, ensure_ascii=False)
其中:
host:配置為已獲取的服務(wù)訪問地址。
authorization:配置為已獲取的服務(wù)Token。
file_path:請?zhí)鎿Q為數(shù)據(jù)集文件所在的本地路徑。
post_http_request
和get_response
函數(shù)的定義與其在調(diào)用模型服務(wù)腳本中對應(yīng)的函數(shù)定義保持一致。
蒸餾訓(xùn)練較小的學(xué)生模型
訓(xùn)練模型
當(dāng)獲得教師模型的回復(fù)后,您可以在PAI-Model Gallery中,實現(xiàn)學(xué)生模型的訓(xùn)練,無需編寫代碼,極大簡化了模型的開發(fā)過程。本方案以Qwen2-7B-Instruct模型為例,為您介紹如何使用已準(zhǔn)備好的訓(xùn)練數(shù)據(jù),在PAI-Model Gallery中進行模型訓(xùn)練,具體操作步驟如下:
進入Model Gallery頁面。
登錄PAI控制臺。
在頂部左上角根據(jù)實際情況選擇地域。
在左側(cè)導(dǎo)航欄選擇工作空間列表,單擊指定工作空間名稱,進入對應(yīng)工作空間內(nèi)。
在左側(cè)導(dǎo)航欄選擇
。
在Model Gallery頁面右側(cè)的模型列表中,搜索并單擊通義千問2-72B-Instruct模型卡片,進入模型詳情頁面。
在模型詳情頁面,單擊右上角的微調(diào)訓(xùn)練。
在微調(diào)訓(xùn)練配置面板中,配置以下關(guān)鍵參數(shù),其他參數(shù)取默認(rèn)配置。
參數(shù)
描述
默認(rèn)值
數(shù)據(jù)集配置
訓(xùn)練數(shù)據(jù)集
在下拉列表中選擇OSS文件或目錄,并按照以下步驟選擇數(shù)據(jù)集文件所在的OSS存儲路徑:
單擊,并選擇已創(chuàng)建的OSS存儲空間。
單擊上傳文件,并按控制臺操作指引,將從上述步驟獲得的數(shù)據(jù)集文件上傳到OSS目錄中。
單擊確定。
無
訓(xùn)練輸出配置
model
單擊,選擇已創(chuàng)建的OSS存儲目錄。
無
tensorboard
單擊,選擇已創(chuàng)建的OSS存儲目錄。
無
計算資源配置
任務(wù)資源
選擇資源規(guī)格,系統(tǒng)會自動推薦適合的資源規(guī)格。
無
超參數(shù)配置
learning_rate
模型訓(xùn)練的學(xué)習(xí)率,F(xiàn)loat類型。
5e-5
num_train_epochs
訓(xùn)練輪次,INT類型。
1
per_device_train_batch_size
每張GPU卡在一次訓(xùn)練迭代的數(shù)據(jù)量,INT類型。
1
seq_length
文本序列長度,INT類型。
128
lora_dim
LoRA維度,INT類型。當(dāng)lora_dim>0時,使用LoRA/QLoRA輕量化訓(xùn)練。
32
lora_alpha
LoRA權(quán)重,INT類型。當(dāng)lora_dim>0時,使用LoRA/QLoRA輕量化訓(xùn)練,該參數(shù)生效。
32
load_in_4bit
模型是否以4比特加載,bool類型。取值如下:
true
false
當(dāng)lora_dim>0、load_in_4bit為true且load_in_8bit為false時,使用4比特QLoRA輕量化訓(xùn)練。
true
load_in_8bit
模型是否以8比特加載,bool類型。取值如下:
true
false
當(dāng)lora_dim>0、load_in_4bit為false且load_in_8bit為true時,使用8比特QLoRA輕量化訓(xùn)練。
false
gradient_accumulation_steps
梯度累積步數(shù),INT類型。
8
apply_chat_template
算法是否結(jié)合訓(xùn)練數(shù)據(jù)與默認(rèn)的Chat Template來優(yōu)化模型輸出,bool類型。取值如下:
true
false
以Qwen2系列模型為例,格式為:
問題:
<|im_end|>\n<|im_start|>user\n + instruction + <|im_end|>\n
答案:
<|im_start|>assistant\n + output + <|im_end|>\n
true
system_prompt
模型訓(xùn)練使用的系統(tǒng)提示語,String類型。
You are a helpful assistant
參數(shù)配置完成后,單擊訓(xùn)練。
在計費提醒對話框中,單擊確定。
系統(tǒng)將自動跳轉(zhuǎn)到訓(xùn)練任務(wù)頁面。
部署模型服務(wù)
當(dāng)模型訓(xùn)練完成后,您可以按照以下操作步驟,將模型部署為EAS在線服務(wù)。
在訓(xùn)練任務(wù)頁面右側(cè),單擊部署。
在部署配置面板中,系統(tǒng)已默認(rèn)配置了模型服務(wù)信息和資源部署信息,您也可以根據(jù)需要進行修改。參數(shù)配置完成后單擊部署按鈕。
在計費提醒對話框中,單擊確定。
系統(tǒng)自動跳轉(zhuǎn)到部署任務(wù)頁面,當(dāng)狀態(tài)為運行中時,表示服務(wù)部署成功。
調(diào)用模型服務(wù)
服務(wù)部署成功后,您可以使用API進行模型推理。具體使用方法參考LLM大語言模型部署。
相關(guān)文檔
更多關(guān)于EAS產(chǎn)品的內(nèi)容介紹,請參見EAS模型服務(wù)概述。
使用PAI-Model Gallery功能,您可以輕松完成更多場景的部署與微調(diào)任務(wù),包括Llama-3、Qwen1.5、Stable Diffusion V1.5等系列模型。詳情請參見場景實踐。