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

記事にまとめました。
---------------------- 以下スクラップ------------------------
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)

警告?出たけど動いた。クソ重い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にするか

インスコ
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

Clineで動かす。
LM Stadioにコンバートしたmlxのフォルダをコピペして渡すだけ。
AI驚き屋さん御用達のTODOアプリを作らせる
create-next-appしました。簡単なTODOアプリを作成してください。
よく動いてる

できた。
大体合ってる。見えない。でもちゃんと動いてはいるから、無課金勢的にはいいのでは。
次に、必要な機能を考えます。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を使用)
アプリは現在開発モードで実行中です。ブラウザを開いて確認してください。