AI Personal Learning
und praktische Anleitung
Sitzsack Marscode

Feinabstimmung des DeepSeek R1-Modells zur Ermöglichung präziser medizinischer Fragen und Antworten: Freisetzung des Potenzials von Open-Source-KI

DeepSeek eine Reihe von fortschrittlichen Inferenzmodellen eingeführt, um die Position von OpenAI in der Branche herauszufordern, undVöllig kostenlos, keine NutzungsbeschränkungenDas Programm ist so konzipiert, dass es allen Nutzern zugute kommt.

In diesem Artikel beschreiben wir die Feinabstimmung des DeepSeek-R1-Distill-Llama-8B-Modells anhand des Datensatzes Medical Mind Chain von Hugging Face. Diese Lite-Version des DeepSeek-R1 Modell, das durch eine Feinabstimmung des Llama 3 8B Modells auf die von DeepSeek-R1 generierten Daten erhalten wurde, zeigt eine bessere Inferenz als das ursprüngliche Modell.


DeepSeek R1 Entschlüsselung

DeepSeek-R1 und DeepSeek-R1-Zero übertreffen das o1-Modell von OpenAI bei mathematischen, programmtechnischen und logischen Denkaufgaben.Es ist erwähnenswert, dass sowohl R1 als auch R1-Zero Open-Source-Modelle sind..

DeepSeek-R1-Zero

DeepSeek-R1-Zero ist das erste Open-Source-Modell, das ausschließlich mit groß angelegtem Reinforcement Learning (RL) trainiert wird, im Gegensatz zu herkömmlichen Modellen, die in einem ersten Schritt Supervised Fine-Tuning (SFT) verwenden. Dieser innovative Ansatz ermöglicht es den Modellen, selbstständig CoT (Chain-of-Thought)-Gedankengänge zu erforschen, komplexe Probleme zu lösen und die Ergebnisse iterativ zu optimieren. Allerdings bringt dieser Ansatz auch einige Herausforderungen mit sich, wie z. B. die mögliche Duplizierung von Argumentationsschritten, eine geringere Lesbarkeit und einen uneinheitlichen Sprachstil, was wiederum die Klarheit und Nützlichkeit des Modells beeinträchtigt.

DeepSeek-R1

Die Veröffentlichung von DeepSeek-R1 zielt darauf ab, die Unzulänglichkeiten von DeepSeek-R1-Zero zu überwinden. Durch die Einführung von Cold-Start-Daten vor dem Reinforcement Learning legt DeepSeek-R1 eine stärkere Grundlage für Inferenz- und Nicht-Inferenz-Aufgaben. Diese mehrstufige Trainingsstrategie ermöglicht es DeepSeek-R1, in Mathematik-, Programmier- und Inferenz-Benchmarks eine Spitzenleistung gegenüber OpenAI-o1 zu erzielen und die Lesbarkeit und Kohärenz der Ausgabe deutlich zu verbessern.

DeepSeek-Destillationsmodell

DeepSeek hat auch eine Familie von Destillationsmodellen eingeführt. Diese Modelle sind kleiner und effizienter und bieten gleichzeitig eine hervorragende Inferenzleistung. Obwohl die Parametergrößen von 1,5B bis 70B reichen, verfügen alle diese Modelle über starke Inferenzfähigkeiten. Unter ihnen übertrifft DeepSeek-R1-Distill-Qwen-32B das OpenAI-o1-mini-Modell in mehreren Benchmarks. Die kleineren Modelle übernehmen die Inferenzmuster der größeren Modelle, was die Wirksamkeit der Destillationstechnik voll und ganz unter Beweis stellt.

Schrittweises Feintuning von DeepSeek R1 zu einem DeepDoctor -1

DeepSeek R1-Feinabstimmung in Aktion

1. ökologische Konfiguration

Für die Feinabstimmung des Modells wurde Kaggle als Cloud-IDE gewählt, da Kaggle kostenlose GPU-Ressourcen zur Verfügung stellt. Ursprünglich wurden zwei T4-GPUs ausgewählt, aber nur einer wurde verwendet. Wenn Benutzer die Modellfeinabstimmung auf einem lokalen Computer durchführen möchten, müssen sie mindestens überEine RTX 3090-Grafikkarte mit 16 GB Speicher..

Starten Sie zunächst ein neues Kaggle-Notizbuch mit dem Umarmungsgesicht des Benutzers Token im Gesang antworten Gewichte & Biases Token wird als Schlüssel hinzugefügt.

Nach der Einrichtung des Schlüssels installieren Sie die unsloth Unsloth ist ein Open-Source-Framework, das die Geschwindigkeit der Feinabstimmung großer Sprachmodelle (LLMs) verdoppelt und die Speichereffizienz erheblich verbessert.

%pture
!pip installieren unsloth
!pip install --force-reinstall --no-cache-dir --no-deps git+https://github.com/unslothai/unsloth.git

Dieser Schritt ist entscheidend für das anschließende Herunterladen des Datensatzes und das Hochladen des fein abgestimmten Modells.

from huggingface_hub importieren login
from kaggle_secrets import UserSecretsClient
benutzer_geheimnisse = UserSecretsClient()
hf_token = user_secrets.get_secret("HUGGINGFACE_TOKEN")
login(hf_token)

Melden Sie sich dann bei Weights & Biases (wandb) an und erstellen Sie ein neues Projekt, um den Verlauf des Experiments zu verfolgen und den Fortschritt zu optimieren.

wandb importieren
wb_token = user_secrets.get_secret("wandb")
wandb.login(key=wb_token)
run = wandb.init(
project='Fine-tune-DeepSeek-R1-Distill-Llama-8B on Medical COT Dataset',
job_type="training",
anonymous="zulassen"
)

2. modelle und tokeniser laden

In der Praxis dieser Arbeit wurde die Unsloth-Version des Modells DeepSeek-R1-Distill-Llama-8B geladen.

https://huggingface.co/unsloth/DeepSeek-R1-Distill-Llama-8B

Um die Speichernutzung zu optimieren und die Leistung zu verbessern, wurde das Modell in einer 4-Bit-quantisierten Weise geladen.

from unsloth import FastLanguageModel
max_seq_length = 2048
dtype = Keine
load_in_4bit = Wahr
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/DeepSeek-R1-Distill-Llama-8B",
max_seq_length=max_seq_length,
dtype=dtype,
load_in_4bit=load_in_4bit,
token=hf_token, )
)

3. vor der Feinabstimmung des Modells - Grundierung der Argumentationsfähigkeit

Um eine Prompt-Vorlage für das Modell zu erstellen, wurde ein Systemprompt mit Platzhaltern für die Frage- und Antwortgenerierung definiert. Dieser Prompt soll das Modell durch einen schrittweisen Denkprozess leiten und schließlich logisch strenge und genaue Antworten erzeugen.

prompt_style = """Nachfolgend finden Sie eine Anweisung, die eine Aufgabe beschreibt, gepaart mit einer Eingabe, die weiteren Kontext liefert.
Schreiben Sie eine Antwort, die die Aufgabe angemessen erfüllt.
Denken Sie vor der Beantwortung sorgfältig über die Frage nach und erstellen Sie eine schrittweise Gedankenkette, um eine logische und genaue Antwort zu gewährleisten.
### Anweisung.
Sie sind ein medizinischer Experte mit fortgeschrittenen Kenntnissen in klinischer Argumentation, Diagnostik und Behandlungsplanung.
Bitte beantworten Sie die folgende medizinische Frage.
### Frage.
{Bitte beantworten Sie die folgende medizinische Frage.}
### Antwort.
{}""

In diesem Beispiel wird eine Nachricht an die prompt_style Eine medizinische Frage wird gestellt und in Token übersetzt, die anschließend an das Modell weitergegeben werden, um eine Antwort zu generieren.

question = "Eine 61-jährige Frau, die seit langem unwillkürlichen Urinverlust bei Aktivitäten wie Husten oder Niesen, aber keinen nächtlichen Harnverlust aufweist, wird gynäkologisch untersucht und einem Q-Tip-Test unterzogen. Was würde die Zystometrie auf der Grundlage dieser Befunde höchstwahrscheinlich über ihr Restvolumen und ihre Detrusorkontraktionen aussagen? Kontraktionen?"
FastLanguageModel.for_inference(model)
inputs = tokeniser([prompt_style.format(question, "")], return_tensors="pt").to("cuda")
outputs = model.generate(
input_ids=inputs.input_ids,
attention_mask=inputs.attention_mask, max_new_tokens
max_new_tokens=1200,
use_cache=True,
)
response = tokeniser.batch_decode(outputs)
print(antwort[0].split("### Antwort:")[1])

Der Kern der oben genannten medizinischen Frage lautet:

Eine 61-jährige Frau mit einer langen Vorgeschichte von unwillkürlichem Urinverlust bei Aktivitäten wie Husten oder Niesen, aber ohne nächtlichen Urinverlust. Sie unterzog sich einer gynäkologischen Untersuchung und einem Q-Tip-Test. Welche Informationen würde eine Zystometrie auf der Grundlage dieser Befunde am ehesten über ihr Restharnvolumen und den Status der Detrusorkontraktion liefern?

Auch ohne Feinabstimmung erzeugt das Modell erfolgreich Gedankenketten und führt strenge Überlegungen durch, bevor es die endgültige Antwort gibt, wobei der gesamte Überlegungsprozess in der  Tagged within.

Warum ist also noch eine Feinabstimmung erforderlich? Obwohl das Modell einen detaillierten Argumentationsprozess aufweist, ist seine Darstellung etwas langatmig und nicht prägnant genug. Außerdem werden die endgültigen Antworten in Form von Aufzählungslisten dargestellt, was von der Struktur und dem Stil des Datensatzes abweicht, der feinabgestimmt werden soll.

4. das Laden und die Vorverarbeitung von Datensätzen

Die Eingabeaufforderungsvorlage wurde durch Hinzufügen eines dritten Platzhalters für die Spalte "Komplexe Gedankenkette" in der Eingabeaufforderungsvorlage feinabgestimmt, um den Verarbeitungsanforderungen des Datensatzes gerecht zu werden.

train_prompt_style = """Nachfolgend finden Sie eine Anweisung, die eine Aufgabe beschreibt, gepaart mit einer Eingabe, die weiteren Kontext liefert.
Schreiben Sie eine Antwort, die die Aufgabe angemessen erfüllt.
Bevor Sie antworten, denken Sie sorgfältig über die Frage nach und erstellen Sie eine schrittweise Gedankenkette, um eine logische und korrekte Antwort zu gewährleisten.
### Anweisung.
Sie sind ein medizinischer Experte mit fortgeschrittenen Kenntnissen in klinischer Argumentation, Diagnostik und Behandlungsplanung.
Bitte beantworten Sie die folgende medizinische Frage.
### Frage.
{Bitte beantworten Sie die folgende medizinische Frage.}
### Antwort.
<Denken
{}
 {}
{}"""

Eine Python-Funktion wurde geschrieben, um eine "Text"-Spalte im Datensatz zu erstellen. Der Inhalt der Spalte besteht aus einer Vorlage für Trainingsfragen mit Platzhaltern, die mit Fragen, Gedankenketten bzw. Antworten gefüllt sind.

EOS_TOKEN = tokenizer.eos_token # Muss EOS_TOKEN hinzufügen
def formatting_prompts_func(examples):
inputs = examples["Question"]
cots = examples["Complex_CoT"]
outputs = examples["Antwort"]
texts = []
for inputs, cots, outputs in zip(inputs, cots, outputs): text = train_prompt_tests
text = train_prompt_style.format(input, cot, output) + EOS_TOKEN
texts.append(text)
return {
"text": texts,
}

Die ersten 500 Beispiele des FreedomIntelligence/medical-o1-reasoning-SFT-Datensatzes wurden vom Hugging Face Hub geladen.

https://huggingface.co/datasets/FreedomIntelligence/medical-o1-reasoning-SFT?row=46

Anschließend wird über die formatierung_prompts_func bildet die Spalte "Text" des Datensatzes ab.

Wie Sie oben sehen können, wurde die Spalte "Text" erfolgreich mit den Systemhinweisen, Anweisungen, Gedankenketten und endgültigen Antworten integriert.

5. die Konfiguration des Modells

Das Modell wird mit der Low-Rank-Adapter-Technik konfiguriert, indem das Zielmodul eingestellt wird.

model = FastLanguageModel.get_peft_model(
model, r=16, r=16, r=16, r=16, r=16, r=16
r=16,
target_modules=[
"q_proj",
"k_proj",
"v_proj",
"o_proj",
"gate_proj", "up_proj", "up_proj
"up_proj", "down_proj", "up_proj", "down_proj
"down_proj".
],
lora_alpha=16,
lora_dropout=0,
bias="keine",
use_gradient_checkpointing="unsloth", # True oder "unsloth" für sehr langen Kontext
random_state=3407, use_rslora=False
random_state=3407, use_rslora=False,
loftq_config=None, )
)

Anschließend wurden die Trainingsparameter und der Trainer (Trainer) konfiguriert. Das Modell, der Tokenizer, der Datensatz und andere wichtige Trainingsparameter wurden dem Trainer zur Verfügung gestellt, um den Feinabstimmungsprozess des Modells zu optimieren.

von trl import SFTTrainer
von transformers importieren TrainingArguments
from unsloth import is_bfloat16_supported
trainer = SFTTrainer(
model=model,
tokeniser=tokenizer, train_dataset=dataset
train_dataset=dataset, dataset_text_field, dataset_text_field, dataset_text_field
dataset_text_field="text",
max_seq_length=max_seq_length,
dataset_num_proc=2,
args=TrainingArgumente(
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
# Verwenden Sie num_train_epochs = 1, warmup_ratio für vollständige Trainingsläufe!
aufwärmen_Schritte=5, max_Schritte=60, #
max_steps=60,
learning_rate=2e-4, fp16=nicht is_bp16, fp16=nicht is_bp16
fp16=nicht is_bfloat16_supported(),
bf16=ist_bfloat16_supported(), logging_steps=10,
logging_steps=10,
optim="adamw_8bit",
weight_decay=0.01,
lr_scheduler_type="linear",
seed=3407,
output_dir="outputs",
),
)

6. modellhafte Ausbildung

trainer_stats = trainer.train()

Das Modelltraining dauerte 22 Minuten. Der Trainingsverlust (Verlust) nimmt allmählich ab, was ein positives Zeichen dafür ist, dass sich die Leistung des Modells verbessert hat.

Der vollständige Bericht über die Modellbewertung kann auf der Website von Weights & Biases eingesehen werden.

7. die Bewertung der Argumentationsfähigkeit des feinabgestimmten Modells

Für die vergleichende Analyse wurden dem feinabgestimmten Modell erneut die gleichen Fragen gestellt wie vor der Feinabstimmung, um die Veränderung der Modellleistung zu beobachten.

question = "Eine 61-jährige Frau, die seit langem unwillkürlichen Urinverlust bei Aktivitäten wie Husten oder Niesen, aber keinen nächtlichen Harnverlust aufweist, wird gynäkologisch untersucht und einem Q-Tip-Test unterzogen. Was würde die Zystometrie auf der Grundlage dieser Befunde höchstwahrscheinlich über ihr Restvolumen und ihre Detrusorkontraktionen aussagen? Kontraktionen?"
FastLanguageModel.for_inference(model) # Unsloth hat 2x schnellere Inferenz!
inputs = tokeniser([prompt_style.format(question, "")], return_tensors="pt").to("cuda")
outputs = model.generate(
input_ids=inputs.input_ids,
attention_mask=inputs.attention_mask, max_new_tokens
max_new_tokens=1200,
use_cache=True,
)
response = tokeniser.batch_decode(outputs)
print(antwort[0].split("### Antwort:")[1])

Die Versuchsergebnisse zeigen, dass die Qualität des Outputs des feinabgestimmten Modells deutlich verbessert wurde und die Antworten genauer sind. Die Gedankenkette wurde prägnanter dargestellt und die endgültige Antwort war direkter und klarer in nur einem Absatz beantwortet, was auf den Erfolg dieser Modellfeinabstimmung hinweist.

8. lokale Speicherung von Modellen

Speichern Sie nun den Adapter, das vollständige Modell und den Tokeniser lokal für die Verwendung in anderen Projekten.

new_model_local = "DeepSeek-R1-Medical-COT"
model.save_pretrained(new_model_local)
tokeniser.save_pretrained(new_model_local)
model.save_pretrained_merged(new_model_local, tokenizer, save_method="merged_16bit")

9. das Modell wurde auf Hugging Face Hub hochgeladen

Adapter, Tokenisers und vollständige Modelle wurden ebenfalls in den Hugging Face Hub eingefügt, damit die KI-Gemeinschaft dieses fein abgestimmte Modell in vollem Umfang nutzen und problemlos in ihre Systeme integrieren kann.

new_model_online = "realyinchen/DeepSeek-R1-Medical-COT"
model.push_to_hub(new_model_online)
tokeniser.push_to_hub(neues_modell_online)
model.push_to_hub_merged(new_model_online, tokenizer, save_method="merged_16bit")

 

Zusammenfassungen

Der Bereich der künstlichen Intelligenz (KI) befindet sich in einem raschen Wandel. Der Aufstieg der Open-Source-Community stellt eine große Herausforderung für die KI-Landschaft dar, die in den letzten drei Jahren von proprietären Modellen dominiert wurde. Open Source Large Language Models (LLMs) werden immer schneller und effizienter, so dass es einfacher denn je ist, sie mit geringeren Rechen- und Speicherressourcen fein abzustimmen.

Dieses Papier gibt einen detaillierten Einblick in die DeepSeek R1 Inferenzmodells und beschreibt, wie dessen Lite-Version für die Anwendung in medizinischen Frage-Antwort-Szenarien feinabgestimmt werden kann. Das fein abgestimmte Inferenzmodell bietet nicht nur erhebliche Leistungsverbesserungen, sondern macht es auch praktisch für den Einsatz in Schlüsselbereichen wie Medizin, Notfalldienste und Gesundheitswesen.

Als Reaktion auf die Veröffentlichung von DeepSeek R1 hat OpenAI auch schnell zwei wichtige Tools eingeführt: ein fortschrittlicheres Inferenzmodell, o3, und das Betreiber Der KI-Agent, der auf einem neuen Computer Use Agent (CUA)-Modell basiert, zeigt, dass er in der Lage ist, auf Websites zu navigieren und komplexe Aufgaben selbstständig auszuführen.

Quellcode:
https://www.kaggle.com/code/realyinchen/deepseek-r1-medical-cot

Darf nicht ohne Genehmigung vervielfältigt werden:Chef-KI-Austauschkreis " Feinabstimmung des DeepSeek R1-Modells zur Ermöglichung präziser medizinischer Fragen und Antworten: Freisetzung des Potenzials von Open-Source-KI

Chef-KI-Austauschkreis

Der Chief AI Sharing Circle konzentriert sich auf das KI-Lernen und bietet umfassende KI-Lerninhalte, KI-Tools und praktische Anleitungen. Unser Ziel ist es, den Nutzern dabei zu helfen, die KI-Technologie zu beherrschen und gemeinsam das unbegrenzte Potenzial der KI durch hochwertige Inhalte und den Austausch praktischer Erfahrungen zu erkunden. Egal, ob Sie ein KI-Anfänger oder ein erfahrener Experte sind, dies ist der ideale Ort für Sie, um Wissen zu erwerben, Ihre Fähigkeiten zu verbessern und Innovationen zu verwirklichen.

Kontaktieren Sie uns
de_DE_formalDeutsch (Sie)