Unsloth résout le problème de l'inférence en double dans la version quantifiée de QwQ-32B
Récemment, l'équipe de Qwen a publié QwQ-32B modèle, un modèle d'inférence qui a été utilisé dans de nombreuses Critères de référence C'est un spectacle qui rivalise avec les Profondeur de l'eau-R1 Les performances du système sont excellentes. Cependant, de nombreux utilisateurs ont rencontré des problèmes de génération infinie, de doublons excessifs, de jetons et de réglage fin. Cet article vise à fournir un guide détaillé pour vous aider à déboguer et à résoudre ces problèmes, et à libérer tout le potentiel de QwQ-32B.
Débarbouillettes Le modèle mis en ligne par l'équipe corrige les bogues susmentionnés et permet une meilleure prise en charge des outils et des cadres tels que fine-tuning, vLLM et Transformers. Pour ceux qui utilisent llama.cpp et les autres utilisateurs qui utilisent llama.cpp comme moteur dorsal, veuillez vous référer à la section ce lien Obtenir des conseils pour résoudre le problème de la génération infinie.
Débloquer le modèle QwQ-32B (bug corrigé) :
- Modèle de format GGUF
- Modèles quantitatifs dynamiques à 4 bits
- BnB Modèle quantitatif à 4 bits
- Modèle de précision totale à 16 bits
Paramètres officiels recommandés
⚙️ Paramètres officiels recommandés
Sur la base des recommandations officielles de Qwen, voici les paramètres recommandés pour l'inférence du modèle :
- Température : 0,6
- Top_K : 40 (fourchette recommandée : 20-40)
- Min_P : 0.1 (facultatif mais fonctionne bien)
- Top_P : 0,95
- Pénalité de répétition : 1.0 (dans llama.cpp et les transformateurs, 1.0 signifie désactivé)
- Modèle de chat :
<|im_start|>user\nCreate a Flappy Bird game in Python.<|im_end|>\n<|im_start|>assistant\n<think>\n
llama.cpp Paramètres recommandés
👍 llama.cpp paramètres recommandés
L'équipe d'Unsloth a remarqué que de nombreux utilisateurs préfèrent utiliser une version supérieure à 1.0 de l'application Repetition Penalty
Cependant, cette approche interfère avec le mécanisme d'échantillonnage de llama.cpp. La pénalité pour les doublons était destinée à réduire le nombre de doublons générés, mais les expériences ont montré que cette approche n'avait pas l'effet escompté.
Cela dit, désactiver complètement la pénalité de répétition (fixée à 1.0) est également une option. Cependant, l'équipe d'Unsloth a constaté qu'une pénalité de répétition appropriée est toujours efficace pour supprimer la génération infinie.
Afin d'utiliser efficacement la pénalité de répétition, l'ordre des échantillonneurs dans llama.cpp doit être ajusté pour s'assurer que, lors de l'application de la pénalité de répétition, l'ordre des échantillonneurs dans llama.cpp soit respecté. Repetition Penalty
avant l'échantillonnage, sinon il en résultera une génération infinie. Pour ce faire, ajoutez le paramètre suivant :
--samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"
Par défaut, llama.cpp utilise l'ordre suivant des échantillonneurs :
--samplers "dry;top_k;typ_p;top_p;min_p;xtc;temperature"
L'ordre modifié par l'équipe Unsloth consiste essentiellement à intervertir les positions de la température et du sec, et à avancer le min_p. Cela signifie que l'échantillonneur sera appliqué dans l'ordre suivant :
top_k=40
top_p=0.95
min_p=0.1
temperature=0.6
dry
typ_p
xtc
Si le problème persiste, essayez de déplacer le --repeat-penalty
La valeur de 1,0 a été légèrement augmentée à 1,2 ou 1,3.
Merci à @krist486 de nous avoir alertés sur le problème de direction d'échantillonnage avec llama.cpp.
Pénalité pour répétition à sec
☀️ Pénalité pour récidive de sécheresse
L'équipe d'Unsloth a examiné les propositions de dry penalty
et nous avons essayé d'utiliser une valeur de 0,8. Cependant, les résultats expérimentaux ont montré quedry penalty
Il est plus susceptible de provoquer des erreurs de syntaxe, en particulier lors de la génération de code. Si l'utilisateur rencontre toujours des problèmes, essayez de définir le paramètre dry penalty
Augmenter à 0,8.
Si vous choisissez d'utiliser dry penalty
L'ordre d'échantillonnage ajusté peut être tout aussi utile.
Tutoriels Ollama sur le QwQ-32B
🦙 Ollama Tutoriel sur l'exécution du QwQ-32B
- S'il n'est pas déjà installé
ollama
Veuillez d'abord l'installer !
apt-get update
apt-get install pciutils -y
curl -fSSL [https://ollama.com/install.sh](https://www.google.com/url?sa=E&q=https%3A%2F%2Follama.com%2Finstall.sh) | sh
- Exécutez le modèle ! Si l'exécution échoue, essayez de l'exécuter dans un autre terminal
ollama serve
L'équipe d'Unsloth a inclus toutes les corrections et les paramètres suggérés (température, etc.) dans le modèle de téléchargement Hugging Face.param
Documentation !
ollama run hf.co/unsloth/QwQ-32B-GGUF:Q4_K_M
llama.cpp Tutoriel d'utilisation de QwQ-32B
📖 llama.cpp fonctionne Tutoriels QwQ-32B
- à travers (une brèche) llama.cpp Obtenir la dernière version
llama.cpp
. Vous pouvez vous référer aux instructions de construction suivantes pour construire. Si vous n'avez pas de GPU ou si vous voulez simplement faire de l'inférence CPU, définissez l'option-DGGML_CUDA=ON
Remplacer par-DGGML_CUDA=OFF
.
apt-get update
apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y
git clone [https://github.com/ggerganov/llama.cpp](https://www.google.com/url?sa=E&q=https%3A%2F%2Fgithub.com%2Fggerganov%2Fllama.cpp)
cmake llama.cpp -B llama.cpp/build
-DBUILD_SHARED_LIBS=ON -DGGML_CUDA=ON -DLLAMA_CURL=ON
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-quantize llama-cli llama-gguf-split
cp llama.cpp/build/bin/llama-* llama.cpp
- Télécharger le modèle (pendant l'installation)
pip install huggingface_hub hf_transfer
(après). Q4_K_M ou d'autres versions quantifiées (par exemple BF16 full precision) peuvent être sélectionnées. Pour d'autres versions, veuillez consulter : https://huggingface.co/unsloth/QwQ-32B-GGUF.
# !pip install huggingface_hub hf_transfer
import os
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="unsloth/QwQ-32B-GGUF",
local_dir="unsloth-QwQ-32B-GGUF",
allow_patterns=[" Q4_K_M "], # For Q4_K_M
)
- Exécutez le script de test Flappy Bird fourni par Unsloth et le résultat sera sauvegardé dans le fichier
Q4_K_M_yes_samplers.txt
Documentation. - Ajuster les paramètres en fonction de la situation réelle.
--threads 32
Définir le nombre de threads de l'unité centrale.--ctx-size 16384
Définir la longueur du contexte de la--n-gpu-layers 99
Définissez le nombre de niveaux de décharge du GPU. Si le GPU manque de mémoire, essayez d'ajuster le paramètre--n-gpu-layers
valeur. Supprimer ce paramètre si seule l'inférence CPU est utilisée. --repeat-penalty 1.1
répondre en chantant--dry-multiplier 0.5
sont les paramètres de la pénalité de répétition et de la pénalité de sécheresse, qui peuvent être ajustés par l'utilisateur en fonction des besoins.
./llama.cpp/llama-cli
--model unsloth-QwQ-32B-GGUF/QwQ-32B-Q4_K_M.gguf
--threads 32
--ctx-size 16384
--n-gpu-layers 99
--seed 3407
--prio 2
--temp 0.6
--repeat-penalty 1.1
--dry-multiplier 0.5
--min-p 0.1
--top-k 40
--top-p 0.95
-no-cnv
--samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"
--prompt "<|im_start|>user\nCreate a Flappy Bird game in Python. You must include these things:\n1. You must use pygame.\n2. The background color should be randomly chosen and is a light shade. Start with a light blue color.\n3. Pressing SPACE multiple times will accelerate the bird.\n4. The bird's shape should be randomly chosen as a square, circle or triangle. The color should be randomly chosen as a dark color.\n5. Place on the bottom some land colored as dark brown or yellow chosen randomly.\n6. Make a score shown on the top right side. Increment if you pass pipes and don't hit them.\n7. Make randomly spaced pipes with enough space. Color them randomly as dark green or light brown or a dark gray shade.\n8. When you lose, show the best score. Make the text inside the screen. Pressing q or Esc will quit the game. Restarting is pressing SPACE again.\nThe final game should be inside a markdown section in Python. Check your code for errors and fix them before the final markdown section.<|im_end|>\n<|im_start|>assistant\n <think> \n"
2>&1 | tee Q4_K_M_yes_samplers.txt
Les indices ci-dessus pour le jeu Flappy Bird sont tirés de Unsloth's DeepSeekR1-Dynamic 1.58bit Blogs. Le texte complet de l'indice se trouve ci-dessous :
<|im_start|>user
Create a Flappy Bird game in Python. You must include these things:
1. You must use pygame.
2. The background color should be randomly chosen and is a light shade. Start with a light blue color.
3. Pressing SPACE multiple times will accelerate the bird.
4. The bird's shape should be randomly chosen as a square, circle or triangle. The color should be randomly chosen as a dark color.
5. Place on the bottom some land colored as dark brown or yellow chosen randomly.
6. Make a score shown on the top right side. Increment if you pass pipes and don't hit them.
7. Make randomly spaced pipes with enough space. Color them randomly as dark green or light brown or a dark gray shade.
8. When you lose, show the best score. Make the text inside the screen. Pressing q or Esc will quit the game. Restarting is pressing SPACE again.
The final game should be inside a markdown section in Python. Check your code for errors and fix them before the final markdown section.<|im_end|>
<|im_start|>assistant
<think>
Voici le début et la fin du code Python généré par le modèle (sans le processus de réflexion) :
import pygame
import random
import sys
pygame.init()
### Continues
class Bird:
def __init__(self):
### Continues
def main():
best_score = 0
current_score = 0
game_over = False
pipes = []
first_time = True # Track first game play
# Initial setup
background_color = (173, 216, 230) # Light blue initially
land_color = random.choice(land_colors)
bird = Bird()
while True:
for event in pygame.event.get():
### Continues
if not game_over:
# Update bird and pipes
bird.update()
### Continues
# Drawing
### Continues
pygame.display.flip()
clock.tick(60)
if __name__ == "__main__":
main()
Le modèle a réussi à générer un jeu Flappy Bird qui fonctionne !

Ensuite, essayez de supprimer le paramètre --samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc" et exécutez la même commande sans la correction Unsloth. La sortie sera enregistrée dans le fichier Q4_K_M_no_samplers.txt.
./llama.cpp/llama-cli
--model unsloth-QwQ-32B-GGUF/QwQ-32B-Q4_K_M.gguf
--threads 32
--ctx-size 16384
--n-gpu-layers 99
--seed 3407
--prio 2
--temp 0.6
--repeat-penalty 1.1
--dry-multiplier 0.5
--min-p 0.1
--top-k 40
--top-p 0.95
-no-cnv
--prompt "<|im_start|>user\nCreate a Flappy Bird game in Python. You must include these things:\n1. You must use pygame.\n2. The background color should be randomly chosen and is a light shade. Start with a light blue color.\n3. Pressing SPACE multiple times will accelerate the bird.\n4. The bird's shape should be randomly chosen as a square, circle or triangle. The color should be randomly chosen as a dark color.\n5. Place on the bottom some land colored as dark brown or yellow chosen randomly.\n6. Make a score shown on the top right side. Increment if you pass pipes and don't hit them.\n7. Make randomly spaced pipes with enough space. Color them randomly as dark green or light brown or a dark gray shade.\n8. When you lose, show the best score. Make the text inside the screen. Pressing q or Esc will quit the game. Restarting is pressing SPACE again.\nThe final game should be inside a markdown section in Python. Check your code for errors and fix them before the final markdown section.<|im_end|>\n<|im_start|>assistant\n<think>\n"
2>&1 | tee Q4_K_M_no_samplers.txt
En l'absence de correctifs, le modèle génère des résultats comportant des boucles et un grand nombre d'erreurs de syntaxe Python, ainsi qu'une série d'autres problèmes. Par exemple, l'extrait de code suivant semble correct, mais il est en fait incorrect ! Ligne 39 pipes.clear() ### <<< NameError : name 'pipes' is not defined. Avez-vous oublié d'importer 'pipes' ? Avez-vous oublié d'importer 'pipes' ?
import pygame
import random
pygame.init()
# Constants
WIDTH, HEIGHT = 800, 600
GROUND_HEIGHT = 20
GRAVITY = 0.7
PIPE_SPEED = -3
BIRD_SIZE = 45
MIN_GAP = 130
MAX_GAP = 200
PIPE_COLORS = [(0, 96, 0), (205, 133, 63), (89, 97, 107)]
DARK_BROWN = (94, 72, 4)
YELLOW = (252, 228, 6)
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()
def random_light_color():
return (
random.randint(180, 230),
random.randint(190, 300),
random.randint(250, 255)
)
def reset_game():
global bird_x, bird_y
global pipes, score
global background_color, land_color
global bird_shape, bird_color
# Bird properties
bird_x = WIDTH * 0.3
bird_y = HEIGHT // 2
bird_vel = -5 # Initial upward thrust
pipes.clear() ### <<< NameError: name 'pipes' is not defined. Did you forget to import 'pipes'?
Si vous augmentez encore --repeat-penalty à 1.5, la situation empire, les erreurs de syntaxe devenant plus évidentes et le code ne fonctionnant pas du tout.
import pygame
from random import randint # For generating colors/shapes/positions randomly
pygame.init()
# Constants:
WIDTH, HEIGHT =456 ,702 #
BACKGROUND_COLOR_LIGHTS=['lightskyblue']
GAP_SIZE=189 #
BIRD_RADIUS=3.
PIPE_SPEED=- ( ) ?
class Game():
def __init__(self):
self.screen_size=( )
def reset_game_vars():
global current_scor e
# set to zero and other initial states.
# Main game loop:
while running :
for event in pygame.event.get() :
if quit ... etc
pygame.quit()
print("Code is simplified. Due time constraints, full working version requires further implementation.")
On pourrait penser que ce problème ne concerne que la version quantifiée de Q4_K_M... la version pleine précision de BF16 ne devrait pas poser de problème, n'est-ce pas ? Mais ce n'est pas le cas. Même avec le modèle BF16 pleine précision, si vous n'appliquez pas la correction -samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc" fournie par l'équipe d'Unsloth et que vous utilisez la pénalité de répétition, vous rencontrerez également un échec de génération.
Le jeton ne s'affiche pas ?
🤔 jeton Pas d'affichage ?
Des utilisateurs ont signalé que certains systèmes ne pouvaient pas restituer correctement le processus de réflexion en raison du jeton ajouté par défaut au modèle de discussion. Les utilisateurs doivent modifier manuellement le modèle Jinja pour y inclure :
{%- if tools %} {{- '<|im_start|>system\n' }} {%- if messages[0]['role'] == 'system' %} {{- messages[0]['content'] }} {%- else %} {{- '' }} {%- endif %} {{- "\n\n# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }} {%- for tool in tools %} {{- "\n" }} {{- tool | tojson }} {%- endfor %} {{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }} {%- else %} {%- if messages[0]['role'] == 'system' %} {{- '<|im_start|>system\n' + messages[0]['content'] + '<|im_end|>\n' }} {%- endif %} {%- endif %} {%- for message in messages %} {%- if (message.role == "user") or (message.role == "system" and not loop.first) %} {{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }} {%- elif message.role == "assistant" and not message.tool_calls %} {%- set content = message.content.split('</think>')[-1].lstrip('\n') %} {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }} {%- elif message.role == "assistant" %} {%- set content = message.content.split('</think>')[-1].lstrip('\n') %} {{- '<|im_start|>' + message.role }} {%- if message.content %} {{- '\n' + content }} {%- endif %} {%- for tool_call in message.tool_calls %} {%- if tool_call.function is defined %} {%- set tool_call = tool_call.function %} {%- endif %} {{- '\n<tool_call>\n{"name": "' }} {{- tool_call.name }} {{- '", "arguments": ' }} {{- tool_call.arguments | tojson }} {{- '}\n</tool_call>' }} {%- endfor %} {{- '<|im_end|>\n' }} {%- elif message.role == "tool" %} {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != "tool") %} {{- '<|im_start|>user' }} {%- endif %} {{- '\n<tool_response>\n' }} {{- message.content }} {{- '\n</tool_response>' }} {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %} {{- '<|im_end|>\n' }} {%- endif %} {%- endif %} {%- endfor %} {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n<think>\n' }} {%- endif %}
Modifié pour supprimer le \N final. L'équipe DeepSeek a également modifié tous les modèles pour qu'ils ajoutent des jetons par défaut afin de forcer le modèle à passer en mode inférence.
Par conséquent, remplacez {%- if add_generation_prompt %} {{- 'assistant\n' }} {%- endif %} par {%- if add_generation_prompt %} { {- 'assistant\n' }} {%- endif %}, c'est-à-dire supprimer \n.
Modèle complet de jinja avec la partie "\N" supprimée.
{%- if tools %} {{- '<|im_start|>system\n' }} {%- if messages[0]['role'] == 'system' %} {{- messages[0]['content'] }} {%- else %} {{- '' }} {%- endif %} {{- "\n\n# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }} {%- for tool in tools %} {{- "\n" }} {{- tool | tojson }} {%- endfor %} {{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }} {%- else %} {%- if messages[0]['role'] == 'system' %} {{- '<|im_start|>system\n' + messages[0]['content'] + '<|im_end|>\n' }} {%- endif %} {%- endif %} {%- for message in messages %} {%- if (message.role == "user") or (message.role == "system" and not loop.first) %} {{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }} {%- elif message.role == "assistant" and not message.tool_calls %} {%- set content = message.content.split('</think>')[-1].lstrip('\n') %} {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }} {%- elif message.role == "assistant" %} {%- set content = message.content.split('</think>')[-1].lstrip('\n') %} {{- '<|im_start|>' + message.role }} {%- if message.content %} {{- '\n' + content }} {%- endif %} {%- for tool_call in message.tool_calls %} {%- if tool_call.function is defined %} {%- set tool_call = tool_call.function %} {%- endif %} {{- '\n<tool_call>\n{"name": "' }} {{- tool_call.name }} {{- '", "arguments": ' }} {{- tool_call.arguments | tojson }} {{- '}\n</tool_call>' }} {%- endfor %} {{- '<|im_end|>\n' }} {%- elif message.role == "tool" %} {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != "tool") %} {{- '<|im_start|>user' }} {%- endif %} {{- '\n<tool_response>\n' }} {{- message.content }} {{- '\n</tool_response>' }} {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %} {{- '<|im_end|>\n' }} {%- endif %} {%- endif %} {%- endfor %} {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n' }} {%- endif %}
Notes complémentaires
Notes complémentaires
L'équipe d'Unsloth a d'abord supposé que le problème pouvait provenir de ce qui suit :
- La longueur du contexte de QwQ peut ne pas être la longueur native de 128K, mais 32K plus l'extension YaRN. Voir, par exemple, le fichier readme à l'adresse https://huggingface.co/Qwen/QwQ-32B :
{
...,
"rope_scaling": {
"factor": 4.0,
"original_max_position_embeddings": 32768,
"type": "yarn"
}
}
L'équipe d'Unsloth a essayé de réécrire la gestion de YaRN dans llama.cpp, mais le problème a persisté.
--override-kv qwen2.context_length=int:131072
--override-kv qwen2.rope.scaling.type=str:yarn
--override-kv qwen2.rope.scaling.factor=float:4
--override-kv qwen2.rope.scaling.original_context_length=int:32768
--override-kv qqwen2.rope.scaling.attn_factor=float:1.13862943649292 \
- L'équipe d'Unsloth a également soupçonné que la valeur RMS Layernorm epsilon pourrait être incorrecte, et devrait peut-être être de 1e-6 au lieu de 1e-5. Par exemple, la valeur RMS Layernorm epsilon devrait être de 1e-6 au lieu de 1e-5. Ce lien. en rms_norm_eps=1e-06 et Ce lien. en rms_norm_eps=1e-05. L'équipe d'Unsloth a également essayé de réécrire cette valeur, mais le problème n'est toujours pas résolu :
--override-kv qwen2.attention.layer_norm_rms_epsilon=float:0.000001 \
- Grâce à @kalomaze, l'équipe d'Unsloth a également testé les tokeniser IDs entre llama.cpp et Transformers pour voir s'ils correspondaient. Les résultats montrent qu'ils correspondent, donc la non-concordance des tokeniser IDs n'est pas la source du problème.
Voici les résultats de l'expérience de l'équipe d'Unsloth :
61KB file_BF16_no_samplers.txt
BF16 Précision totale, pas de réparation d'échantillon appliquée
55KB file_BF16_yes_samplers.txt
BF16 Précision totale, réparation par échantillonnage appliquée
71KB final_Q4_K_M_no_samplers.txt
Q4_K_M Précision, sans fixation de l'échantillon
65KB final_Q4_K_M_yes_samplers.txt
Q4_K_M Précision, fixation de l'échantillonnage appliquée
Correction des bugs du tokenizer
✏️ Correction d'un bogue dans le tokenizer
- L'équipe d'Unsloth a également trouvé quelques problèmes spécifiques affectant la mise au point. Le jeton EOS est correct, mais un choix plus logique pour le jeton PAD serait "". L'équipe d'Unsloth a mis à jour la configuration à https://huggingface.co/unsloth/QwQ-32B/blob/. L'équipe d'Unsloth a mis à jour la configuration dans main/tokenizer_config.json.
"eos_token": "<|im_end|>",
"pad_token": "<|endoftext|>",
Quantification dynamique sur 4 bits
🛠️ Quantification dynamique sur 4 bits
L'équipe d'Unsloth a également téléchargé un modèle de quantification dynamique à 4 bits, qui améliore considérablement la précision du modèle par rapport à la quantification simple à 4 bits ! La figure ci-dessous montre l'analyse d'erreur des valeurs d'activation et des poids du modèle QwQ pendant le processus de quantification :

L'équipe d'Unsloth a téléchargé le modèle quantitatif dynamique à 4 bits sur : https://huggingface.co/unsloth/QwQ-32B-unsloth-bnb-4bit.
depuis vLLM A partir de la version 0.7.3 (20 février 2024) https://github.com/vllm-project/vllm/releases/tag/v0.7.3, vLLM a commencé à prendre en charge le chargement des modèles quantitatifs 4 bits dynamiques Unsloth !
Tous les modèles au format GGUF sont disponibles sur https://huggingface.co/unsloth/QwQ-32B-GGUF !
© déclaration de droits d'auteur
L'article est protégé par le droit d'auteur et ne doit pas être reproduit sans autorisation.
Articles connexes
Pas de commentaires...