前置條件
執行本文操作之前, 請完成以下準備工作。
注冊天翼云賬號,確保主賬號完成實名認證。
平臺支持3種購買模式:
默認集群,按量付費模式,天翼云賬戶余額需要大于100元。
默認集群專屬配額,BCP下單包周期擴展型資源,就會在默認隊列中獲取一個專屬隊列用于使用資源配額。
專屬集群獨占資源,BCP下單包周期獨立型資源,建議至少8臺機器組成一個智算集群。
平臺體驗:
環境:英偉達H800環境
分場景實踐介紹
場景一:編碼開發調試
適用場景:只想跑通樣例代碼,進行編碼實驗和Debug,單機少卡即可。
步驟1.啟動開發機
啟動開發機,啟動后點擊打開即可使用Notebook和VSCode開發界面。
步驟2.文件目錄
開發機默認自帶mount和cache2個目錄。
數據和模型掛載mount目錄:/work/mount/目錄是用于使用和掛載平臺上的數據集和模型文件的,創建界面選擇對應數據集和模型后,系統自動分配掛載路徑,打開開發機即可看到這些路徑,寫代碼直接讀取這些路徑即可讀取數據和模型。
存儲時間:只在開發機運行中可使用,開發機關閉后mount目錄會和容器取消掛載,也無法讀取。
目錄隔離:在不同開發機的目錄內容是隔離的,每啟動一個開發機都是自己的一套mount和cache。
編碼調試cache目錄:每個用戶的每一個開發機都默認贈送50GiB的/work/cache目錄。
存儲時間:Cache目錄是臨時目錄,開發機關閉后cache的內容會在5天后清空。
目錄隔離:在不同開發機的目錄內容是隔離的,每啟動一個開發機都是自己的一套mount和cache。
對大客戶開通/work/home目錄,僅針對大客戶提工單開通。
存儲時間:Home目錄在子賬號下永久生效
目錄隔離:不同開發機的數據是互通的,一份Home目錄所有開發機都是相同內容、同步操作。
對大客戶開通/work/share目錄,僅針對大客戶工單開通。
存儲時間:Home目錄在子賬號下永久生效
目錄隔離:share目錄對租戶下是租戶下所有用戶都可以共同看到的,多人同時操作。不同開發機的數據是互通的,一份Home目錄所有開發機都是相同內容、同步操作。
步驟3.終端控制、代碼運行、Debug調試
點擊啟動即可啟動ide。
點擊打開會跳轉到vscode的頁面。
可以跳轉到相關文件夾或終端,功能和vscode一樣。
打開終端。
點擊菜單欄右側執行按鈕,選擇“Run” or “Debug”。
也可以通過終端執行數據操作,比如:移動數據到對應目錄等。
步驟4.查看性能
查看GPU信息命令:nvidia-smi 。
查看NPU信息命令:npu-smi info 。
測試網絡上下行帶寬命令:bash <(wget -qO- //down.vpsaff.net/linux/speedtest/superbench.sh) --speed 。
注意
Huggingface、Github由于翻墻下載無論在哪里下載都比較慢,本平臺不提供違規的翻墻服務,建議下載模型使用阿里modelscope。
步驟5.制作鏡像
如果調試好代碼,代碼在單節點環境可以運行,我們可以將鏡像保存為我們的自定義鏡像。方便我們做后續的多節點訓練。
在開發機任務列表點擊更多--制作鏡像。
輸入鏡像名稱以及版本制作鏡像。
在我的鏡像里面會看到該鏡像。
場景二:訓練準備
步驟1.下載模型文件
在本次示例中,我們使用qwen1.8b模型。
下載模型:模型文件和數據集可以通過魔樂社區、魔搭社區等國內社區下載。
魔搭社區下載:
pip install modelscope
modelscope download --model Qwen/Qwen-1_8B-Chat --log-dir ./步驟2.拉取代碼
我們clone代碼的時候,如果代碼是github,那么隨時可能會被禁用,我們可以在本地進行拉取后,直接采用拖拽或者upload的命令上傳到IDE上,模型權重、數據集均支持該操作,該操作方便簡單,便于進行快速的任務搭建。
git clone //github.com/QwenLM/Qwen.git代碼版本控制:平臺使用的IDE是網頁版本的vscode,但基本功能和正常的vscode一樣,支持多種插件,同時包含版本控制工具,可以進行團隊代碼協作。一些輔助的代碼大模型的插件我們也可以同步使用。
步驟3.鏡像使用
#使用平臺基礎鏡像 ubuntu22.04-cuda12.1.0-py310-torch2.3.0-dpo:v1.4
如果不滿足可以在IDE安裝相關包,并在IDE位置制作自定義鏡像(注意平臺制作自定義鏡像的邏輯為docker commit,確保環境安裝到位)。步驟4.數據處理
數據集:將下面數據集保存為chat.json,示例數據集為100條。
[{"id": "identity_0", "conversations": [{"from": "user", "value": "猜謎語:一身卷卷細毛,吃的青青野草,過了數九寒冬,無私獻出白毛。 (打一動物)"}, {"from": "assistant", "value": "謎底:白羊"}]}, {"id": "identity_1", "conversations": [{"from": "user", "value": "猜謎語:紙袋是它房,枕頭擱身上;泡進開水里,身軟味道香。 (打一食物)"}, {"from": "assistant", "value": "謎底:快餐面"}]}, {"id": "identity_2", "conversations": [{"from": "user", "value": "猜謎語:云想衣裳花想容 (打一詞語)"}, {"from": "assistant", "value": "謎底:各有所思"}]}, {"id": "identity_3", "conversations": [{"from": "user", "value": "猜謎語:學生上門,站滿墻根。 (打一成語)"}, {"from": "assistant", "value": "謎底:家徒四壁"}]}, {"id": "identity_4", "conversations": [{"from": "user", "value": "猜謎語:囊括全部金牌 (打一內蒙古地名)"}, {"from": "assistant", "value": "謎底:包頭"}]}, {"id": "identity_5", "conversations": [{"from": "user", "value": "猜謎語:穿下不穿上,站在院一旁。 (打一字)"}, {"from": "assistant", "value": "謎底:邪"}]}, {"id": "identity_6", "conversations": [{"from": "user", "value": "猜謎語:頭小四腿長,脖子高過房,身穿花皮襖,不聲又不響。 (打一動物)"}, {"from": "assistant", "value": "謎底:長頸鹿"}]}, {"id": "identity_7", "conversations": [{"from": "user", "value": "猜謎語:一年到頭綠葉掛,五月枝頭開白花,無風自有香氣來,濃濃烈烈令人夸。 (打一植物)"}, {"from": "assistant", "value": "謎底:梔子花"}]}, {"id": "identity_8", "conversations": [{"from": "user", "value": "猜謎語:千層寶庫翻開來,漆黑縱橫一片排,歷代事情它記載,知識沒它傳不開。 (打一物)"}, {"from": "assistant", "value": "謎底:書籍"}]}, {"id": "identity_9", "conversations": [{"from": "user", "value": "猜謎語:一個哥哥凸肚皮,生對耳朵讓人提,不怕水來不怕火,就怕肚里沒東西。 (打一生活物)"}, {"from": "assistant", "value": "謎底:鐵鍋"}]}, {"id": "identity_10", "conversations": [{"from": "user", "value": "猜謎語:啤酒出口 (打一字)"}, {"from": "assistant", "value": "謎底:卑"}]}, {"id": "identity_11", "conversations": [{"from": "user", "value": "猜謎語:寶玉去她也去 (打一字)"}, {"from": "assistant", "value": "謎底:安"}]}, {"id": "identity_12", "conversations": [{"from": "user", "value": "猜謎語:看云彩 (打一成語)"}, {"from": "assistant", "value": "謎底:察言觀色"}]}, {"id": "identity_13", "conversations": [{"from": "user", "value": "猜謎語:滄海變桑田 (打一字)"}, {"from": "assistant", "value": "謎底:汗"}]}, {"id": "identity_14", "conversations": [{"from": "user", "value": "猜謎語:大路貨和高檔品 (打一勞資用語)"}, {"from": "assistant", "value": "謎底:普加一級"}]}, {"id": "identity_15", "conversations": [{"from": "user", "value": "猜謎語:二人求見,盼有空隙。 (打一時間用語)"}, {"from": "assistant", "value": "謎底:兩會期間"}]}, {"id": "identity_16", "conversations": [{"from": "user", "value": "猜謎語:二九青春?卷簾格 (打一紀年用語)"}, {"from": "assistant", "value": "謎底:八十年代"}]}, {"id": "identity_17", "conversations": [{"from": "user", "value": "猜謎語:中秋?遙對格 (中藥名)"}, {"from": "assistant", "value": "謎底:半夏"}]}, {"id": "identity_18", "conversations": [{"from": "user", "value": "猜謎語:東施笑顰?秋千格 (商品名)"}, {"from": "assistant", "value": "謎底:西裝"}]}, {"id": "identity_19", "conversations": [{"from": "user", "value": "猜謎語:一時起風波 (打一俗語四字)"}, {"from": "assistant", "value": "謎底:浪子回頭"}]}, {"id": "identity_20", "conversations": [{"from": "user", "value": "猜謎語:一身兼二職 (打一俗語五字)"}, {"from": "assistant", "value": "謎底:對事不對人"}]}, {"id": "identity_21", "conversations": [{"from": "user", "value": "猜謎語:衣著大眾化 (打一俗語四字)"}, {"from": "assistant", "value": "謎底:服從多數"}]}, {"id": "identity_22", "conversations": [{"from": "user", "value": "猜謎語:新婚之夜,新娘不讓新郎上床。 (打一山東地名)"}, {"from": "assistant", "value": "謎底:濟南"}]}, {"id": "identity_23", "conversations": [{"from": "user", "value": "猜謎語:古代有,今天沒有,支出有,收入沒有。 (打一字)"}, {"from": "assistant", "value": "謎底:十"}]}, {"id": "identity_24", "conversations": [{"from": "user", "value": "猜謎語:躺下才舒服 (打一成語)"}, {"from": "assistant", "value": "謎底:坐立不安"}]}, {"id": "identity_25", "conversations": [{"from": "user", "value": "猜謎語:長身體節節光,白胖胖沒衣裳,水當被泥當床,一年到頭不吃糧。 (打一植物)"}, {"from": "assistant", "value": "謎底:蓮藕"}]}, {"id": "identity_26", "conversations": [{"from": "user", "value": "猜謎語:山林里面一老翁,頭上白毛蓬松松,飛來飛去不怕累,愛吃果實和小蟲。 (打一動物)"}, {"from": "assistant", "value": "謎底:白頭鵯"}]}, {"id": "identity_27", "conversations": [{"from": "user", "value": "猜謎語:海里一棵花,根子往上扎,一天澆三遍,就是不見它。 (打一人體器官)"}, {"from": "assistant", "value": "謎底:心臟"}]}, {"id": "identity_28", "conversations": [{"from": "user", "value": "猜謎語:四四方方一堆似雪花,落入水中不見它,一日三餐離不了,單獨入口叫哇哇。 (打一食物)"}, {"from": "assistant", "value": "謎底:鹽"}]}, {"id": "identity_29", "conversations": [{"from": "user", "value": "猜謎語:日復一日有奔頭 (打一字)"}, {"from": "assistant", "value": "謎底:奮"}]}, {"id": "identity_30", "conversations": [{"from": "user", "value": "猜謎語:收羅馬人為徒 (打一成語)"}, {"from": "assistant", "value": "謎底:得意門生"}]}, {"id": "identity_31", "conversations": [{"from": "user", "value": "猜謎語:沾沾自喜 (打一節氣)"}, {"from": "assistant", "value": "謎底:小滿"}]}, {"id": "identity_32", "conversations": [{"from": "user", "value": "猜謎語:霧散之后冰消融 (打一節氣)"}, {"from": "assistant", "value": "謎底:雨水"}]}, {"id": "identity_33", "conversations": [{"from": "user", "value": "猜謎語:數以百萬逃走了 (打一字)"}, {"from": "assistant", "value": "謎底:兆"}]}, {"id": "identity_34", "conversations": [{"from": "user", "value": "猜謎語:三長兩短,不偏不倚。 (打一字)"}, {"from": "assistant", "value": "謎底:正"}]}, {"id": "identity_35", "conversations": [{"from": "user", "value": "猜謎語:一個人做得,二個人做不得,人人都說做過,人人都說沒有見過。 (打一生理現象)"}, {"from": "assistant", "value": "謎底:做夢"}]}, {"id": "identity_36", "conversations": [{"from": "user", "value": "猜謎語:一位姑娘本姓王,彎彎繞繞想情郎,讀書情郎想不到,只想一個種田郎。 (打一動物)"}, {"from": "assistant", "value": "謎底:螞蟥"}]}, {"id": "identity_37", "conversations": [{"from": "user", "value": "猜謎語:青竹竿,頂紅絨,大火燒到紫禁城,七八個大哥來救火,各個燒的指頭痛。 (打一植物)"}, {"from": "assistant", "value": "謎底:紅花"}]}, {"id": "identity_38", "conversations": [{"from": "user", "value": "猜謎語:在娘家成雙作對,到夫家兩路分開,雖然日日相見,不能登在一堆。 (打一物)"}, {"from": "assistant", "value": "謎底:耳墜"}]}, {"id": "identity_39", "conversations": [{"from": "user", "value": "猜謎語:自幼生長在深山,黑紅顏色分后先,由黑變紅人人愛,由紅變黑不值錢。 (打一生活物)"}, {"from": "assistant", "value": "謎底:木炭"}]}, {"id": "identity_40", "conversations": [{"from": "user", "value": "猜謎語:唐宋八家,楊州八怪。 (打一字)"}, {"from": "assistant", "value": "謎底:做"}]}, {"id": "identity_41", "conversations": [{"from": "user", "value": "猜謎語:何剩一丁 (打一成語)"}, {"from": "assistant", "value": "謎底:殺人滅口"}]}, {"id": "identity_42", "conversations": [{"from": "user", "value": "猜謎語:一一用力 (打一字)"}, {"from": "assistant", "value": "謎底:五"}]}, {"id": "identity_43", "conversations": [{"from": "user", "value": "猜謎語:昏昏沉沉,生在早晨,說它是煙,你沒留神。 (打一自然物)"}, {"from": "assistant", "value": "謎底:霧"}]}, {"id": "identity_44", "conversations": [{"from": "user", "value": "猜謎語:身穿戰甲趙子龍,頭戴金盔諸葛亮,鐵面黑須包文拯,無故殺死楊六郎。 (打一動物)"}, {"from": "assistant", "value": "謎底:老虎"}]}, {"id": "identity_45", "conversations": [{"from": "user", "value": "猜謎語:十八天發杈,十八天開花,十八天結籽,十八天歸家。 (打一植物)"}, {"from": "assistant", "value": "謎底:蕎麥"}]}, {"id": "identity_46", "conversations": [{"from": "user", "value": "猜謎語:叮當響,叮當響,又圓又扁又四方。 (打一物)"}, {"from": "assistant", "value": "謎底:銅元"}]}, {"id": "identity_47", "conversations": [{"from": "user", "value": "猜謎語:頭戴紅紗帽,身穿黑外套,登臺作手勢,走路唱小調。 (打一動物)"}, {"from": "assistant", "value": "謎底:蒼蠅"}]}, {"id": "identity_48", "conversations": [{"from": "user", "value": "猜謎語:挖土引水能養魚 (打一字)"}, {"from": "assistant", "value": "謎底:地"}]}, {"id": "identity_49", "conversations": [{"from": "user", "value": "猜謎語:閉上眼睛才敢吻 (打一成語)"}, {"from": "assistant", "value": "謎底:舉目無親"}]}, {"id": "identity_50", "conversations": [{"from": "user", "value": "猜謎語:曹沖稱大象,吳王索魚腸。 (打一成語)"}, {"from": "assistant", "value": "謎底:刻舟求劍"}]}, {"id": "identity_51", "conversations": [{"from": "user", "value": "猜謎語:夜半枝頭,殘紅四五點。 (打一《紅樓夢》人名)"}, {"from": "assistant", "value": "謎底:李紈"}]}, {"id": "identity_52", "conversations": [{"from": "user", "value": "猜謎語:草下游來一只鴨 (打一字)"}, {"from": "assistant", "value": "謎底:藝"}]}, {"id": "identity_53", "conversations": [{"from": "user", "value": "猜謎語:非禽非獸小眼窩,自小掌握超聲波,旋轉追逐樣樣會,捕捉蚊蟲更利索。 (打一動物)"}, {"from": "assistant", "value": "謎底:蝙蝠"}]}, {"id": "identity_54", "conversations": [{"from": "user", "value": "猜謎語:花兒大,花兒香,人們稱它花中王。 (打一植物)"}, {"from": "assistant", "value": "謎底:牡丹"}]}, {"id": "identity_55", "conversations": [{"from": "user", "value": "猜謎語:千里迢迢在眼前,雷聲隆隆不下雨,雪花紛紛不覺寒。 (打一字)"}, {"from": "assistant", "value": "謎底:磨"}]}, {"id": "identity_56", "conversations": [{"from": "user", "value": "猜謎語:風華正茂,被刀砍倒,閻羅王作證,陳屋王擔保。 (打一食物)"}, {"from": "assistant", "value": "謎底:咸菜"}]}, {"id": "identity_57", "conversations": [{"from": "user", "value": "猜謎語:平平亮亮一堵墻,墻里墻外可相望。 (打一建筑物)"}, {"from": "assistant", "value": "謎底:玻璃"}]}, {"id": "identity_58", "conversations": [{"from": "user", "value": "猜謎語:斧頭把手已脫落 (打一字)"}, {"from": "assistant", "value": "謎底:爸"}]}, {"id": "identity_59", "conversations": [{"from": "user", "value": "猜謎語:胸無點黑 (打一成語)"}, {"from": "assistant", "value": "謎底:襟懷坦白"}]}, {"id": "identity_60", "conversations": [{"from": "user", "value": "猜謎語:調查見曲直 (打一《三國演義》人名)"}, {"from": "assistant", "value": "謎底:曹植"}]}, {"id": "identity_61", "conversations": [{"from": "user", "value": "猜謎語:城西殘云半遮月 (打一字)"}, {"from": "assistant", "value": "謎底:屋"}]}, {"id": "identity_62", "conversations": [{"from": "user", "value": "猜謎語:拆掉床木架,一人好住下。 (打一字)"}, {"from": "assistant", "value": "謎底:慶"}]}, {"id": "identity_63", "conversations": [{"from": "user", "value": "猜謎語:肚子大,腦瓜小,胸前有對大鐮刀,別看樣子長得笨,捕捉呱呱叫。 (打一動物)"}, {"from": "assistant", "value": "謎底:螳螂"}]}, {"id": "identity_64", "conversations": [{"from": "user", "value": "猜謎語:葉兒青青桿兒高,愛在路上生陰涼,開著紫花一串串,長的果兒有翅膀。 (打一植物)"}, {"from": "assistant", "value": "謎底:槐樹"}]}, {"id": "identity_65", "conversations": [{"from": "user", "value": "猜謎語:小小一只缸,裝滿一肚漿,打開看一看,黃白不一樣。 (打一食物)"}, {"from": "assistant", "value": "謎底:蛋"}]}, {"id": "identity_66", "conversations": [{"from": "user", "value": "猜謎語:無事橫起,有事立起,上磨肩頭,下磨腳底。 (打一文具)"}, {"from": "assistant", "value": "謎底:墨"}]}, {"id": "identity_67", "conversations": [{"from": "user", "value": "猜謎語:霧中一人衣衫少 (打一字)"}, {"from": "assistant", "value": "謎底:修"}]}, {"id": "identity_68", "conversations": [{"from": "user", "value": "猜謎語:不識廬山真面目 (打一成語)"}, {"from": "assistant", "value": "謎底:身臨其境"}]}, {"id": "identity_69", "conversations": [{"from": "user", "value": "猜謎語:曹操兵敗走華容 (打一成語)"}, {"from": "assistant", "value": "謎底:性命交關"}]}, {"id": "identity_70", "conversations": [{"from": "user", "value": "猜謎語:去日苦多 (打一字)"}, {"from": "assistant", "value": "謎底:章"}]}, {"id": "identity_71", "conversations": [{"from": "user", "value": "猜謎語:丈夫的外祖母 (打一成語)"}, {"from": "assistant", "value": "謎底:婆婆媽媽"}]}, {"id": "identity_72", "conversations": [{"from": "user", "value": "猜謎語:出生同一天,住在山兩邊,說話聽得見,相互見面難。 (打一人體器官)"}, {"from": "assistant", "value": "謎底:耳朵"}]}, {"id": "identity_73", "conversations": [{"from": "user", "value": "猜謎語:異鄉奇遇 (打一字)"}, {"from": "assistant", "value": "謎底:綺"}]}, {"id": "identity_74", "conversations": [{"from": "user", "value": "猜謎語:離婚 (打一物理名詞)"}, {"from": "assistant", "value": "謎底:絕緣"}]}, {"id": "identity_75", "conversations": [{"from": "user", "value": "猜謎語:動物作標本 (打一成語)"}, {"from": "assistant", "value": "謎底:裝模作樣"}]}, {"id": "identity_76", "conversations": [{"from": "user", "value": "猜謎語:站而不立,慶而不大,街邊一間房,買賣東西忙。 (打一字)"}, {"from": "assistant", "value": "謎底:店"}]}, {"id": "identity_77", "conversations": [{"from": "user", "value": "猜謎語:有毛不是鳥,生來奇又巧,無翅空中飛,無腳地上跳。 (打一體育用品)"}, {"from": "assistant", "value": "謎底:羽毛球"}]}, {"id": "identity_78", "conversations": [{"from": "user", "value": "猜謎語:能在水中游,能在地上跑,不吃魚和蝦,喜愛吃青草。 (打一動物)"}, {"from": "assistant", "value": "謎底:鵝"}]}, {"id": "identity_79", "conversations": [{"from": "user", "value": "猜謎語:個子細又高,葉子像大刀,頭頂烽火把,好似烈火燒。 (打一植物)"}, {"from": "assistant", "value": "謎底:高粱"}]}, {"id": "identity_80", "conversations": [{"from": "user", "value": "猜謎語:長長一只簍,上下三個口,有我才出門,沒我無法走。 (打一生活物)"}, {"from": "assistant", "value": "謎底:褲子"}]}, {"id": "identity_81", "conversations": [{"from": "user", "value": "猜謎語:我站右邊 (打一字)"}, {"from": "assistant", "value": "謎底:戰"}]}, {"id": "identity_82", "conversations": [{"from": "user", "value": "猜謎語:立字當頭為之一新 (打一字)"}, {"from": "assistant", "value": "謎底:析"}]}, {"id": "identity_83", "conversations": [{"from": "user", "value": "猜謎語:一面之詞 (打一稱謂)"}, {"from": "assistant", "value": "謎底:首席發言人"}]}, {"id": "identity_84", "conversations": [{"from": "user", "value": "猜謎語:一夜征人盡望鄉 (打二稱謂)"}, {"from": "assistant", "value": "謎底:旅客,思想家"}]}, {"id": "identity_85", "conversations": [{"from": "user", "value": "猜謎語:一歲天無三日晴 (打一稱謂)"}, {"from": "assistant", "value": "謎底:陽光少年"}]}, {"id": "identity_86", "conversations": [{"from": "user", "value": "猜謎語:書香門第?卷簾格 (打一稱謂)"}, {"from": "assistant", "value": "謎底:人文專家"}]}, {"id": "identity_87", "conversations": [{"from": "user", "value": "猜謎語:兩個寧波人?放踵格 (打一常用詞)"}, {"from": "assistant", "value": "謎底:慫恿"}]}, {"id": "identity_88", "conversations": [{"from": "user", "value": "猜謎語:掘黃連 (打一常用詞)"}, {"from": "assistant", "value": "謎底:挖苦"}]}, {"id": "identity_89", "conversations": [{"from": "user", "value": "猜謎語:街頭垃圾箱 (打一常用詞)"}, {"from": "assistant", "value": "謎底:放棄"}]}, {"id": "identity_90", "conversations": [{"from": "user", "value": "猜謎語:人為財死 (打一常用詞)"}, {"from": "assistant", "value": "謎底:利害"}]}, {"id": "identity_91", "conversations": [{"from": "user", "value": "猜謎語:土壁土門墻,子子孫孫做小偷,出門碰到白胡子老頭,嗚乎呀嗚乎。 (打一動物)"}, {"from": "assistant", "value": "謎底:老鼠"}]}, {"id": "identity_92", "conversations": [{"from": "user", "value": "猜謎語:有根不帶沙,有葉不開花,有風隨風去,無風停在家。 (打一植物)"}, {"from": "assistant", "value": "謎底:浮萍"}]}, {"id": "identity_93", "conversations": [{"from": "user", "value": "猜謎語:格子里,格子外,格子里長的花蠟菜,又好吃,又好賣,一不臭來二不壞。 (打一食物)"}, {"from": "assistant", "value": "謎底:蜂蜜"}]}, {"id": "identity_94", "conversations": [{"from": "user", "value": "猜謎語:一個老人,要顛要倒,吃塊豆腐干就好。 (打一物)"}, {"from": "assistant", "value": "謎底:鋤頭"}]}, {"id": "identity_95", "conversations": [{"from": "user", "value": "猜謎語:有部分接受 (打一字)"}, {"from": "assistant", "value": "謎底:愛"}]}, {"id": "identity_96", "conversations": [{"from": "user", "value": "猜謎語:元宵 (打一成語)"}, {"from": "assistant", "value": "謎底:朝夕相處"}]}, {"id": "identity_97", "conversations": [{"from": "user", "value": "猜謎語:溫酒斬華雄 (打一《水滸傳》人名)"}, {"from": "assistant", "value": "謎底:關勝"}]}, {"id": "identity_98", "conversations": [{"from": "user", "value": "猜謎語:短了一點又一點 (打一字)"}, {"from": "assistant", "value": "謎底:知"}]}, {"id": "identity_99", "conversations": [{"from": "user", "value": "猜謎語:我在山下,月在半天掛,打柴不見木,王里是一家。 (打一成語)"}, {"from": "assistant", "value": "謎底:豈有此理"}]}, {"id": "identity_100", "conversations": [{"from": "user", "value": "猜謎語:弄璋之喜 (打一字)"}, {"from": "assistant", "value": "謎底:甥"}]}]場景三:模型訓練
單節點訓練
IDE和訓練模式都可以使用該腳本啟動訓練,在IDE中直接可以在terminal中啟動訓練。
創建train_single_node.sh如下:
#!/bin/bash
export CUDA_DEVICE_MAX_CONNECTIONS=1
export GPUS_PER_NODE=8
export LOG_DIR=train_single
DISTRIBUTED_ARGS="
--nnodes=1 \
--nproc_per_node=${GPUS_PER_NODE} \
--node_rank=0 \
--master_port=6001 \
--master_addr=localhost \
"
torchrun $DISTRIBUTED_ARGS finetune.py \
--model_name_or_path Qwen-1_8B-Chat \
--data_path chat.json \
--fp16 True \
--output_dir output_qwen_single \
--num_train_epochs 1 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 1000 \
--save_total_limit 10 \
--learning_rate 3e-4 \
--weight_decay 0.1 \
--adam_beta2 0.95 \
--warmup_ratio 0.01 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--report_to "none" \
--model_max_length 128 \
--lazy_preprocess True \
--use_lora \
--gradient_checkpointing \
--deepspeed finetune/ds_config_zero3train_single_node.sh
gs/${LOG_DIR}.logIDE終端訓練
如下圖所示執行命令:
訓練過程:
輸出的結果和log日志在相關的目錄下:
啟動單節點訓練任務
單節點訓練腳本和IDE上的基本一致。但是我們在示例訓練的時候務必刪除output_qwen_single 中的內容,否則訓練中會出現沖突,也可以自己重新設置子路徑。
進入新建訓練任務頁面后,用戶可以選擇自定義鏡像,也可以使用平臺預置的鏡像。下面對自定義鏡像與平臺預置鏡像的使用分別做說明。
在此處啟動訓練任務:
系統預置鏡像
預置鏡像與平臺的訓練框架相綁定,因此需要先選擇鏡像,選擇鏡像后會自動關聯選中對應的訓練模式。
自定義鏡像
這個在上文中有提到,我們在IDE做好代碼調試后會保存自定義鏡像。
可以根據需要選擇單卡或者多卡算力規格。
填寫啟動命令:
cd /work/home/cs/Qwen/ #注意該路徑是需要代碼或者數據集放在hpfs的路徑下,或者集群機器都可以訪問到的路徑。
bash train_single_node.sh點擊提交,開始單節點訓練任務。
任務狀態:啟動中,表示任務待啟動。
任務狀態:運行中,表示任務正在運行。
成功完成訓練的狀態為“運行完成”。如果訓練出現異常,狀態一欄中會顯示異常的狀態。
點擊日志,可查看代碼運行狀態和出現的異常問題。
同時我們使用tee | 命令將log日志導出到目錄中,可在IDE中設置的輸出log路徑下查看。
我們可以在操作欄使用多種功能提高效率,日志功能可以為我們提供代碼運行的日志等信息,點擊進去我們可以看到包含如下功能:
日志:可以查看代碼運行狀態。
在訓練日志中還可以點擊自動刷新,日志就會自動更新,還可以針對性的查看不同節點的日志,如果日志未出現,可以在右側日期的位置,選擇查看0.5小時內的日志。
基本信息:可以查看任務運行的一些信息,包含運行命令、鏡像等。
事件:該功能主要是訓練節點的創建過程,便于運維排查問題。
監控:該功能可以對訓練過程中的資源使用情況有一個詳細的掌握,包含GPU的使用、CPU的使用、帶寬等。
保存至模型管理:對于訓練完成的任務,我們包含保存模型的功能,可以將模型保存至我的模型,方便后續模型的版本迭代和繼續訓練。
tensorboard功能:該功能只要我們在訓練的時候將tensorboard的路徑指定為我們平臺固定的存放路徑,就可以查看訓練的tensorboard的訓練log日志,當然我們也可以選擇其他更好用的日志平臺工具,例如:wandb、swanlab等。
分布式訓練-非容錯版本
可以滿足輕型的訓練任務,小規模數據集、小規模模型等。
構建腳本文件
創建train_multi_nodes.sh如下:
#!/bin/bash
export CUDA_DEVICE_MAX_CONNECTIONS=1
export GPUS_PER_NODE=8
DISTRIBUTED_ARGS="
--nnodfinetune.pyODES} \
--nproc_per_node=${GPUS_PER_NODE} \
--node_rank=${RANK} \
--master_port=${MASTER_PORT} \
--master_addr=${MASTER_ADDR} \
"
export LOG_DIR=${RANK}_train_multi_nodes_no_rdzv
torchrun $DISTRIBUTED_ARGS finetune.py \
--model_name_or_path Qwen-1_8B-Chat \
--data_path chat.json \
--fp16 True \
--output_dir output_qwen_multi_no_rdzv \
--num_train_epochs 1 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 1000 \
--save_total_limit 10 \
--learning_rate 3e-4 \
--weight_decay 0.1 \
--adam_beta2 0.95 \
--warmup_ratio 0.01 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--report_to "none" \
--model_max_length 128 \
--lazy_preprocess True \
--use_lora \
--gradient_checkpointing \
--deepspeed finetune/ds_config_zero3.json \
| tee logs/${LOG_DIR}.log在非容錯訓練中,我們如果要使用兩個節點,由于包含主從節點,那么我們只要設置一個master節點和一個worker節點即可。當機器故障導致的斷點問題,我們需要手動由ckpt斷點處重新拉起訓練。訓練成功日志如下。同時我們也可以在IDE的相關目錄下查看到日志。兩個節點兩個日志文件。
分布式訓練-RDZV容錯訓練版本
PyTorch中的Rendezvous(rdzv)訓練模式是實現彈性分布式訓練的核心機制,主要用于動態管理訓練節點的加入與退出,從而實現容錯和彈性擴縮容。可以根據ckpt的斷點重新拉起訓練。該機制主要解決的是在訓練工作中集群硬件出現問題,可以快速修復或者更換機器重新拉起訓練,如果有ckpt那么就可以在模型訓練的斷點處拉起訓練。
構建腳本文件
創建train_multi_nodes_rdzv.sh如下:
#!/bin/bash
export CUDA_DEVICE_MAX_CONNECTIONS=1
export GPUS_PER_NODE=8
#平臺分布式訓練參數
DISTRIBUTED_ARGS="
--nproc_per_node=$GPUS_PER_NODfinetune.py
nodes=${PET_NNODES} \
--rdzv_backend=${PET_RDZV_BACKEND} \
--rdzv_endpoint=${PET_RDZV_ENDPOINT} \
--rdzv_id=${PET_RDZV_ID} \
--max_restarts=2 \
--rdzv_conf=timeout=7200,read_timeout=7200
"
export SYSTEMNAME=$POD_NAME #獲取pod名稱 平臺側自動生成
export LOG_DIR=${SYSTEMNAME}_train_multi_nodes_rdzv
torchrun $DISTRIBUTED_ARGS finetune.py \
--model_name_or_path Qwen-1_8B-Chat \
--data_path chat.json \
--fp16 True \
--output_dir output_qwen_rdzv \
--num_train_epochs 1 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 1000 \
--save_total_limit 10 \
--learning_rate 3e-4 \
--weight_decay 0.1 \
--adam_beta2 0.95 \
--warmup_ratio 0.01 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--report_to "none" \
--model_max_length 128 \
--lazy_preprocess True \
--use_lora \
--gradient_checkpointing \
--deepspeed finetune/ds_config_zero3.json \
| tee logs/${LOG_DIR}.log同時在容錯訓練任務中,不存在master節點和worker這種主從節點關系,所有的節點都是worker節點,因此我們需只需要按使用數量填寫worker節點,例如使用兩個節點那么設置如下:
啟動樣例:
在該命令行處可以執行多種操作命令,包含但不限于pip等安裝命令,如果我們有相似鏡像,但是不想再繼續制作鏡像可以在此處添加pip命令完成環境的完善等。
可以看到訓練已經開始。
在IDE相關的目錄下也可以看到log日志。
場景四:數據導入和遷移
少量本地數據導入,數據僅自己編碼測試使用
簡介:如果少量數據在電腦本地,可以直接從本地導入開發機的文件目錄即可完成數據導入到開發機,編碼讀取路徑即可。
方式1:Notebook或VScode打開后,左側目錄點擊右鍵-upload,即可導入。
方式2:直接選取本地電腦的文件拖拽到開發機中,即可導入。
少量本地數據導入,數據多人使用、管理
簡介:如果數據需要多個開發機使用、或者需要多人使用并且有權限控制,那么建議使用【數據集—基礎數據集】
步驟1.數據導入天翼云對象存儲
天翼云對象存儲//www.daliqc.cn/products/zos
開通并訪問控制臺,創建桶:
在桶內可以自行上傳文件夾或文件均可
步驟2.獲取ZOS文件(夾)的訪問路徑和AK/SK
獲取ZOS文件/文件夾的地址:點擊Bucket名稱進入Bucket詳情中,復制“Bucket外網訪問”的URL,然后在URL后面拼接“/xxx文件(夾)”即可獲得文件/文件夾地址。
例如下方的文件(夾)地址就是 。
獲取對象存儲ZOS的AK、SK。
步驟3.數據導入息壤一站式智算服務平臺
進入息壤一站式智算服務平臺,進入菜單【我的數據集-基礎數據集】,點擊創建普通存儲/智算存儲的數據集按鈕,進入創建頁面。
在創建頁面中,將步驟2中ZOS的【文件(夾)地址、AK、SK】分別填入【導入方式的ZOS存儲地址、數據源AK、數據源SK】,點擊提交即可開始導入數據。并且可以設置同租戶下哪些子用戶可以同樣看到和使用此數據集。
步驟4.使用基礎數據集
數據集導入后,可以在基礎數據集中查看導入進度。如果要大規模訓練之前,可【加速到智算存儲】通過HPFS并行文件系統進行數據存儲和高吞吐的訓練保障。
在啟動開發機和訓練任務的時候,均可選擇到【基礎數據集】,自動將數據集掛載到容器的掛載路徑中,讀取掛載路徑即可使用基礎數據集。
少量本地數據導入,數據需要做微調前標注
簡介:如果您想使用saas化的數據標注頁面,平臺支持導入GB級別的數據集進行數據標注,這里的數據集都是格式化的,用于大模型微調。
步驟1.導入標注數據集
支持導入的數據集格式有:多輪對話、指令微調三元組、Q&A問答對、語句回復排序、圖文匹配、圖像理解、視覺問答、圖像分類。按照引導提示的格式即可上傳,如果格式不符合將無法上傳。
步驟2.清洗、增強、標注、發布
上傳完成后可以對格式化的數據進行清洗、增強、標注。
步驟3.使用標注數據集精調
前置條件:數據集發布后才可進行精調。
進入模型精調,創建精調任務。
在精調任務創建時,先選擇模型,選好模型后,會出現模型支持的精調數據集類型,根據類型選擇您已發布的數據集即可進行精調。
大量外部存儲或服務器數據導入
數據量大的時候需要先把數據導入天翼云ZOS對象存儲、再在同資源池內的天翼云對象存儲導入息壤一站式智算服務平臺。
步驟1.把大量數據從外部導入天翼云對象存儲
從外部對象存儲遷移到天翼云對象存儲://www.daliqc.cn/document/10026735/10130494
從服務器遷移到天翼云對象存儲://www.daliqc.cn/document/10026735/10211451
如果看了說明仍然不會操作的話,請給天翼云對象存儲提工單,可以獲得專業技術支持。
步驟2.獲取ZOS文件(夾)的訪問路徑和AK/SK
獲取ZOS文件/文件夾的地址:點擊Bucket名稱進入Bucket詳情中,復制“Bucket外網訪問”的URL,然后在URL后面拼接“/xxx文件(夾)”即可獲得文件/文件夾地址。
例如下方的文件(夾)地址就是
獲取對象存儲ZOS的AK、SK。
步驟3.數據導入息壤一站式智算服務平臺
進入息壤一站式智算服務平臺,進入菜單【我的數據集-基礎數據集】,點擊創建普通存儲/智算存儲的數據集按鈕,進入創建頁面
在創建頁面中,將步驟2中ZOS的【文件(夾)地址、AK、SK】分別填入【導入方式的ZOS存儲地址、數據源AK、數據源SK】,點擊提交即可開始導入數據。并且可以設置同租戶下哪些子用戶可以同樣看到和使用此數據集。
步驟4.使用基礎數據集
數據集導入后,可以在基礎數據集中查看導入進度。如果要大規模訓練之前,可【加速到智算存儲】通過HPFS并行文件系統進行數據存儲和高吞吐的訓練保障。
在啟動開發機和訓練任務的時候,均可選擇到【基礎數據集】,自動將數據集掛載到容器的掛載路徑中,讀取掛載路徑即可使用基礎數據集。
場景五:資源管理分配
步驟1.租戶管理員創建和分配隊列
登陸租戶管理員賬號,進入管理中心【隊列管理】,
點擊【創建隊列】,可以為隊列分配資源數量配額,所有使用此隊列的用戶的所有運行中的任務所用卡數之和不能超過配置的資源配額,超出則排隊;管理員的權限高于成員,成員只能使用該隊列的資源,管理員除了能使用資源以外,還能管理該隊列,具體包含管理用戶、編輯、更配、啟動/停止、刪除操作。
步驟2.子用戶使用隊列
前置條件:子用戶被隊列管理員添加為隊列的【成員】、而且子用戶要使用的功能被添加在隊列的【負載類型】中。
使用方式:子用戶均可在對應的負載任務——開發機、訓練任務、服務部署、精調、評估、壓縮中使用相應的隊列。
步驟3.隊列資源不足
問題1 隊列總資源不足
如果隊列的總體資源不夠或者集群的總體資源不夠,任務狀態顯示為【資源準備中】。
處理方法為:
這時只能擴大隊列中的實例數量、或者減少任務需要的卡數和節點數。
問題2 隊列任務把卡占滿了導致空閑資源不足
如果隊列的總體資源足夠,則但是被其他用戶的任務用滿了,則任務狀態顯示為【排隊中】。
處理方法為:
處理方法1 自然等待:等運行中任務釋放&&空閑卡數>=等待任務所需卡數的時候,即可進入隊列進行啟動。
處理方法2 提升等待任務優先級:管理員可以在管理中心-資源總覽-排隊任務管理中,看到所有排隊的任務,在操作列可以給所有排隊的任務修改優先級。
處理方法3 關掉運行中的任務快速釋放資源:管理員可以在管理中心-資源總覽-運行任務管理中,看到所有運行中的任務,聯系對應人員關閉不緊急的任務釋放資源、或者緊急情況下管理員可以直接關停任何人的任務來釋放資源給等待的任務。
步驟3.修改隊列
負載類型修改:該隊列支持的任務類型按最新修改生效。比如之前支持大模型評估,修改后不支持了,則后續評估任務選隊列時,則不再展示該隊列。修改隊列不影響當前正在運行中的任務,只對后續創建的新任務生效。
實例規格修改:實例規格只有隊列中沒有存量運行中和排隊中的任務才允許修改。若該隊列的存量任務中存在正在運行的任務以及排隊中的任務,則不能修改會攔截修改操作,反之可以修改。
實例數修改:
如果實例數調大,上限是:資源池內可支持的上限。若用戶設置資源池上限無法提交修改。
如果實例數調小,下限是:隊列里已分配的卡數與該隊列里排隊中的任務中單任務所需的最大卡數的較小值。若用戶設置的低于這個數則無法提交修改。
說明:修改隊列不影響當前正在運行中的任務,只對后續創建的新任務生效。
停止隊列:隊列停止后,則不可以繼續往該隊列里提交任務,存量任務還是會執行完。
啟動隊列:則可以繼續向該隊列里提交任務。