Sauvegarde en GGUF

Sauvegarder des modèles en 16 bits pour GGUF afin de pouvoir les utiliser pour Ollama, Jan AI, Open WebUI et plus !

Pour enregistrer au format GGUF, utilisez ce qui suit pour enregistrer localement :

model.save_pretrained_gguf("directory", tokenizer, quantization_method = "q4_k_m")
model.save_pretrained_gguf("directory", tokenizer, quantization_method = "q8_0")
model.save_pretrained_gguf("directory", tokenizer, quantization_method = "f16")

Pour pousser vers le hub Hugging Face :

model.push_to_hub_gguf("hf_username/directory", tokenizer, quantization_method = "q4_k_m")
model.push_to_hub_gguf("hf_username/directory", tokenizer, quantization_method = "q8_0")

Toutes les options de quantification prises en charge pour quantization_method sont listées ci-dessous :

# https://github.com/ggerganov/llama.cpp/blob/master/examples/quantize/quantize.cpp#L19
# Depuis https://mlabonne.github.io/blog/posts/Quantize_Llama_2_models_using_ggml.html
ALLOWED_QUANTS = \
{
    "not_quantized"  : "Recommandé. Conversion rapide. Inférence lente, fichiers volumineux.",
    "fast_quantized" : "Recommandé. Conversion rapide. Inférence correcte, taille de fichier correcte.",
    "quantized"      : "Recommandé. Conversion lente. Inférence rapide, petits fichiers.",
    "f32"     : "Non recommandé. Conserve 100% de la précision, mais très lent et gourmand en mémoire.",
    "f16"     : "Conversion la plus rapide + conserve 100% de la précision. Lent et gourmand en mémoire.",
    "q8_0"    : "Conversion rapide. Forte utilisation des ressources, mais généralement acceptable.",
    "q4_k_m"  : "Recommandé. Utilise Q6_K pour la moitié des tenseurs attention.wv et feed_forward.w2, sinon Q4_K",
    "q5_k_m"  : "Recommandé. Utilise Q6_K pour la moitié des tenseurs attention.wv et feed_forward.w2, sinon Q5_K",
    "q2_k"    : "Utilise Q4_K pour les tenseurs attention.vw et feed_forward.w2, Q2_K pour les autres tenseurs.",
    "q3_k_l"  : "Utilise Q5_K pour les tenseurs attention.wv, attention.wo et feed_forward.w2, sinon Q3_K",
    "q3_k_m"  : "Utilise Q4_K pour les tenseurs attention.wv, attention.wo et feed_forward.w2, sinon Q3_K",
    "q3_k_s"  : "Utilise Q3_K pour tous les tenseurs",
    "q4_0"    : "Méthode de quantification originale, 4 bits.",
    "q4_1"    : "Précision supérieure à q4_0 mais pas aussi élevée que q5_0. Toutefois, inférence plus rapide que les modèles q5.",
    "q4_k_s"  : "Utilise Q4_K pour tous les tenseurs",
    "q4_k"    : "alias pour q4_k_m",
    "q5_k"    : "alias pour q5_k_m",
    "q5_0"    : "Précision plus élevée, utilisation des ressources plus importante et inférence plus lente.",
    "q5_1"    : "Précision encore plus élevée, utilisation des ressources et inférence plus lentes.",
    "q5_k_s"  : "Utilise Q5_K pour tous les tenseurs",
    "q6_k"    : "Utilise Q8_K pour tous les tenseurs",
    "iq2_xxs" : "Quantification 2.06 bpw",
    "iq2_xs"  : "Quantification 2.31 bpw",
    "iq3_xxs" : "Quantification 3.06 bpw",
    "q3_k_xs" : "Quantification 3 bits extra petite",
}

Exécuter dans Unsloth fonctionne bien, mais après exportation et exécution sur d'autres plates-formes, les résultats sont médiocres

Vous pouvez parfois rencontrer un problème où votre modèle s'exécute et produit de bons résultats sur Unsloth, mais lorsque vous l'utilisez sur une autre plate-forme comme Ollama ou vLLM, les résultats sont médiocres ou vous obtenez des charabias, des générations sans fin/infinies ou sorties répétées.

  • La cause la plus courante de cette erreur est l'utilisation d'un modèle de chat incorrect. Il est essentiel d'utiliser le MÊME modèle de chat qui a été utilisé lors de l'entraînement du modèle dans Unsloth et plus tard lorsque vous l'exécutez dans un autre framework, tel que llama.cpp ou Ollama. Lors de l'inférence à partir d'un modèle enregistré, il est crucial d'appliquer le bon modèle.

  • Vous devez utiliser le bon jeton eos. Si ce n'est pas le cas, vous pourriez obtenir du charabia sur des générations plus longues.

  • Cela peut aussi être dû au fait que votre moteur d'inférence ajoute un jeton « début de séquence » inutile (ou au contraire l'absence de celui-ci) ; assurez-vous donc de vérifier les deux hypothèses !

  • Utilisez nos notebooks conversationnels pour forcer le modèle de chat - cela résoudra la plupart des problèmes.

Enregistrer en GGUF / vLLM 16 bits plante

Vous pouvez essayer de réduire l'utilisation GPU maximale pendant l'enregistrement en modifiant maximum_memory_usage.

La valeur par défaut est model.save_pretrained(..., maximum_memory_usage = 0.75). Réduisez-la à par exemple 0.5 pour utiliser 50 % de la mémoire GPU de pointe ou moins. Cela peut réduire les plantages OOM pendant l'enregistrement.

Comment enregistrer manuellement au format GGUF ?

Enregistrez d'abord votre modèle en 16 bits via :

Compilez llama.cpp depuis la source comme ci-dessous :

Ensuite, enregistrez le modèle en F16 :

Mis à jour

Ce contenu vous a-t-il été utile ?