MedicalGPT:把 ChatGPT 訓練流程搬到醫療領域的 Python 專案
MedicalGPT: Training Your Own Medical GPT Model with ChatGPT Training Pipeline. 训练医疗大模型,实现了包括增量预训练(PT)、有监督微调(SFT)、RLHF、DPO、ORPO、GRPO。
秒懂
- 它是什麼?
- MedicalGPT 把增量預訓練、SFT、獎勵建模、RLHF、DPO、ORPO、GRPO 到 OPD 蒸餾串成一條可執行的訓練管線,適合已經有領域語料與 GPU 資源、想自己走完整流程的團隊。它的價值在於流程完整,代價是每一個階段都得自己準備資料、自己承擔算力。
- 適合誰用?
- 已經有醫療領域語料、有 GPU 資源、而且需要完整偏好對齊流程的團隊,可以採用 MedicalGPT;只想做檢索問答、或沒有能力清洗領域資料的團隊,應該先考慮 RAG 方案而不是訓練。導入前先確認三件事:訓練資料能否整理成 ShareGPT 格式並通過 data 目錄下的轉換腳本,DeepSpeed 設定檔與你的卡數是否匹配,以及你打算走 RLHF 還是 DPO,因為兩者對標註資料的要求完全不同。
- 可以商用嗎?
- 可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫在最近一天內有新的提交。
- 用什麼語言寫的?
- 主要是 Python(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
醫療領域模型為什麼需要一條完整訓練管線
通用大模型在醫療問答上的問題不是不懂語言,而是不懂分佈。病歷、處方、隨訪記錄的用詞與網路文本差距很大,直接拿通用模型做指令微調,模型會用通用常識回答專科問題。MedicalGPT 針對的就是這個落差:README 把它定位成「基於 ChatGPT Training Pipeline」的領域模型訓練專案,以醫療為例,把二次預訓練、有監督微調、獎勵建模、強化學習四個階段都實作出來。
它的目標讀者不是想直接下載一個醫療模型來用的人,而是想自己走一遍流程的人。專案在 Hugging Face 上發布過 shibing624/ziya-llama-13b-medical-lora 與對應的合併權重,但這些是 2023 年的產物,README 的更新日誌顯示後續版本的重心已經轉向訓練方法本身:v2.4 加入 GRPO,v2.5 適配 Qwen3.5 系列,v2.7 加入 OPD 蒸餾。換句話說,這個倉庫賣的是管線,不是模型。
七個訓練階段各自解決什麼問題
README 把流程拆成明確的階段。第一階段 PT(Continue PreTraining)在海量領域文檔上做二次預訓練,讓模型適應領域資料分佈,文件標註為可選。第二階段 SFT 建構指令微調資料集,在預訓練模型上做指令精調,同時注入領域知識。第三階段分成兩條路:一條是 RLHF,先做 RM 獎勵建模,用偏好排序資料訓練獎勵模型來建模 HHH 原則(helpful、honest、harmless),再用獎勵模型去更新 SFT 模型的策略;另一條是 DPO,直接優化語言模型來控制行為,README 明確說它「無需使用複雜的強化學習」,且「相較於 RLHF 更容易實現且易於訓練」。
後續版本又補上 ORPO 與 GRPO。ORPO 來自同名論文,屬於不需要參考模型的偏好優化方法;GRPO 在 v2.4 加入,README 說它「通過純 RL 方法可以體驗 aha moment」,支援 LoRA 與全參訓練。v2.7 的 OPD 是獨立入口 training/opd_training.py,走的是在策略蒸餾路線。這條清單的意義在於:偏好對齊不再只有 RLHF 一種選擇,你可以用 DPO 或 ORPO 省掉獎勵模型這一步,也可以先用 GRPO 試純 RL 路線。
從資料到權重的實際路徑
專案以 Python 撰寫,requirements.txt 標示 Python 3.8 以上。啟動方式以 shell 腳本為主:README 提到 ORPO 的用法參照 scripts/run_orpo.sh,v2.7 的 OPD 則對應 scripts/run_opd.sh。這種設計意味著參數不是寫死在程式裡,而是透過腳本傳給訓練入口,你要改的是腳本而不是原始碼。
data 目錄是資料的落腳點。v2.6 在該目錄下補充了 toolcall 資料樣例,並加入支援不同模型的工具資料格式轉換與解析程式碼,表示工具呼叫訓練需要先把原始資料轉成模型對應的格式。對話模板方面,v2.5 新增了 qwen3、qwen3_5、qwen3_nothink、qwen3_5_nothink 四種模板,nothink 變體對應關閉思考鏈的推理模型。
訓練規模的支援看得到具體線索:v2.5 提到支援 DeepSpeed ZeRO-3 MoE 訓練,v1.8 支援 Mixtral 8x7B 這類混合專家模型,v1.6 則針對 LLaMA 系列加入 FlashAttention-2 與 LongLoRA 的 S²-Attn,並用 RoPE 插值擴展上下文長度。這些都是為了讓單機多卡或小規模叢集跑得動大模型而存在的工程手段。
檢索問答這條替代路線,以及它和訓練的差別
同一個倉庫在 v1.7 加入了基於文件的問答功能 ChatPDF,程式位於 demo/chatpdf.py,README 的說法是「基於微調後的 LLM 結合知識庫文件問答提升行業問答準確率」。這其實是 RAG 路線,和訓練路線解決的問題不同。
訓練把領域知識寫進權重,推論時不需要外部檢索,但代價是知識會過時,而且要重新訓練才能更新;RAG 把知識留在外部文件庫,更新只需換文件,但檢索品質直接決定答案上限,而且模型本身沒有被對齊到醫療語域。實務上的分界很清楚:如果你的需求是回答「這份病歷裡的血壓是多少」,那是檢索問題;如果是讓模型學會用專科醫師的語氣與推理順序回答,那才需要 SFT 與偏好對齊。MedicalGPT 兩條路都提供了,但 README 沒有給出兩者效果對比的資料,所以選擇依據只能是你的資料形態,而不是專案給的數字。
資料格式與算力是最容易低估的兩道門檻
這個專案沒有附帶可用的醫療訓練語料。README 提到 v1.3 曾新增中文預訓練資料集與中文 ShareGPT 微調訓練集,但整個流程的輸入仍然由使用者提供。SFT 要求指令資料,RM 要求偏好排序資料,DPO 與 ORPO 要求 chosen/rejected 配對,GRPO 要求可驗證的獎勵信號。這四種資料的取得難度完全不同,偏好排序資料尤其需要具備專科背景的標註者,不是找幾個人比對兩個答案就能交差。
算力方面,README 沒有給出任何階段的硬體需求表。從支援 DeepSpeed ZeRO-3 與 Mixtral 8x7B 這點可以推斷,全參訓練的門檻不低,LoRA 路線則相對可行,因為 v2.4 明確說 GRPO 支援 LoRA 與全參兩種模式。真正的失敗模式通常不是程式跑不起來,而是跑完之後模型在通用能力上退化了,這種災難性遺忘在增量預訓練階段最常見,而 README 對這個階段的描述只有「可選」兩個字,沒有給出資料配比或正則化建議。
版本節奏與 Apache-2.0 的實際含義
從更新日誌看,2026 年 4 月到 6 月之間連續發布了 2.5.0、2.6.0、2.7.0 三個版本,分別對應 Qwen3.5 適配、工具呼叫微調、OPD 蒸餾。這個節奏說明專案在追新模型與新訓練方法,好處是你不用自己接新架構,代價是升級頻繁,訓練腳本與參數可能隨版本變動。維護成本主要落在兩處:一是模型適配層,每當上游模型改對話模板,你得跟著調整模板名稱;二是 DeepSpeed 設定,換卡數或換模型規模時設定檔要重調。
授權為 Apache-2.0,這表示你可以商用、可以修改、可以再發布,需要保留版權與授權聲明。但要注意兩件事:授權只覆蓋這個倉庫的程式碼,不覆蓋你下載的基礎模型權重,那些模型各有自己的授權條款;也不覆蓋你使用的訓練資料。醫療場景另外還有法規層面的約束,這不是授權條款能處理的,需要另外評估。以上不構成法律意見。
誰該用,誰該先等等
適合採用的情況相當具體:你有已經清洗過的醫療領域語料,有穩定的多卡環境,而且團隊裡有人看得懂訓練腳本與 DeepSpeed 設定。這種團隊可以把 MedicalGPT 當成流程骨架,先跑 SFT 驗證資料品質,再決定要不要往 DPO 或 ORPO 走。
不適合的情況同樣具體。如果你的目標只是讓模型能回答自家知識庫裡的問題,demo/chatpdf.py 那條路線成本低得多。如果你的資料量只有幾千條問答,SFT 之後的偏好對齊階段缺乏足夠的配對樣本,強行做 DPO 只會讓模型過擬合到少數偏好樣本上。如果團隊沒有人能判斷模型輸出在醫學上是否正確,那訓練出來的模型無法驗收,這與程式碼品質無關。
該先驗證的是資料轉換這一環。v2.6 提到工具資料格式轉換與解析程式碼,v2.5 列出四種對話模板,這些都表示輸入格式必須與目標模型匹配。先用 data 目錄下的樣例跑通一次轉換與訓練入口,確認格式無誤,再投入標註資源,這比先標幾萬條偏好資料然後發現格式不對要划算。
編輯結論
已經有醫療領域語料、有 GPU 資源、而且需要完整偏好對齊流程的團隊,可以採用 MedicalGPT;只想做檢索問答、或沒有能力清洗領域資料的團隊,應該先考慮 RAG 方案而不是訓練。導入前先確認三件事:訓練資料能否整理成 ShareGPT 格式並通過 data 目錄下的轉換腳本,DeepSpeed 設定檔與你的卡數是否匹配,以及你打算走 RLHF 還是 DPO,因為兩者對標註資料的要求完全不同。
社群筆記