2025年2月6日木曜日

Macbook Pro M4Max 128GB上のLM StudioでDeepSeek-R1 UD IQ1_Sを動かす

本ブログのテーマであるOracle APEXにまったく関係ありませんが、Macbook Pro M4Max 128GBという高価なノートを持っているので、LM StudioでDeepSeek-R1 UD IQ1_Sを動かしてみました。

先人による以下のブログ記事を参考にさせていただいています。

金のニワトリさん:1.58-bit版DeepSeek R1の日本語性能評価
https://zenn.dev/robustonian/articles/deepseek_r1-ud-iq1_s

npakaさん:DeepSeek R1 Dynamic 1.58-bit の概要
https://note.com/npaka/n/na1126a4e5fda

unsloth: Run DeepSeek R1Dynamic 1.58-bit

LM Studio 0.3.9 Build 5を使っています。

最初にDeekSeek-R1-GGUFのIQ1_Sをダウンロードします。親切にLikely too large for this macと教えてくれますが、構わずダウンロードします。


ダウンロードしたらモデルをロードします。UnsolthのブログのRunning on Mac / Apple devicesのセクションに"For a 128GB unified memory machine, you should be able to offload 59 layers or so."と書いてあるのですが、GPU Offloadの数値を上げるとMacがハングしたり、プロンプトを入力するだけでエラーになったりしたので、0にしています。Context Lengthも大きくするとメモリが足りなくなるので、4096にしました。

K Cache Quantization Typeにチェックを入れQ4_0を選択しています。

以上の設定でDeepSeek-R1 UD IQ1_Sをロードしています。


V Cache Quantization Typeを設定すると以下のようなエラーが発生するため、使用できませんでした。もちろんflash_attnはオンにした上でV Cache Quantization TypeにQ4_Oを設定しています。


LM Studioにモデルをロードすると、すごい勢いでメモリ使用量が増加します。メモリプレッシャーの表示が黄色になると、もともと遅いのにさらに遅くなります。LM Studio以外の実行中のアプリをすべて停止する必要がありました。画面収録のために、QuickTime Playerは動かしています。


以下のプロンプトを入力しました。

関数 f(x) = x^2 - 4x + 3 の最小値を求めよ。

以下は1秒で1枚のGIF動画です。


以下、回答です。

<think>
まず、問題を見てみましょう。関数f(x)=x²-4x+3の最小値を見つける必要があります。

最初に、これは二次関数で、グラフが上向きか下向きかを判断するために係数を確認しますね。x²の項の係数は1ですから正の数なので、放物線は上に向かって開きます。つまり頂点は最低点になり、最小値があることになります。

次に、その頂点を見つけることが必要ですね。一般的な二次関数y=ax²+bx+cにおいて、頂点の座標は(-b/(2a), f(-b/(2a)))で求められることを覚えていますか?この式ではaが1、bが-4なので、まず頂点のx座標を計算します。

つまり、x = -(-4)/(2*1) = 4/2=2。これが頂点のx座標です。次にf(2)の値を求めます:f(2)= (2)^2 -4*(2)+3 → 4-8+3 ⇒ (-4)+(+3)=-1。なので、この関数はx=2で最小値-1を取ると分かりますね。

でも確認として導関数を使っても良いかもしれません。微分するとf'(x)=2x−4。これを0に置くと解く:2x−4=0 ⇒ x=2。これも同じ結果ですね。そして、この時点の前後で符号が変わるかを確かめると、例えばx<2では導関数は負(例: f'(1)= -2)、x>2では正(f'(3)=+2)なので、x=2で極小値を持つことが分かる。

これに加えて頂点の座標を求めることで最小値を確定できる。二次関数が上向きであるため、その最低値が存在し、それが-1です。
</think>

ステップバイステップで解説します:

**Step 1: 確認する関数**
与えられた関数はf(x) = x² -4x +3。

**Step 2: 二次関数の形状を判断**
係数a=1(正)なので放物線は上に開き、最小値が存在。頂点が最低点となる。

**Step 3: 頂点の座標を見つける方法**
一般式y = ax² + bx + cの場合、
頂点x座標:
\[ x_v = -\frac{b}{2a} \]
この場合:
\[ x_v = -\frac{-4}{2×1} = \frac{4}{2}= 2\]

**Step 4: 最小値の計算**
f(x_v)= f(2)
\[ f(2) = (2)^2 -4×(2)+3=4-8+3=-1\]
よって、頂点は(2, -1)

**結論:この関数の最小値はx=2における-1**

補足として導関数による確認も可能:
f'(x)=2x−4。
f'(x)=0 ⇒ x=2。
符号変化からここで極小値を取るため、やはり同じ結果。

したがって**最小値=-1(x=2)にて達成される**

OpenAIのo1は数秒で回答しました。


Macbook Proは高価なノートではありますが、時間がかかっても手元のコンピュータで正解を返すモデルを実行できたのは結構な驚きです。また、DeepSeek-R1では、OpenAIのモデルでは表示されない推論の過程が表示されます。その内容にも驚かされます。

今回の記事は以上になります。