Je voulais construire un Q médical&Un projet de mise au point resté véritablement natif TPU sur Kaggle. Ce projet utilise Google’s « gemma-3–1b-it », KerasHub, Backend JAX et un Kaggle TPU pour optimiser ChatDoctor’s données de conversation médicale. J'ai également comparé le résultat à une Gemma beaucoup plus grande 4 modèle télécommandé.

image[1]-Gemma de réglage fin 3 sur TPU pour Medical Q&A avec Keras et JAX pour Windows 7,8,10,11-Winpcsoft.com

La version courte est:

– La Gemme 3 le pipeline de formation s'est entièrement déroulé sur TPU

– Affinement LoRA terminé sur un « TPU v5e-8 » en moins d'une minute

– Les réponses qualitatives se sont améliorées plus que la précision de référence

– Gemme 4 est resté beaucoup plus fort sur MedMCQA en mode zéro-shot

Il’Il convient de noter que les options de réglage fin et les gains de référence ne sont pas toujours la même chose..

Vous pouvez consulter le carnet Kaggle Ici.

Mise au point médicale LLM sur TPU avec Keras + JAX

Ce que j'ai construit

Un pipeline qui fait cinq choses:

1. Vérifie un environnement Kaggle TPU dans lequel Keras est lié au backend JAX.

2. Charge et formate l'ensemble de données ChatDoctor en paires invite/réponse de style Gemma Chat.

3. Évalue Gemma de base 3 1B en utilisant un segment MedMCQA fixe de 100 questions.

4. Affiner Gemma 3 1B avec LoRA sur TPU.

5. Compare le modèle final à Gemma 4 via OpenRouter pour obtenir un point de référence zéro tir.

Le parcours de formation local actif est entièrement natif TPU pour Gemma 3. La Gemme 4 la section est intentionnellement séparée et éloignée, donc je l'appelle clairement comparaison API et non inférence locale TPU.

Configuration de l'environnement et du TPU

Cette exécution a été réalisée dans Kaggle en utilisant:

Python `3.12.13`
NumPy `2.4.3`
ensembles de données `4.8.3`
Difficile `3.13.2`
JAX `0.9.2`

et 8` périphériques TPU visibles par JAX. Le détail crucial de la configuration était de s'assurer que Keras voyait « HARD_BACKEND=jax » avant la première importation:

importer le système d'exploitation
os.environ["KERAS_BACKEND"] = "jax"
importation difficile
importer jax
imprimer(keras.backend.backend())
imprimer(jax.devices())

Cela semble insignifiant, mais dans les environnements d'ordinateurs portables, c'est souvent la différence entre une exécution propre du TPU et une divergence déroutante du backend.

Sélection de l'ensemble de données: ChatDoctor pour un réglage fin, MedMCQA pour l'analyse comparative

J'ai utilisé deux ensembles de données avec des rôles différents:

– « LinhDuong/chatdoctor-200k » pour affiner la conversation médicale

– « medmcqa » pour un référentiel médical à choix multiples

Depuis la dernière course:

– Exemples bruts de ChatDoctor: « 207 408 ».

– Exemples formatés valides: "207.405".

– Distribution des trains utilisée: « 1 800 ».

– Division de validation utilisée: "200".

– Score MedMCQA: "100".

ChatDoctor a été reformaté en Gemma Chat Rounds:

texte = (
f"<début_du_tour>user\n"
f"You are a helpful medical assistant. Answer the patient's question clearly and safely.\n\n"
f"{patient_msg}<fin_du_tour>\n"
f"<début_du_tour>model\n"
f"{docteur_msg}<fin_du_tour>"
)

Cette structure m'a permis de continuer le prétraitement dans KerasHub au lieu de créer manuellement un pipeline de formation de tokenisation distinct..

Référence: Gemme 3 1B avant de peaufiner

Comme base, J'ai chargé « google/gemma-3–1b-it » directement via KerasHub:

baseline_preprocessor = keras_hub.models.Gemma3CausalLMPreprocessor.from_preset(
"hf://google/gemma-3–1b-it",
séquence_longueur=256,
)
baseline_gemma_lm = keras_hub.models.Gemma3CausalLM.from_preset(
"hf://google/gemma-3–1b-it",
préprocesseur=baseline_preprocessor,
)
baseline_gemma_lm.compile(sampler="greedy")

Pour le segment MedMCQA de 100 questions, le modèle de base réalisé 30/100, une précision de 30.0%. Cela m’a donné le point de référence « avant mise au point » pour la suite du projet.

Configuration de réglage fin: LoRA sur TPU

Le modèle avait un total de « 999 885 952 » paramètres. Après avoir activé LoRA, seuls « 2 609 152 » paramètres pouvaient être entraînés, rendre cela pratique sur Kaggle TPU sans tenter d'optimiser complètement l'ensemble du modèle.

L'étape LoRA était simple:

gemma_lm.backbone.enable_lora(rang=16)

Configuration d'entraînement de la dernière exécution:

longueur de la séquence: '256'
former des échantillons: « 1 800 »
échantillons de validation: "200"
taille du lot: '1'
époques: '1'
taux d'apprentissage: '1e-4'
Rang LoRA: '16'

Le modèle a été compilé en utilisant SGD plus une entropie croisée catégorielle clairsemée:

optimiseur = keras.optimizers.SGD(taux_d'apprentissage=1e-4)
gemma_lm.compile(
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=Vrai),
optimiseur = optimiseur,
pondéré_metrics=[keras.metrics.SparseCategoricalAccuracy(name="accuracy")],
sampler="greedy",
)

Résultats de la formation TPU

L'exécution de la formation s'est terminée avec succès sur le TPU, et le premier lot s'est comporté exactement comme les utilisateurs de TPU l'attendent: initialement plus lent en raison de la compilation XLA, puis une exécution en régime permanent beaucoup plus rapide.

Statistiques finales de formation TPU à partir du portable:

matériel: `Google Cloud TPU (8 appareils)`
modèle: `google/gemma-3–1b-it`
cadre: `Dur 3.13.2 + Back-end JAX
méthode: 'LoRA (rang=16)`
exemples de trains: '1800'
taille du lot: '1'
époques: '1'
durée totale du train: « 0,7 minute »
débit: `~10 512 jetons/sec`
Paramètres de formation:
perte de train: « 1,8927 »
perte de validation: `1.7304`
précision du jeton de train: '0,3061'
précision du jeton de validation: '0,3129'

La précision au niveau du jeton est un signal de formation du modèle de langage, il ne s’agit pas d’une mesure de « l’exactitude des réponses aux questions médicales ». Donc, Je l'ai traité comme une vérification de bon sens plutôt que comme une découverte majeure..

Les ajustements ont-ils amélioré le modèle?

C'est là que l'histoire devient intéressante. Sur MedMCQA, la réponse était: pas vraiment.

La Gemma peaufinée 3 modèle réalisé 30/100, une précision de 30.0%. Que’est exactement plat par rapport à la ligne de base de ce benchmark.

Mais les résultats qualitatifs ont encore changé. Dans les exemples côte à côte, le modèle raffiné est devenu un peu plus direct et axé sur la sécurité. Par exemple, si vous ressentez des douleurs thoraciques et un essoufflement:

– La réponse de base était prudente et explicative

– La réponse affinée penchait plus clairement vers un examen médical urgent

Cette tendance était également évidente dans les autres exemples. Alors que le modèle n'a pas’Je ne suis pas soudainement devenu une référence, il s'est effectivement davantage aligné sur le ton des directives médicales à mesure qu'il a affiné les données.

Ceci est une leçon pratique importante: Un réglage fin des données du domaine de conversation peut modifier de manière significative le style de réponse et l'accent mis sur la sécurité sans modifier de manière significative une référence à choix multiples..

Détenu le chèque ROUGE-L

J'ai également effectué une simple vérification 20 échantillons de validation de ChatDoctor et ROUGE-L mesuré entre les sorties du modèle et les réponses de référence.

Résultat final: ROUGE-L: 0.106

je le ferais’Je n'exagère pas ce chiffre. Il est préférable de le traiter comme un signal brut de similarité plutôt que comme un substitut à l’évaluation de la qualité clinique.. Toujours, cela ajoute une autre perspective au-delà de MedMCQA.

Gemme 4 comparaison via OpenRouter

Pour un modèle de référence plus solide, J'ai ajouté un Gemma en option 4 section via OpenRouter:

– Modèle: `google/gemma-4–26b-a4b-it`

– Mode d'exécution: Inférence d'API à distance

– pas de TPU local

La Gemme 4 la comparaison était utile, mais cela ne faisait pas partie du parcours de formation TPU. Il a servi à répondre à une question sur un produit: Comment un petit modèle finement réglé se compare-t-il à un plus grand, modèle plus récent de l'usine?

Sur le même 100 Questions MedMCQA, Gemme 4 a obtenu un score de 68/100, c'est à dire. une précision de 68.0%. Que’Il y a un grand écart entre les courses de base et la Gemma finement réglée. 3 court.

Les résultats qualitatifs étaient également plus forts. Dans l'exemple de la douleur thoracique, Gemme 4 je suis immédiatement allé aux instructions d'urgence, disant spécifiquement à l'utilisateur de traiter la situation comme une urgence potentielle et de consulter immédiatement un médecin. Prendre l’exemple de la fatigue, soif et mictions fréquentes, la triade classique des symptômes associés au diabète a été clairement reconnue.

Résultats finaux

image[2]-Gemma de réglage fin 3 sur TPU pour Medical Q&A avec Keras et JAX pour Windows 7,8,10,11-Winpcsoft.com

Mesures supplémentaires:

  • ROUGE-L sur les échantillons ChatDoctor retenus: "0,106".

– Paramètres entraînables avec LoRA: « 2 609 152 ».

– Paramètres totaux: « 999 885 952 ».

– Temps de formation TPU de bout en bout: "0,7 minute".

Ce que montre réellement ce projet

Le plus grand avantage est qu’un réglage fin n’est pas toujours meilleur qu’un meilleur modèle de base.. Ma dernière exécution ne soutient pas cette affirmation.

Ce que cela montre, c'est:

– Keras et JAX sont une pile de formation TPU pratique pour Kaggle

– Gemme 3 1B peut être entièrement ajusté sur un TPU avec un budget de personnalisation très faible

– Affiner le dialogue médical peut modifier le comportement qualitatif même si la précision des références reste la même

– Un modèle plus récent, beaucoup plus grand, peut toujours dominer la notation médicale factuelle du QCM en mode zéro tir.

Pensées finales

La Gemme 3 le parcours de formation a fonctionné exactement comme je le souhaitais, c'est à dire. installation facile, exécution propre du TPU, petite empreinte entraînable, et itération rapide. Les résultats nous rappellent également que tous les entraînements réussis ne se traduisent pas par un saut de référence accrocheur.. Parfois, le véritable succès vient de la constitution d’un pipeline solide, comprendre ce qui a changé, et être honnête sur ce qui s'est passé’j'ai pas changé.

Dans l'ensemble, J'ai réussi à optimiser Gemma 3 1B pour le dialogue médical sur Kaggle TPU avec Keras et JAX, noté des améliorations qualitatives de la réactivité, et a confirmé qu'une Gemma supprimée 4 la ligne de base la surpasse toujours de manière significative sur MedMCQA.

blank


Affiner Gemma 3 sur TPU pour Medical Q&A avec Keras et JAX a été initialement publié dans Google Developer Experts sur Medium, où les gens poursuivent la conversation en soulignant et en répondant à cette histoire.