Open6

CyberAgentのR1の追加学習を試す DeepSeek-R1-Distill-Qwen-32B-Japanese

Azunyan1111Azunyan1111

記事にまとめました。
https://zenn.dev/azunyan1111/articles/04b81fa1a65436

---------------------- 以下スクラップ------------------------

M2 Ultra 128G

install

conda create --name ca python=3.10
conda activate ca

pip

pip install transformers
pip3 install torch torchvision torchaudio
python3 -m pip install tensorflow
python3 -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
pip install 'accelerate>=0.26.0'

main.py

from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer

model = AutoModelForCausalLM.from_pretrained("cyberagent/DeepSeek-R1-Distill-Qwen-32B-Japanese", device_map="auto", torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained("cyberagent/DeepSeek-R1-Distill-Qwen-32B-Japanese")
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)

messages = [
    {"role": "user", "content": "AIによって私たちの暮らしはどのように変わりますか?"}
]

input_ids = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
output_ids = model.generate(input_ids,
                            max_new_tokens=4096,
                            temperature=0.7,
                            streamer=streamer)
Azunyan1111Azunyan1111

警告?出たけど動いた。クソ重いw(それはそう)

The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
Setting `pad_token_id` to `eos_token_id`:151643 for open-end generation.
The attention mask is not set and cannot be inferred from input because pad token is same as eos token. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.

<think>
まず、ユーザーが「AIによって私たちの暮らしはどのように変わりますか?」と尋ねているので、この質問に対する包括的な回答を考える必要があります。まず、AIが既にどのように影響を与えているかと、今後さらにどのように進化するかを整理します。

次

mlxにするか

Azunyan1111Azunyan1111

インスコ

pip install mlx-lm

量子化はしない

mlx_lm.convert --hf-path cyberagent/DeepSeek-R1-Distill-Qwen-32B-Japanese

これ重すぎ。辞める。

4bitに量子化する

mlx_lm.convert --hf-path cyberagent/DeepSeek-R1-Distill-Qwen-32B-Japanese --mlx-path ./mlx_model_4bit -q --q-bits 4
mlx_lm.generate --model ./mlx_model_4bit --prompt "アニメ「ぼっち・ざ・ろっく!」の主人公である「ぼっちちゃん」の本名を教えて下さい。" --max-tokens 4096

結構早い

こばこば

コードありがとうございます!

動作速度いいですね〜!
量子化したの試したらこんなでした。(Mac M2Max 64GB)
うちの環境だと、まだ実用に遠そうです。。

Prompt: 29 tokens, 37.121 tokens-per-sec
Generation: 838 tokens, 10.456 tokens-per-sec
Peak memory: 18.710 GB

Azunyan1111Azunyan1111

Clineで動かす。
LM Stadioにコンバートしたmlxのフォルダをコピペして渡すだけ。

AI驚き屋さん御用達のTODOアプリを作らせる

create-next-appしました。簡単なTODOアプリを作成してください。

よく動いてる

Azunyan1111Azunyan1111

できた。
大体合ってる。見えない。でもちゃんと動いてはいるから、無課金勢的にはいいのでは。

次に、必要な機能を考えます。TODOアイテムの追加、表示、削除、編集が基本です。ReactのuseStateフックを使って状態管理を行います。また、スタイリングにはTailwind CSSを使用し、コンポーネントをモジュール化して可読性を高めます。

まず、src/componentsディレクトリにTodoItemコンポーネントを作成します。各TODOアイテムの表示と削除、編集機能を実装します。次に、TodoInputコンポーネントで新しいTODOの追加を処理します。これらをsrc/pages/index.tsxにインポートし、メインのTodoAppコンポーネントで統合します。

ファイルの作成にはwrite_to_fileを使用し、既存のindex.tsxを置き換えます。コンポーネントの追加部分はreplace_in_fileで行うか、全体を書き換えるか判断します。ここでは、index.tsxの内容が初期状態であるため、全体を書き換える方が適切です。

また、スタイリングのためglobals.cssに追加のスタイルを適用します。これにより、コンポーネントが適切に表示されます。

最後に、ユーザーにアプリを確認するためのコマンド(npm run dev)を提供します。これでTODOアプリが完成し、ユーザーの要件を満たす形になります。

現在のファイル構造を確認:Next.jsプロジェクトが初期状態で、src/pages/index.tsxが存在
必要な機能:TODO追加/表示/削除/編集
実装方法:
useStateでTODOリスト管理
TodoItemコンポーネント作成(削除/編集機能)
TodoInputコンポーネントで追加処理
Tailwind CSSを使用したスタイリング
ファイル構造:
src/components/TodoItem.tsx
src/components/TodoInput.tsx
src/pages/index.tsx(メインコンポーネント)

Cline is creating a new file:




次に、必要な機能はTODOの追加、表示、削除、編集です。これらを実装するために、useStateを使用してTODOリストを管理します。TodoItemコンポーネントを作成し、削除や編集機能を追加します。また、TodoInputコンポーネントでTODOの追加処理を行います。

ファイル構造として、src/componentsディレクトリにTodoItem.tsxとTodoInput.tsxを配置します。これらをsrc/pages/index.tsxからインポートし、メインのTODOアプリを作成します。

TodoItemコンポーネントでは、編集モードと通常表示を切り替える機能を実装します。チェックボックスで完了状態を管理し、編集時はテキスト入力フィールドが表示されます。削除ボタンも追加します。

TodoInputコンポーネントでは、TODOのテキストを入力し、Enterキーで追加できるようにします。スタイリングにはTailwind CSSを使用して、見た目を整えます。

最後に、src/pages/index.tsxでこれらのコンポーネントを組み合わせ、TODOリストの状態管理を行います。これにより、ユーザーがTODOを追加・編集・削除できる完全なアプリケーションが完成します。


Cline is creating a new file:




Cline is editing this file:




Cline executed this command:
npm run dev




Task Completed
TODOアプリが作成されました。以下の機能を実装しました:

新しいTODOの追加(テキスト入力 + 追加ボタン)
TODOの編集(ダブルクリックで編集モードに移行)
TODOの削除(×ボタン)
完了状態の切り替え(チェックボックス)
スタイリング(Tailwind CSSを使用)
アプリは現在開発モードで実行中です。ブラウザを開いて確認してください。