> For the complete documentation index, see [llms.txt](https://unsloth.ai/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://unsloth.ai/docs/jp/moderu/tutorials/qwq-32b-how-to-run-effectively.md).

# QwQ-32B: 効果的な実行方法

バグ修正を施し、無限生成なしでQwQ-32Bを効果的に実行する方法 + GGUF。

QwenがQwQ-32Bをリリースしました - 多くのベンチマークでDeepSeek-R1に匹敵する推論モデル [ベンチマーク](https://qwenlm.github.io/blog/qwq-32b/)。しかし、人々は **無限生成**, **多数の繰り返し**、\<think>トークンの問題やファインチューニングの問題が発生しています。このガイドが、ほとんどの問題のデバッグと修正に役立つことを願っています！

{% hint style="info" %}
私たちのバグ修正を含むモデルのアップロードは、ファインチューニング、vLLM、Transformersで非常にうまく動作します。llama.cppや、バックエンドとしてllama.cppを使用するエンジンを使っている場合は、私たちの [手順はこちら](#tutorial-how-to-run-qwq-32b) 無限生成を修正するための手順
{% endhint %}

**私たちのバグ修正を含むUnsloth QwQ-32Bのアップロード：**

| [GGUF](https://huggingface.co/unsloth/QwQ-32B-GGUF) | [動的4ビット](https://huggingface.co/unsloth/QwQ-32B-unsloth-bnb-4bit) | [BnB 4ビット](https://huggingface.co/unsloth/QwQ-32B-bnb-4bit) | [16ビット](https://huggingface.co/unsloth/QwQ-32B) |
| --------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------- |

## :gear: 公式推奨設定

によると [Qwen](https://huggingface.co/Qwen/QwQ-32B)、推論の推奨設定は以下のとおりです：

* 温度 0.6
* Top\_Kは40（または20〜40）
* Min\_Pは0.00（任意ですが、0.01でもうまく動きます。llama.cppのデフォルトは0.1です）
* Top\_P 0.95
* 繰り返しペナルティ 1.0。（1.0は llama.cpp と transformers では無効を意味します）
* チャットテンプレート: `<|im_start|>user\nPythonでFlappy Birdゲームを作成してください。次のものを含める必要があります：\n1. pygameを使用してください。\n2. 背景色はランダムに選ばれた明るい色にしてください。最初は水色にします。\n3. SPACEを何度も押すと鳥が加速します。\n4. 鳥の形は四角、円、または三角形のいずれかからランダムに選ばれる必要があります。色はランダムに暗い色から選ばれる必要があります。\n5. 下部に、ランダムに選ばれた濃い茶色または黄色の地面を配置してください。\n6. 右上にスコアを表示してください。パイプを通過して当たらなければ加算します。\n7. 十分な間隔で、ランダムな間隔のパイプを作成してください。色は濃い緑、薄い茶色、または暗い灰色のいずれかからランダムに選んでください。\n8. 負けたら、ベストスコアを表示してください。画面内にテキストを表示してください。qまたはEscを押すとゲームを終了します。再開はSPACEをもう一度押します。\n最終的なゲームは、PythonのMarkdownセクション内に入れる必要があります。最終のMarkdownセクションの前に、コードにエラーがないか確認し、修正してください。<|im_end|>\n<|im_start|>assistant\n<think>\n`

{% hint style="warning" %}
`llama.cpp` は `min_p = 0.1`デフォルトでは、問題を引き起こす可能性があります。0.0に強制してください。
{% endhint %}

## :thumbsup: llama.cppの推奨設定

多くの人が `リピートペナルティ` を1.0より大きく設定していることに気づきました。たとえば1.1から1.5です。これは実際にはllama.cppのサンプリング機構を妨げます。リピートペナルティの目的は繰り返し生成にペナルティを与えることですが、これは期待どおりに機能しないことが分かりました。

オフにする `リピートペナルティ` でも動作します（つまり1.0に設定することです）が、無限生成にペナルティを与えるのに有用だと分かりました。

これを使うには、llama.cppのサンプラーの順序も、適用する前に編集する必要があることが分かりました `リピートペナルティ`、さもないと無限生成になります。そこで、これを追加してください：

```bash
--samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"
```

デフォルトでは、llama.cppはこの順序を使用します：

```bash
--samplers "dry;top_k;typ_p;top_p;min_p;xtc;temperature"
```

基本的にはtemperatureとdryの順序を入れ替え、min\_pを前に移動しています。つまり、サンプラーをこの順序で適用します：

```bash
top_k=40
top_p=0.95
min_p=0.0
temperature=0.6
dry
typ_p
xtc
```

それでも問題が発生する場合は、次を増やすことができます`--repeat-penalty 1.0を1.2または1.3に上げる`

感謝： [@krist486](https://x.com/krist486/status/1897885598196654180) llama.cppのサンプリング順序について知らせてくれてありがとうございます。

## :sunny: ドライ・リピートペナルティ

私たちは次の使用法を調査しました `dryペナルティ` で提案されているように <https://github.com/ggml-org/llama.cpp/blob/master/examples/main/README.md> 0.8の値を使用しましたが、実際にはこれが **特にコーディングでは、むしろ構文の問題を引き起こす**。それでも問題が発生する場合は、次を増やしてください`dryペナルティを0.8に。`

入れ替えたサンプリング順序を使うことでも、次を使う場合に役立つことがあります `dryペナルティ`.

## :llama: チュートリアル：OllamaでQwQ-32Bを実行する方法

1. インストール `ollama` まだの場合は！

```bash
apt-get update
apt-get install pciutils -y
curl -fsSL https://ollama.com/install.sh | sh
```

2. モデルを実行しましょう！注意：次を呼び出せます `ollama serve`失敗した場合は別の端末で実行できます！私たちのすべての修正と推奨パラメータ（temperature、min\_pなど）は、 `param` として Hugging Face のアップロードに含めています！

```bash
ollama run hf.co/unsloth/QwQ-32B-GGUF:Q4_K_M
```

## 📖 チュートリアル：llama.cppでQwQ-32Bを実行する方法

1. 最新の `llama.cpp` を [GitHubこちら](https://github.com/ggml-org/llama.cpp)。以下のビルド手順に従うこともできます。変更してください `-DGGML_CUDA=ON` を `-DGGML_CUDA=OFF` GPUがない場合、またはCPU推論のみを使いたい場合は。 **Apple Mac / Metalデバイスの場合**、次を設定します `-DGGML_CUDA=OFF` その後は通常どおり続けてください。Metalサポートはデフォルトで有効です。

```bash
apt-get update
apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y
git clone https://github.com/ggml-org/llama.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
```

2. 以下をインストールした後、( `pip install huggingface_hub hf_transfer` ）。Q4\_K\_Mや他の量子化版（たとえばBF16の完全精度版）を選ぶことができます。詳細はこちら： <https://huggingface.co/unsloth/QwQ-32B-GGUF>

```python
# !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*"], # Q4_K_M用
)
```

3. UnslothのFlappy Birdテストを実行すると、出力が次に保存されます `Q4_K_M_yes_samplers.txt`
4. 編集 `--threads 32` CPUスレッド数は `--ctx-size 16384` コンテキスト長は `--n-gpu-layers 99` GPUオフロードする層数です。GPUがメモリ不足になったら調整してみてください。CPUのみで推論する場合は削除してください。
5. 私たちは次を使用します `--repeat-penalty 1.1` そして `--dry-multiplier 0.5` これは調整できます。

```bash
./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.01 \\
    --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\nPythonでFlappy Birdゲームを作成してください。次のものを含める必要があります：\n1. pygameを使用してください。\n2. 背景色はランダムに選ばれた明るい色にしてください。最初は水色にします。\n3. SPACEを何度も押すと鳥が加速します。\n4. 鳥の形は四角、円、または三角形のいずれかからランダムに選ばれる必要があります。色はランダムに暗い色から選ばれる必要があります。\n5. 下部に、ランダムに選ばれた濃い茶色または黄色の地面を配置してください。\n6. 右上にスコアを表示してください。パイプを通過して当たらなければ加算します。\n7. 十分な間隔で、ランダムな間隔のパイプを作成してください。色は濃い緑、薄い茶色、または暗い灰色のいずれかからランダムに選んでください。\n8. 負けたら、ベストスコアを表示してください。画面内にテキストを表示してください。qまたはEscを押すとゲームを終了します。再開はSPACEをもう一度押します。\n最終的なゲームは、PythonのMarkdownセクション内に入れる必要があります。最終のMarkdownセクションの前に、コードにエラーがないか確認し、修正してください。<|im_end|>\n<|im_start|>assistant\n<think>\n"  \
        2>&1 | tee Q4_K_M_yes_samplers.txt
```

こちらの完全な入力は <https://unsloth.ai/blog/deepseekr1-dynamic> 1.58bit ブログの内容は次のとおりです：

```
<|im_start|>user
PythonでFlappy Birdゲームを作成してください。以下の内容を必ず含めてください：
1. pygame を使う必要があります。
2. 背景色はランダムに選ばれる明るい色にしてください。最初は薄い青色から始めます。
3. SPACE を何度も押すと鳥が加速します。
4. 鳥の形は、四角、円、三角形のいずれかからランダムに選ばれるようにしてください。色は暗い色からランダムに選ばれるようにしてください。
5. 下部に、ランダムに選ばれた濃い茶色または黄色の地面を配置してください。
6. 右上にスコアを表示してください。パイプを通過して、ぶつからなければ加算します。
7. 十分な間隔を空けて、ランダムな位置にパイプを作成してください。色は濃い緑、薄茶色、または濃いグレーのどれかからランダムにしてください。
8. 負けたらベストスコアを表示してください。テキストは画面内に収めてください。q または Esc を押すとゲームを終了します。再開はもう一度 SPACE を押します。
最終的なゲームは、PythonのMarkdownセクション内に入れる必要があります。最終のMarkdownセクションの前に、コードにエラーがないか確認し、修正してください。<|im_end|>
<|im_start|>assistant
<think>
```

思考部分を除いた最終的なPython出力の冒頭と末尾：

```python
import pygame
import random
import sys

pygame.init()
### 続き

class Bird:
    def __init__(self):
        ### 続き

def main():
    best_score = 0
    current_score = 0
    game_over = False
    pipes = []
    first_time = True  # 最初のプレイを追跡

    # 初期設定
    background_color = (173, 216, 230)  # 最初は水色
    land_color = random.choice(land_colors)
    bird = Bird()

    while True:
        for event in pygame.event.get():
            ### 続き

        if not game_over:
            # 鳥とパイプを更新
            bird.update()
            ### 続き

        # 描画
        ### 続き
        pygame.display.flip()
        clock.tick(60)

if __name__ == "__main__":
    main()
```

<details>

<summary>完全な最終Python出力（思考部分を除去）：</summary>

{% code fullWidth="false" %}

```python
import pygame
import random
import sys

pygame.init()
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Flappy Bird Clone")
clock = pygame.time.Clock()

# 色
pipe_colors = [(0, 100, 0), (210, 180, 140), (50, 50, 50)]
land_colors = [(139, 69, 19), (255, 255, 0)]

# ゲーム定数
GRAVITY = 0.5
PIPE_SPEED = 5
BIRD_SIZE = 30
LAND_HEIGHT = 50
PIPE_WIDTH = 50
PIPE_GAP = 150

class Bird:
    def __init__(self):
        self.x = WIDTH // 2
        self.y = HEIGHT // 2
        self.velocity = 0
        self.shape = random.choice(['square', 'circle', 'triangle'])
        self.color = (random.randint(0, 100), random.randint(0, 100), random.randint(0, 100))
        self.rect = pygame.Rect(self.x - BIRD_SIZE//2, self.y - BIRD_SIZE//2, BIRD_SIZE, BIRD_SIZE)
    
    def update(self):
        self.velocity += GRAVITY
        self.y += self.velocity
        self.rect.y = self.y - BIRD_SIZE//2
        self.rect.x = self.x - BIRD_SIZE//2  # xを中央に維持
    
    def draw(self):
        if self.shape == 'square':
            pygame.draw.rect(screen, self.color, self.rect)
        elif self.shape == 'circle':
            pygame.draw.circle(screen, self.color, (self.rect.centerx, self.rect.centery), BIRD_SIZE//2)
        elif self.shape == 'triangle':
            points = [
                (self.rect.centerx, self.rect.top),
                (self.rect.left, self.rect.bottom),
                (self.rect.right, self.rect.bottom)
            ]
            pygame.draw.polygon(screen, self.color, points)

def spawn_pipe():
    pipe_x = WIDTH
    top_height = random.randint(50, HEIGHT - PIPE_GAP - LAND_HEIGHT)
    rect_top = pygame.Rect(pipe_x, 0, PIPE_WIDTH, top_height)
    bottom_y = top_height + PIPE_GAP
    bottom_height = (HEIGHT - LAND_HEIGHT) - bottom_y
    rect_bottom = pygame.Rect(pipe_x, bottom_y, PIPE_WIDTH, bottom_height)
    color = random.choice(pipe_colors)
    return {
        'rect_top': rect_top,
        'rect_bottom': rect_bottom,
        'color': color,
        'scored': False
    }

def main():
    best_score = 0
    current_score = 0
    game_over = False
    pipes = []
    first_time = True  # 最初のプレイを追跡

    # 初期設定
    background_color = (173, 216, 230)  # 最初は水色
    land_color = random.choice(land_colors)
    bird = Bird()

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE or event.key == pygame.K_q:
                    pygame.quit()
                    sys.exit()
                if event.key == pygame.K_SPACE:
                    if game_over:
                        # ゲームをリセット
                        bird = Bird()
                        pipes.clear()
                        current_score = 0
                        if first_time:
                            # 初回のゲームオーバー後の最初の再開
                            background_color = (random.randint(200, 255), random.randint(200, 255), random.randint(200, 255))
                            first_time = False
                        else:
                            background_color = (random.randint(200, 255), random.randint(200, 255), random.randint(200, 255))
                        land_color = random.choice(land_colors)
                        game_over = False
                    else:
                        # 鳥をジャンプさせる
                        bird.velocity = -15  # 初期上向き速度

        if not game_over:
            # 鳥とパイプを更新
            bird.update()

            # パイプを左に移動
            remove_pipes = []
            for pipe in pipes:
                pipe['rect_top'].x -= PIPE_SPEED
                pipe['rect_bottom'].x -= PIPE_SPEED
                # 鳥がパイプを通過したか確認
                if not pipe['scored'] and bird.rect.x > pipe['rect_top'].right:
                    current_score += 1
                    pipe['scored'] = True
                # パイプが画面外か確認
                if pipe['rect_top'].right < 0:
                    remove_pipes.append(pipe)
            # 画面外のパイプを削除
            for p in remove_pipes:
                pipes.remove(p)

            # 必要なら新しいパイプを生成
            if not pipes or pipes[-1]['rect_top'].x < WIDTH - 200:
                pipes.append(spawn_pipe())

            # 衝突を確認
            land_rect = pygame.Rect(0, HEIGHT - LAND_HEIGHT, WIDTH, LAND_HEIGHT)
            bird_rect = bird.rect
            # パイプを確認
            for pipe in pipes:
                if bird_rect.colliderect(pipe['rect_top']) or bird_rect.colliderect(pipe['rect_bottom']):
                    game_over = True
                    break
            # 地面と上端を確認
            if bird_rect.bottom >= land_rect.top or bird_rect.top <= 0:
                game_over = True

            if game_over:
                if current_score > best_score:
                    best_score = current_score

        # 描画
        screen.fill(background_color)
        # パイプを描画
        for pipe in pipes:
            pygame.draw.rect(screen, pipe['color'], pipe['rect_top'])
            pygame.draw.rect(screen, pipe['color'], pipe['rect_bottom'])
        # 地面を描画
        pygame.draw.rect(screen, land_color, (0, HEIGHT - LAND_HEIGHT, WIDTH, LAND_HEIGHT))
        # 鳥を描画
        bird.draw()
        # スコアを描画
        font = pygame.font.SysFont(None, 36)
        score_text = font.render(f'Score: {current_score}', True, (0, 0, 0))
        screen.blit(score_text, (WIDTH - 150, 10))
        # ゲームオーバー画面
        if game_over:
            over_text = font.render('Game Over!', True, (255, 0, 0))
            best_text = font.render(f'Best: {best_score}', True, (255, 0, 0))
            restart_text = font.render('Press SPACE to restart', True, (255, 0, 0))
            screen.blit(over_text, (WIDTH//2 - 70, HEIGHT//2 - 30))
            screen.blit(best_text, (WIDTH//2 - 50, HEIGHT//2 + 10))
            screen.blit(restart_text, (WIDTH//2 - 100, HEIGHT//2 + 50))
        
        pygame.display.flip()
        clock.tick(60)

if __name__ == "__main__":
    main()
```

{% endcode %}

</details>

6. 実行すると、動作するゲームになります！

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-1740ecd246c7f62c363bc0ba1e0f1099b2f9b2a4%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

7. 今度は、私たちの修正なしで同じことを試してください！そのため、次を削除します `--samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"` これにより出力が次に保存されます `Q4_K_M_no_samplers.txt`

```bash
./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.01 \\
    --top-k 40 \
    --top-p 0.95 \\
    -no-cnv \\
    --prompt "<|im_start|>user\nPythonでFlappy Birdゲームを作成してください。次のものを含める必要があります：\n1. pygameを使用してください。\n2. 背景色はランダムに選ばれた明るい色にしてください。最初は水色にします。\n3. SPACEを何度も押すと鳥が加速します。\n4. 鳥の形は四角、円、または三角形のいずれかからランダムに選ばれる必要があります。色はランダムに暗い色から選ばれる必要があります。\n5. 下部に、ランダムに選ばれた濃い茶色または黄色の地面を配置してください。\n6. 右上にスコアを表示してください。パイプを通過して当たらなければ加算します。\n7. 十分な間隔で、ランダムな間隔のパイプを作成してください。色は濃い緑、薄い茶色、または暗い灰色のいずれかからランダムに選んでください。\n8. 負けたら、ベストスコアを表示してください。画面内にテキストを表示してください。qまたはEscを押すとゲームを終了します。再開はSPACEをもう一度押します。\n最終的なゲームは、PythonのMarkdownセクション内に入れる必要があります。最終のMarkdownセクションの前に、コードにエラーがないか確認し、修正してください。<|im_end|>\n<|im_start|>assistant\n<think>\n"  \
        2>&1 | tee Q4_K_M_no_samplers.txt
```

いくつかのループは出ますが、 **問題のある不正確なPython構文** その他多くの問題があります。例えば、下のものは正しそうに見えますが、実際には間違っています！つまり39行目 `pipes.clear() ### <<< NameError: name 'pipes' is not defined. 'pipes' を import し忘れましたか？`

{% code overflow="wrap" lineNumbers="true" %}

```python
import pygame
import random

pygame.init()

# 定数
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_x = WIDTH * 0.3
    bird_y = HEIGHT // 2
    bird_vel = -5  # 初期上昇推力

    pipes.clear() ### <<< NameError: name 'pipes' is not defined. 'pipes' を import し忘れましたか？
```

{% endcode %}

8. もし使用するなら `--repeat-penalty 1.5`、さらに悪化してより明白になり、実際には完全に間違った構文になります。

```python
import pygame
from random import randint  # 色・形・位置をランダムに生成するため 
pygame.init()

# 定数：
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
   # 0に設定し、その他の初期状態にする。

# メインゲームループ：
while running :
     for event in pygame.event.get() : 
        quitなら...など

pygame.quit()
コードは簡略化されています。時間制約のため、完全に動作する版にはさらなる実装が必要です。
```

9. Q4\_K\_Mだからだと思うかもしれません。B16、つまりフル精度なら問題なく動くはずですよね？違います。私たちの修正である-を使わないと、出力は再び失敗します`-samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"` リピートペナルティを使用する場合。

## :sunrise\_over\_mountains: それでも動かない？Min\_p = 0.1、Temperature = 1.5 を試してください

Min\_pの論文によると <https://arxiv.org/pdf/2407.01082>、より創造的で多様な出力のために、まだ繰り返しが見られる場合はtop\_pとtop\_kを無効にしてみてください！

```bash
./llama.cpp/llama-cli --model unsloth-QwQ-32B-GGUF/QwQ-32B-Q4_K_M.gguf \
    --threads 32 --n-gpu-layers 99 \
    --ctx-size 16384 \\
    --temp 1.5 \
    --min-p 0.1 \
    --top-k 0 \
    --top-p 1.0 \\
    -no-cnv \\
    --prompt "<|im_start|>user\nPythonでFlappy Birdゲームを作成してください。次のものを含める必要があります：\n1. pygameを使用してください。\n2. 背景色はランダムに選ばれた明るい色にしてください。最初は水色にします。\n3. SPACEを何度も押すと鳥が加速します。\n4. 鳥の形は四角、円、または三角形のいずれかからランダムに選ばれる必要があります。色はランダムに暗い色から選ばれる必要があります。\n5. 下部に、ランダムに選ばれた濃い茶色または黄色の地面を配置してください。\n6. 右上にスコアを表示してください。パイプを通過して当たらなければ加算します。\n7. 十分な間隔で、ランダムな間隔のパイプを作成してください。色は濃い緑、薄い茶色、または暗い灰色のいずれかからランダムに選んでください。\n8. 負けたら、ベストスコアを表示してください。画面内にテキストを表示してください。qまたはEscを押すとゲームを終了します。再開はSPACEをもう一度押します。\n最終的なゲームは、PythonのMarkdownセクション内に入れる必要があります。最終のMarkdownセクションの前に、コードにエラーがないか確認し、修正してください。<|im_end|>\n<|im_start|>assistant\n<think>\n"
```

別の方法は、次を無効にすることです `min_p` 直接です。llama.cppはデフォルトで次を使用するため `min_p = 0.1`!

```bash
./llama.cpp/llama-cli --model unsloth-QwQ-32B-GGUF/QwQ-32B-Q4_K_M.gguf \
    --threads 32 --n-gpu-layers 99 \
    --ctx-size 16384 \\
    --temp 0.6 \
    --min-p 0.0 \\
    --top-k 40 \
    --top-p 0.95 \\
    -no-cnv \\
    --prompt "<|im_start|>user\nPythonでFlappy Birdゲームを作成してください。次のものを含める必要があります：\n1. pygameを使用してください。\n2. 背景色はランダムに選ばれた明るい色にしてください。最初は水色にします。\n3. SPACEを何度も押すと鳥が加速します。\n4. 鳥の形は四角、円、または三角形のいずれかからランダムに選ばれる必要があります。色はランダムに暗い色から選ばれる必要があります。\n5. 下部に、ランダムに選ばれた濃い茶色または黄色の地面を配置してください。\n6. 右上にスコアを表示してください。パイプを通過して当たらなければ加算します。\n7. 十分な間隔で、ランダムな間隔のパイプを作成してください。色は濃い緑、薄い茶色、または暗い灰色のいずれかからランダムに選んでください。\n8. 負けたら、ベストスコアを表示してください。画面内にテキストを表示してください。qまたはEscを押すとゲームを終了します。再開はSPACEをもう一度押します。\n最終的なゲームは、PythonのMarkdownセクション内に入れる必要があります。最終のMarkdownセクションの前に、コードにエラーがないか確認し、修正してください。<|im_end|>\n<|im_start|>assistant\n<think>\n"
```

## :thinking: \<think>トークンが表示されない？

一部の人々は、チャットテンプレートにデフォルトで\<think>が追加されるため、いくつかのシステムで思考トレースが正しく出力されないと報告しています。Jinjaテンプレートを次から手動で編集する必要があります：

{% code overflow="wrap" %}

```
```

{% endcode %}

別のものへ、次を削除して変更します `<think>\n` 末尾で。これでモデルは手動で次を追加しなければなりません `<think>\n` 推論時に追加することになり、常に成功するとは限りません。DeepSeekも、すべてのモデルにデフォルトで次を追加するよう編集しました `<think>` トークンを追加して、モデルを推論モードに入らせました。

したがって次のように変更します `{%- if add_generation_prompt %} {{- '<|im_start|>assistant\n<think>\n' }} {%- endif %}` を `{%- if add_generation_prompt %} {{- '<|im_start|>assistant\n' }} {%- endif %}`

つまり削除 `<think>\n`

<details>

<summary>&#x3C;think>\n部分を削除した完全なJinjaテンプレート</summary>

{% code overflow="wrap" %}

```
```

{% endcode %}

</details>

## 補足

最初は次のように考えました：

1. QwQのコンテキスト長はネイティブでは128Kではなく、YaRN拡張付きの32Kだと考えました。例えば、次のREADMEファイルでは <https://huggingface.co/Qwen/QwQ-32B>、次のように記載されています：

```json
{
  ...,
  "rope_scaling": {
    "factor": 4.0,
    "original_max_position_embeddings": 32768,
    "type": "yarn"
  }
}
```

llama.cppのYaRN処理を上書きしてみましたが、何も変わりませんでした。

{% code overflow="wrap" %}

```bash
--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 qwen2.rope.scaling.attn_factor=float:1.13862943649292 \
```

{% endcode %}

2. RMS LayerNormのepsilonが間違っているのではとも考えました。1e-5ではなく、1e-6かもしれないと。例えば [これ](https://huggingface.co/Qwen/Qwen2.5-32B-Instruct/blob/main/config.json) には `rms_norm_eps=1e-06`、一方で [これ](https://huggingface.co/Qwen/Qwen2.5-32B/blob/main/config.json) には `rms_norm_eps=1e-05` 。またそれも上書きしましたが、うまくいきませんでした：

{% code overflow="wrap" %}

```bash
--override-kv qwen2.attention.layer_norm_rms_epsilon=float:0.000001 \
```

{% endcode %}

3. また、llama.cpp と通常の Transformers の間でトークナイザー ID が一致するかどうかも、〜のおかげでテストしました [@kalomaze](https://x.com/kalomaze/status/1897875332230779138)。一致していたので、これが原因ではありませんでした。

以下に実験結果を示します：

{% file src="/files/b5fe28d29d17241bd7317be64e53b4c82609933c" %}
サンプリング修正なしの BF16 フル精度
{% endfile %}

{% file src="/files/8eba60e84ad1a91400590f67702d1daa4f9e497c" %}
サンプリング修正ありの BF16 フル精度
{% endfile %}

{% file src="/files/587cc726e17fa4a766173ec9cdb2b86c1f6365c7" %}
サンプリング修正なしの Q4\_K\_M 精度
{% endfile %}

{% file src="/files/c208423616543304561325cbbe42e7765cc071f0" %}
サンプリング修正ありの Q4\_K\_M 精度
{% endfile %}

## :pencil2: トークナイザのバグ修正

* ファインチューニングに特に影響する問題もいくつか見つかりました！EOS トークンは正しいですが、PAD トークンはおそらくむしろ次のものにすべきです `"<|vision_pad|>`" それを更新しました： <https://huggingface.co/unsloth/QwQ-32B/blob/main/tokenizer_config.json>

```
"eos_token": "<|im_end|>",
"pad_token": "<|endoftext|>",
```

## :tools: 動的4ビット量子化

また、単純な4ビット量子化より精度を向上させる動的4bit量子化もアップロードしました！活性化と重みの両方の量子化誤差について、QwQ の量子化誤差プロット分析を添付します：

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-16157f53eff143c179be571a43f8b55000d94290%2FQwQ%20quantization%20errors.png?alt=media" alt=""><figcaption></figcaption></figure>

動的4ビット量子化を次にアップロードしました： <https://huggingface.co/unsloth/QwQ-32B-unsloth-bnb-4bit>

vLLM 0.7.3（2025年2月20日）以降 <https://github.com/vllm-project/vllm/releases/tag/v0.7.3>、vLLM は Unsloth の動的4bit量子化の読み込みをサポートするようになりました！

すべての GGUF は次にあります <https://huggingface.co/unsloth/QwQ-32B-GGUF>!


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://unsloth.ai/docs/jp/moderu/tutorials/qwq-32b-how-to-run-effectively.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
