用一杯星巴克的錢,訓練自己私有化的ChatGPT

来源:https://www.cnblogs.com/DolphinScheduler/archive/2023/05/30/17442868.html
-Advertisement-
Play Games

![file](https://img2023.cnblogs.com/other/2685289/202305/2685289-20230530115137903-2141604303.png) > 文章摘要:用一杯星巴克的錢,自己動手2小時的時間,就可以擁有自己訓練的開源大模型,並可以根據不同的 ...


file

文章摘要:用一杯星巴克的錢,自己動手2小時的時間,就可以擁有自己訓練的開源大模型,並可以根據不同的訓練數據方向加強各種不同的技能,醫療、編程、炒股、戀愛,讓你的大模型更“懂”你…..來吧,一起嘗試下開源DolphinScheduler加持訓練的開源大模型!

導讀

讓人人都擁有自己的ChatGPT

ChatGPT的誕生無疑讓我們為人工智慧的未來充滿期待,它以其精細的表達和強大的語言理解能力,震撼了全球。但是在使用ChatGPT的時候,因為它是SaaS,所以個人隱私泄露,企業數據安全問題是每一個人、每一個企業都擔心的問題。而現在越來越多的開源大模型出現,讓個人/企業擁有自己的大模型成為可能,但是,開源大模型上手、優化、使用要求門檻都比較高,很難讓大家簡單的使用起來。為此,我們藉助Apache DolphinScheduler,一鍵式地支持了開源大模型訓練、調優和部署,讓大家可以在極低的成本和技術儲備下,用自己的數據訓練出專屬於自己的大模型。當然,開源大模型的功力距離ChatGPT還有距離,但是經過測試我們看到7、8成的功力還是有的,而且這是可以根據你的場景和領域知識特殊訓練過的,針對性更強。同時,我們堅信將來隨著技術發展,開源大模型的能力會越來越強,讓用戶體驗越來越好。來吧,我們準備開始。

面向人群——每一個屏幕面前的你

我們的目標是,不僅專業的AI工程師,更是任何對GPT有需求和興趣的人,都能享受到擁有更“懂”自己的模型的樂趣。我們相信,每一個人都有權利和能力去塑造自己的AI助手,而Apache DolphinScheduler可見即所得的工作流程為此提供了可能。順帶介紹下Apache DolphinScheduler,這是一個Star超過1萬個的大數據和AI的調度工具,它是Apache開源基金會旗下的頂級項目,這意味著你可以免費使用它,也可以直接修改代碼而不用擔心任何商業問題。

無論你是業界專家,尋求用專屬於你的數據來訓練模型,還是AI愛好者,想嘗試理解並探索深度學習模型的訓練,我們下麵的這個工作流程都將為你提供便捷的服務。它為你解決了複雜的預處理、模型訓練、優化等步驟,只需1-2個小時幾個簡單的操作,加上20小時的運行時間,就可以構建出更“懂”你的ChatGPT大模型:

https://weixin.qq.com/sph/AHo43o

那麼,我們一起開啟這個神奇的旅程吧!讓我們把AI的未來帶到每一個人的手中。

僅用三步,構造出更“懂”你的ChatGPT

  1. 用低成本租用一個擁有3090級別以上的GPU顯卡
  2. 啟動DolphinScheduler
  3. 在DolphinScheduler頁面點擊訓練工作流和部署工作流,直接體驗自己的ChatGPT吧

1. 準備一臺3090顯卡的主機

首先需要一個3090的顯卡,如果你自己有台式機可以直接使用,如果沒有,網上也有很多租用GPU的主機,這裡我們以使用AutoDL為例來申請,打開 https://www.autodl.com/home,註冊登錄,後可以在算力市場選擇對應的伺服器,根據屏幕中的1,2,3步驟來申請:

file

這裡,建議選擇性價比較高的RTX3090,經過測試支持1-2個人線上使用3090就可以了。如果想訓練速度和響應速度更快,可以選擇更強的顯卡,訓練一次大約需要20小時左右,使用測試大概2-3個小時,預算40元就可以搞定了。

鏡像

點擊社區鏡像,然後在下麵紅框出輸入 WhaleOps/dolphinscheduler-llm/dolphinscheduler-llm-0521 之後,即可選擇鏡像,如下如所示,目前只有V1版本的,後面隨著版本更新,有最新可以選擇最新

file
如果需要多次訓練模型,建議硬碟擴容一下,建議100G即可。

創建後,等待下圖所示的進度條創建完成即可。
file

2. 啟動DolphinScheduler

為了可以在界面上部署調試自己的開源大模型,需要啟動DolphinScheduler這個軟體,我們要做以下配置工作:

進入伺服器

進入伺服器的方式有兩種,可以按照自己的習慣進行:

通過JupyterLab頁面登錄(不懂代碼的請進)

點擊如下JupyterLab按鈕

file
頁面跳轉到JupyterLab,後可以點擊這裡的終端進入

file
file

通過終端登錄(懂代碼的請進)

我們可以從下圖這個按鈕獲取SSH連接命令

file
並通過終端鏈接

file

導入DolphinScheduler的元數據

在DolphinScheduler中,所有的元數據都存儲在資料庫中,包括工作流的定義,環境配置,租戶等信息。為了方便大家在使用時能夠啟動DolphinScheduler時候就能夠看到這些工作流,我們可以直接導入已經做好的工作流定義數據,照屏幕copy進去。

修改導入MySQL的數據的腳本

通過終端如下命令,進入到以下目錄

cd apache-dolphinscheduler-3.1.5-bin

敲擊命令,vim import_ds_metadata.sh 打開 import_ds_metadata.sh 文件

文件內容如下

#!/bin/bash

# 設置變數
# 主機名
HOST="xxx.xxx.xxx.x"
# 用戶名
USERNAME="root"
# 密碼
PASSWORD="xxxx"
# 埠
PORT=3306
# 導入到的資料庫名
DATABASE="ds315_llm_test"
# SQL 文件名
SQL_FILE="ds315_llm.sql"

mysql -h $HOST -P $PORT -u $USERNAME -p$PASSWORD -e "CREATE DATABASE $DATABASE;"

mysql -h $HOST -P $PORT -u $USERNAME -p$PASSWORD $DATABASE < $SQL_FILE

把 xxx.xxx.xxx.x 和 xxxx 修改成你公網上一個mysql的一個資料庫的數據(可以自己在阿裡雲、騰訊雲申請或者自己安裝一個),然後執行

bash import_ds_metadata.sh

執行後,如果有興趣可在資料庫中看到相應的元數據(可連接mysql查看,不懂代碼的略過)。

file

啟動DolphinScheduler

在伺服器命令行里,打開下麵的文件,修改配置到DolphinScheduler連接剛纔的資料庫

/root/apache-dolphinscheduler-3.1.5-bin/bin/env/dolphinscheduler_env.sh

修改資料庫部分的相關配置,其他部分不用修改,把’HOST’和’PASSWORD’的值改為剛纔導入的資料庫的相關配置值 xxx.xxx.xxx.x 和 xxxx:

......
export DATABASE=mysql
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:mysql://HOST:3306/ds315_llm_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false"
export SPRING_DATASOURCE_USERNAME="root"
export SPRING_DATASOURCE_PASSWORD="xxxxxx"
......

配置完成後執行(也在這個目錄下 /root/apache-dolphinscheduler-3.1.5-bin )

bash ./bin/dolphinscheduler-daemon.sh start standalone-server

執行完成後,我們可以通過 tail -200f standalone-server/logs/dolphinscheduler-standalone.log 查看日誌,這時候,DolphinScheduler就正式啟動了!

啟動服務後,我們可以在AutoDL控制臺中點擊自定義服務(紅框部分)會跳轉到一個網址:

file
打開網址後發現是404,彆著急,我們補充一下url的尾碼 /dolphinscheduler/ui 即可

file

AutoDL模塊開放一個6006的埠,我們將DolphinScheduler的埠配置成6006之後,可以通過上面的入口進入,但是因為跳轉的url補全,所以404,因此我們補全URL即可

登錄用戶名密碼

用戶名: admin

密碼: dolphinscheduler123

登錄後點擊 項目管理,即可看到我們預置的項目 vicuna,再次點擊 vicuna後,我們即可進入該項目。

file

3. 開源大模型訓練與部署

工作流定義

進入vicuna項目後,點擊工作流定義,我們可以看到三個工作流,Training,Deploy,Kill_Service,下麵解釋下這幾個功能的用途和內部選擇大模型和訓練你自己的數據的配置:

file

我們可以點擊下麵的運行按鈕運行對應的工作流

file

Training

點擊後可以看到工作流的定義,包含兩個,一個是通過lora finetune模型,一個是將訓練出來的模型與基礎模型進行合併,得到最終的模型。

具體的任務定義,可以雙擊對應的圖標查看。

file
該工作流具有以下參數(點擊運行後彈出)

  • base_model: 基礎模型,根據個人情況選擇自行下載,註意開源大模型僅為學習和體驗用途,目前預設為 TheBloke/vicuna-7B-1.1-HF
  • data_path: 你要訓練的個性化數據和領域數據的路徑,預設為 /root/demo-data/llama_data.json
  • lora_path: 訓練出來的lora權重的保持路徑 /root/autodl-tmp/vicuna-7b-lora-weight
  • output_path: 將基礎模型和lora權重合併之後,最終模型的保存路徑,記下來部署的時候需要用到
  • num_epochs: 訓練參數,訓練的輪次,可以設為1用於測試,一般設為3~10即可
  • cutoff_len: 文本最大長度,預設1024
  • micro_batch_size: batch_size

file

Deploy

部署大模型的工作流,會先引用kill_service殺死已經部署的模型,在依次啟動 controller,然後添加模型,然後打開gradio網頁服務。

file
啟動參數如下

file

  • model: 模型路徑,可以為huggingface的模型id,也可以為我們訓練出來的模型地址,即上面training工作流的output_path。預設為TheBloke/vicuna-7B-1.1-HF 使用預設,將直接部署vicuna-7b的模型

Kill_service

這個工作流用於殺死已經部署的模型,釋放顯存,這個工作流沒有參數,直接運行即可。

如果一些情況下,我們要停掉正在部署的服務(如要重新訓練模型,顯存不夠時)我們可以直接執行kill_service工作流,殺死正在部署的服務。

看過經過幾個實例,你的部署就完成了,下麵我們實操一下:

大模型操作實例演示

訓練大模型

啟動工作流

可以直接執行training的工作流,選擇預設參數即可

啟動後,可以點擊下圖紅框部分工作流實例,然後點擊對應的工作流實例查看任務執行情況

file
右鍵對應的任務,可以查看對應的日誌,如下

file
也可以在左邊欄最下麵的任務實例欄中,查看對應的任務狀態和日誌等信息

在訓練過程中,也可以通過查看日誌查看具體訓練的進度(包括當前的訓練步數,loss指標,剩餘時間等),有個進度條一直顯示目前在第幾個step,step = 數據量 * epoch / batchsize

file
訓練完成後日誌如下

file
file
更新自己個性化訓練數據

我們預設的數據是在 /root/demo-data/llama_data.json ,當前數據來源於下麵華佗,一個使用中文醫學數據finetune的醫學模型,對,我們樣例是訓練一個家庭醫生出來:

file
如果自己有特定領域的數據,可以指向自己的數據,數據格式如下

一行一個json,欄位含義為

  • instruction ****: 指令,為給模型指令
  • input : 輸入
  • output : 期望模型的輸出

如以下

{"instruction": "計算算數題", "input": "1+1等於幾", "output": "2"}

溫馨提示,可以將 instructioninput 合併為 instruction , input為空也可以。

按照格式製作數據,訓練時修改data_path 參數執行自己的數據即可。

註意事項

第一次執行訓練,會從你指定的位置拉取基礎模型,例如TheBloke/vicuna-7B-1.1-HF ,會有下載的過程,稍等下載完成即可,這個模型下載是由用戶指定的,你也可以任選下載其他的開源大模型(註意使用時遵守開源大模型的相關協議)。

因為網路問題,第一次執行Training的時候,有可能會下載基礎模型到一半失敗,這個時候可以點擊重跑失敗任務,即可重新繼續訓練,操作如下所示
file

如果要停止訓練,可以點擊停止按鈕停止訓練,會釋放訓練占用的顯卡顯存

file

部署工作流

在工作流定義頁面,點擊運行deploy工作流,如下如所示即可部署模型

file
如果自己沒有訓練出來的模型的話,也可以執行預設參數 TheBloke/vicuna-7B-1.1-HF,部署vicuna-7b的模型,如下圖所示:

file
如果在上一步我們進行了模型訓練,我們可以部署我們的模型了,部署之後就可以體驗我們自己的大模型了,啟動參數如下,填入上一步的模型的output_path即可

file
下麵我們進入部署的工作流實例,如下圖所示,先點擊工作流實例,然後點擊deploy首碼的工作流實例即可

file
右鍵點擊refresh_gradio_web_service後可以查看任務日誌,找到我們大模型鏈接的位置,操作如下

file
在日誌的最後,我們可以看到一個鏈接,可以公網訪問,如下

file
這裡有兩個鏈接,一個是0.0.0.0:7860 因為AutoDL只開放了6006埠,並且已經用於dolphinscheduler,所以我們暫時無法訪問該介面,我們可以直接訪問下麵的鏈接

[https://81c9f6ce11eb3c37a4.gradio.live](https://81c9f6ce11eb3c37a4.gradio.live) 這個鏈接每次部署都會不一樣,因此需要從日誌找重新找鏈接。

進入後,即可看到我們的對話頁面

file
file
對!就這樣你就擁有了你自己的ChatGPT了!而且它的數據僅服務於你自己!而且!你只花了不到一杯咖啡的錢哦~~

體驗一下,你自己的私有化ChatGPT吧!

總結

在這個以數據和技術驅動的世界中,擁有一個專屬的ChatGPT模型具有無法估量的價值。隨著人工智慧和深度學習的日益發展,我們正處在一個可塑造個性化AI助手的時代。而訓練和部署屬於自己的ChatGPT模型,可以幫助我們更好地理解AI,以及它如何改變我們的世界。

總的來說,自訓練和部署ChatGPT模型可以幫助你更好地保護數據安全和隱私、滿足特定的業務需求、節約技術成本,同時通過工作流工具如DolphinScheduler使訓練過程自動化,並更好地遵守當地的法律法規。這都使得自訓練和部署ChatGPT模型成為一個值得考慮的選擇。

附註意事項:

數據安全與隱私

當你使用公共API服務使用ChatGPT時,你可能會對數據的安全性和隱私有所顧慮。這是一個合理的擔憂,因為你的數據可能會在網路中被傳播。通過自己訓練和部署模型,你可以確保你的數據僅在你自己的設備或你租用的伺服器上存儲和處理,保障數據安全與隱私。

特定領域知識

對於具有特定業務需求的組織或個人來說,通過訓練自己的ChatGPT模型,可以確保模型具有與業務相關的最新和最相關的知識。無論你的業務領域是什麼,一個專門針對你的業務需求訓練的模型都會比通用模型更有價值。

投入成本

使用OpenAI的ChatGPT模型可能會帶來一定的費用,同時如果要自己訓練和部署模型,也需要投入一定的資源和技術成本,40元就可以體驗調試大模型,如果長期運行建議自己採購3090顯卡,或者年租雲端伺服器。因此,你需要根據自己的具體情況,權衡利弊,選擇最適合自己的方案。

DolphinScheduler

通過使用Apache DolphinScheduler的工作流,你可以使整個訓練過程自動化,大大降低了技術門檻。即使你不具備深厚的演算法知識,也可以依靠這樣的工具,順利地訓練出自己的模型。支持大模型訓練的同時,它也支持大數據調度、機器學習的調度,幫助你和你的企業非技術背景的員工簡單上手的做好大數據處理、數據準備、模型訓練和模型部署,而且,它是開源且免費的。

開源大模型法律法規約束

DolphinScheduler只是可視化AI工作流,本身不提供任何開源大模型。用戶在使用下載開源大模型時,你需要註意自行選擇不同的開源大模型使用約束條件,本文中的開源大模型所舉的例子僅供個人學習體驗使用,使用大模型時需要註意遵守開源大模型開源協議合規性。同時,不同國家都不同嚴格的數據存儲和處理規定,在使用大模型時,你必須對模型進行定製和調整,以適應你所在地的具體法律法規和政策。這可能包括對模型輸出的內容進行特定的過濾等,以滿足當地的隱私和敏感信息處理規定。

本文由 白鯨開源 提供發佈支持!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這是一份最好的中藥資料庫,不但欄位內容最為詳細,而且記錄數也是最多的,欄位包含:藥名、別名、漢語拼音、拉丁文名、英文名、拉丁植物動物礦物名、性味、歸經、功效、主治、用法用量、用藥禁忌、功效分類、藥理作用、中藥化學成分、選方、各家論述、考證、科屬分類、採收和儲藏、資源分佈、動植物形態、生藥材鑒定、藥用 ...
  • 《全唐詩》是清朝初年編修的彙集唐代詩歌的總集,全書共九百捲,收錄唐代詩人二千五百二十九家,詩作四萬二千八百六十三首,是中國規模最大的一部詩歌總集。(全唐詩ACCESS資料庫含記錄數有43086條) 《全宋詞》薈萃了宋代三百年間的詞作,收錄宋代詞人一千三百三十家,詞作兩萬一千一百一十六首,是中國近百年 ...
  • 大家好,接著上次和大家一起學習了《MySQL DDL執行方式-Online DDL介紹》,那麼今天接著和大家一起學習另一種MySQL DDL執行方式之pt-soc。 ...
  • 再在越來越多的地方不但需要昵稱,同時也可以設置昵稱下麵的個人簽名,官方叫“個性簽名”。百度百科的解釋是:是指你在某個論壇(BBS)註冊之後, 就可以設置自己的簽名了,即在你的每個帖子底部顯示的文字, 有些象便簽抬頭。 由於每個網友所寫的文字都不同,有格言、有諺語、有調侃語句等等,也有用圖片、動畫作為 ...
  • 在之前就弄到過個性網名和論壇簽名的數據,比如有《8萬多個網名大全QQ網名ACCESS資料庫》、《個性網名大全網路名稱大全ACCESS資料庫》《2萬多條QQ簽名論壇簽名大全ACCESS資料庫》、《24萬QQ傷感簽名論壇簽名ACCESS資料庫》、《近2萬簽名的句子網路簽名ACCESS資料庫》、《上萬條個 ...
  • 今天這一份方劑資料庫是最全也是最好的方劑資料庫,不但欄位內容多,而且記錄數也是最多的,欄位包含:名稱、組成、出處、功效、主治、加減、用法用量、製備方法、臨床應用、各家論述、用藥禁忌、附註等。 HTML內容欄位是排版好了的全部內容,具體可以從以下鏈接下載樣本: 鏈接: https://pan.baid ...
  • 雖然收集了一些古詩詞相關的資料庫,但好像沒有什麼註釋點評類的內容,而今天這份《1萬7千多首古詩詞範賞評詩詞ACCESS資料庫》包含了17704首本地賞評詩詞、12個朝代分門別類、1680位本地詩人簡介、超過50個詩詞分類欣賞。 樣本請從以下鏈接下載:鏈接: https://pan.baidu.com ...
  • 或許你已經看過很多博主寫的文章,要不就是抄襲,要不就是給你一個下麵的語句,隨機是隨機了,但是多來兩頁,你會發現前面出現的數據在第三頁甚至第二頁就出現了 select * from table order by rand() 這是因為rand()機制的問題,他每次都會打亂數據給你,然後你去取的時候0- ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...