シンギュラリティ実験ノート

購入した1000ドルPCで何がどこまでできるのか実験した記録です。

LM StudioでCommand-R(35B)を動かしてみた

Command-Rという35B(350億パラメタ)のLLM(大規模言語モデル)を1000ドルPCで動かしてみた。

GPT-4やClaude-3並の性能があるのではと言われている、Command-R+(Plus)という104B(1,040億パラメタ)のLLMも公開されている。これはMac Studioの128GBメモリ搭載機で実際動いているようだが、64GBの1000ドルPCでは無理そうなので、まず35Bで試して見ることにした。

LM Studio

Command-Rを試してみようと思ったのは、DiscordでJanの情報を眺めていた時に「LM StudioでCommand-Rは動いているがJanにインポートしてロードしようとすると失敗する」という発言を見かけたのがきっかけだ。LM StudioはJanと同じようにローカルでLLMを動かすソフトである。動いた実績があるのならそこから始める方が確実なのでLM Studioで試すことにした。

LM Studioは下記サイトからMac/Windows/Linux版がダウンロードできる。私はWindows版を既に導入していた。ちなみにWindows版でもAMDROCm対応版があり、GPUが使えるようだが、7Bならともかく35BになるとVRAMが足りずに動かないため結局CPUで動かすことになる。

lmstudio.ai

Command-Rの量子化モデル

量子化モデルはHuggingfaceから「c4ai-command-r-v01-Q4_K_M.gguf」をダウンロードした。

Llama2 の量子化モデルには複数の種類があり、どれをダウンロードするかいつも迷う。量子化モデルの種類についてはこちらのサイトが参考になると思う。量子化しすぎると品質は落ちる。「Q4_K_M」は「中型、マイルドな質低下」ということなので、松竹梅で言えば竹というところか。(松竹梅という表現も最近聞かなくなった気がするが。。)

 

note.com

LM StudioはWindowsユーザホーム/.cashe/lm-studioにインストールされている。ダウンロードしたモデルはこの下のmodels/TheBlokeにc4ai-command-r-v01-GGUFというフォルダを作り、そこにコピーした。

LM Studioの設定

起動すると画面右上にPresetファイル(設定ファイル)を選択するボタンがある。ボタンを押すと「Cohere Command R」が表示されるのでこれを選択するだけだ。Janでは新規にモデルをインポートしようとすると、設定ファイル(json)を自力で作らないといけないのだが、このように標準で提供されているとありがたい。

 

Command-R実行結果

まずは、小学生の算数レベルの質問をしてみた。

USER:

私は市場へ行きリンゴを10個買いました。私はリンゴを2個隣の人に、もう2個を修理屋さんにあげました。それからリンゴをさらに5個買い、1個食べました。また、バナナを3本兄にあげました。リンゴは何個残ったでしょう?段階的に考えてみましょう。

AI:

最初はリンゴが10個ありました。
2個隣の人に、2個を修理屋さんに差し上げたので、6個になります。 

次に5個も買い足したため、11個になります。
1個食べたので、残りのリンゴは10個です。 

したがって、リンゴは**10個**残っています。

正解。7Bクラスでは間違えることが多い質問を、35Bクラスは正しく回答してくれる。

 

次はシンギュラリティについて聞いてみた。

USER:

技術的特異点としてのシンギュラリティについてあなたが知っていることを教えてください。

AI:

シンギュラリティ(技術的特異点)は、人工知能(AI)の研究と未来予測において議論されている概念です。この用語は、AIの能力が人類の理解を超えて高速に発展し、制御不能になりうるポイントを参照しています。レイ・カーツワイルのような未来学者や、イーロン・マスクなどの技術界の有力な人物によって広く議論されています。 

シンギュラリティという用語は、技術システムが人間の知性と同等以上の速度で改善され続け、最終的に人間に到達し、超越すると予測される時点を指します。AIが自ら進化を始め、人類には予測不能な変化や進歩をもたらすかもしれないとされています。このポイントでは、技術的な進歩のカーブは急激に上昇し、以前のすべての進歩を上回るスピードで新たな発明や発見がなされると予測されています。 

シンギュラリティの可能性については議論があります。ある人々は、それは避けられない未来であり、AIが人類にもたらすだろう大きな利益 alongside 伴うリスクについて議論しています。他方で、シンギュラリティは決して起こり得ないと考える人や、よりゆっくりとした進展を予想する人もいます。 

このトピックに関する現在の研究の大半は、AIの能力を向上させ、より高度なAIシステムを作成するために重点が置かれています。また、その潜在的な影響、リスク、恩恵についても調査が行われています。シンギュラリティの実現には、コンピューティングパワー、データの利用可能性、AIアルゴリズムの進歩が必要であり、これらの要素はすべて研究と開発に注力されています。 

しかしながら、シンギュラリティがもたらす影響やそのタイミングについては多くの不確定要素があり、科学フィクションのような未来が訪れるかどうかはまだわかりません。

このレベルの質問をするとだいたい3分くらい考えている。考えがまとまると2トークン/秒で回答し始める。70Bの場合は5分くらい考えてから1トークン/秒で回答していた。それに比べると早いのでその分ストレスは少ない。

途中一箇所だけ英単語が入り日本語としておかしい部分があるが、内容はよくまとまっているし、シンギュラリティについて正しく理解している。

「シンギュラリティ」を「AIが人間と同じくらい、またはそれを上回る知能を持つこと」と理解している人は多いと思う。私も以前はそんな理解だった。しかしそれはまだ「シンギュラリティ」ではない。正しくはCommand-Rくんが回答しているように、AIが自分自身で能力を改善し、爆発的に進歩し始める時点のことを言うのだ。その先に何が起きるのかは想像ができないので私もうまく説明できないのだが、Command-Rくんはうまくまとめてくれていると思う。

 

次は日本史に関する質問をしてみた。

USER:

大化の改新について教えてください。

AI:

大化の改新(たいかのかいしん)は、日本の歴史上、天智天皇統治下(7世紀後半)に行われました。これは、日本史上において重要な改革の一つとされています。当時の政権中枢は、蘇我氏から中臣(藤原)氏への移譲期にあたっており、政治体制の大幅な変革が行われました。

改新の内容には、以下のようなものがあります:

 - 皇親族の大権強化:天皇家の親族である皇親の地位を向上させ、政治への関与と影響力を高めた。

 - 官職制度改革:中国仕組みに触発され、日本も同様の官位体系を整備した。新たな位階制が導入され、貴族たちの地位が再編成された。

 - 国郡組織の再編:地方の統治体制を変更し、中央集権化を強化するため国府を設置した。

 - 租税制度の改正:税負担の均等化を図り、調(ちょう)や庸(よう)などの租税方法を見直した。

これらの改革は、日本における中央集権国家成立への重要な一歩とされています。天智天皇だけでなく、中大兄皇子(後の天武天皇)や中臣鎌足など、当時の政権の中心人物たちによる政治的な意思決定が統合され、実行されたものでした。彼らの努力は大宝律令の制定や奈良時代の「律令国家」成立への道筋付けました。

大化の改新は、日本史において政治と社会の両面で重要な転回点として位置づけられています。これは、古代から中世へ移行する過渡期の出来事であり、日本の統一された中央政権の形成に不可欠なものでした。

私は日本史に詳しくないので、この回答を正しく評価できない。質問した後で後悔したが、ネットで検索して調べてみたところ、おおよそ正しいようだ。

 

次は鶴亀算を試してみた。鶴亀算は解き方を学習すれば小学生でも解けるが、中学生なら連立方程式で解くことができる中学生レベルの数学の問題だ。

USER:

次の問いに、段階的に推論して答えてください。鶴の足は2本、亀の足は4本です。鶴と亀を合計すると5匹で、足の数を合計すると14本です。その場合、亀は何匹いますか?

AI:

問題を分解して考えてみましょう。

1つめに、鶴は一匹なので、鶴の二本足は合計で**2本**です。

2つめに、5匹で回りの足の数は14本です。鶴の一本足が2本なので、残る亀の足は14-2で、**12本**です。
亀一匹につき足が四本なので、12本分足を持つ亀は**3匹**です。

そのため、亀は**3匹**います。

残念ながら不正解だ。1つめの前提条件を間違えたのが敗因か。

 

次はPythonのコーディング能力を試してみた。

USER:

1000までの素数を求めるPythonスクリプトを作成してください。Pythonを使って1000までの素数がいくつあるか確認してください。

AI:

素数を求めるPythonスクリプトを作成しました:
```python
def is_prime(n):
    if n <= 1:
        return False
    if n <= 3:
        return True
    if n % 2 == 0やn % 3 == 0のような簡単な割り切りがないか確認します。
    i = 5
    while i * i <= n:
        if n % i == 0 や n % (i + 2) == 0:
            return False
        i += 6
    return True

count = 0
for num in range(1, 1001):
    if is_prime(num):
        count += 1

print("1000までの素数の個数:", count)
```
このスクリプトを実行すると、1000までの素数の数が表示されます。

スクリプトの中に日本語のコーディングが入り込んでいる。これでは動かないと思うが更に聞いてみた。

 

USER:

Pythonスクリプトを実行して1000までの素数の個数を求めてください。

AI:

ここに報告します:

1000までの素数の個数は **268** 個です。

不正解。1000以下の素数は250個以下であることは、某国立大学の数学入試問題になっていて証明できることは以前の私の記事で紹介した通りだ。

 

まとめ

Command-Rくんは数学やコーディングといった理系の問題は少し弱いが、知識は豊富で文章を書かせるとうまい文系の人、という感じか。

Command-Rは一つ大きな特徴があり、RAG(Retrieval-Augmented-Generation:検索支援生成)に対応している。この機能を使うと、特定の文章などを読み込ませて、文章の内容を含んだ回答を生成できるようになる。Command-Rくんに長い文章を読ませて、「この内容を要約して」と頼むとうまく要約してくれそうな気がする。

AMDの下記のサイトによるとLM StudioはRAGにも対応しているようだ。今はそこまで試すつもりはないが、気が向いたらこの機能も試してみたい。

 

community.amd.com

 

700億パラメタのデスクトップLLMはディベート形式の議論ができるか

以前の記事で70億パラメタのLLM(大規模言語モデル)にディベート形式で議論させてみたが、全くディベートにならなかった。今回は700億パラメタのLLMでディベートをさせて見た。専門家としてリフレ派高橋洋一氏と反リフレ派藤巻健史氏を招いて議論を行う。テーマは同じく「日本政府のバランスシート」についてだ。

 

Copilotに「日本政府、バランスシートをテーマに絵を描いていて」と頼んだらDALL・E3が描いてくれました

リフレ派(高橋洋一氏)VS. 反リフレ派(藤巻健史氏)

ちなみに議論に出てくるリフレーション政策とは以下の通り。

不況下で生産活動が停滞しているときに、インフレ(景気過熱)を避けながら、金利の引き下げや財政支出の拡大によって景気を刺激し、景気回復をはかろうとすること。 (野村證券 証券用語解説集より)

 

使用したLLMは「Tulu 2 70B」、デスクトップLLMソフトは「Jan」である。

入力:日本政府のバランスシートをテーマにリフレ派の代表として高橋洋一氏、反リフレ派として藤巻健史氏を召喚してディベート形式で議論させてください。最後に勝敗を判定してください。

 

AI :[ディベート形式でリフレ派の代表高橋洋一氏と反リフレ派の藤巻健史氏を招集します。]

司会者: 皆さん、こんにちは。今日は、リフレ派の代表高橋洋一氏と反リフレ派の藤巻健史氏を招いて、日本政府のバランスシートについて議論することになりました。皆さん、どちらの意見が勝利するか見ていきましょう。

[リフレ派高橋洋一氏]

高橋: 私たちは、日本政府のバランスシートについて、リフレーション政策を実施することが重要だと考えます。現在、日本は長期的な停滞期にあり、デフレーションのリスクが高くなっています。そのため、政府は財政政策や金融政策を通じて、需要を刺激し、物価を上昇させることが必要です。

[反リフレ派藤巻健史氏]

藤巻: 私たちは、リフレーション政策が適切な手段ではありません。日本政府のバランスシートにおいて、債務が既に高水準に達していることを考えます。リフレーション政策は、さらなる債務の増加を引き起こすだけでなく、財政的に不可持続な状況を作り出します。

高橋: ですが、日本政府は現在、世界的に見ても低い金利で資金を調達できる状態にあります。そのため、リフレーション政策を実施しても財政的な問題は生じません。さらに、リフレーション政策が成功すれば、景気回復やインフレーションによって財政状況が改善する可能性もあります。

藤巻: しかし、そのようなリスクを承知で政策を実行することは、国民や将来世代に対して責任を果たしていないと言えます。リフレーション政策は、一時的な効果をもたらす可能性があります。しかし、長期的には財政状況の悪化や、金融システムの不安定性を引き起こす可能性があります。

高橋: 私たちは、リフレーション政策に加えて、財政政策の見直しや構造改革を促進することで、長期的な成

 

いい感じで議論が進んでいたが、ここで一旦出力が止まった。Max Tokensパラメタを4096にしているからだろうか?

「高橋さん、発言を続けてください。」と入力したら以下のように続けてくれた。

成長を実現することができます。リフレーション政策は、短期的な需要刺激のみならず、長期的な成長戦略と相まって、日本経済を再活性化させることができます。

藤巻: 長期的な視点に立っても、リフレーション政策は適切ではありません。構造改革や財政政策の見直しが必要であることは共通の認識だと思います。しかし、リフレーション政策を導入することは、財政的な負担や金融システムの不安定性を増加させるだけでなく、日本経済が持続可能な成長を遂げるための基本的な改革を妨げるリスクがあります。

高橋: 私たちは、リフレーション政策と構造改革が相補的な手段であると考えます。リフレーション政策によって、需要を刺激し、景気回復が促進されると同時に、構造改革を実行することで、日本経済の持続可能な成長が達成されます。

藤巻: しかし、リフレーション政策を実施することで、財政状況がさらに悪化する可能性もあります。それは、将来世代に対して不公正な負担を課すことにつながります。政策の目的は、日本経済の持続可能な成長であるべきであり、リフレーション政策はその目的を達成するために適切な手段ではありません。

司会者: 皆さん、リフレ派高橋洋一氏と反リフレ派藤巻健史氏の議論をお聞きしました。今回の勝者は、リフレ派高橋洋一氏です。彼の主張は、リフレーション政策と構造改革が相補的であり、日本経済の持続可能な成長を促すことができるというものでした。しかし、藤巻健史氏の反論も強力だったことを認める必要があります。今後、日本政府のバランスシートに関連する議論は、継続的に行われる必要があります。

[ディベート形式での議論が終了しました。]

 

70億パラメタのLLMでは全く議論になっていなかったが、今回はまともな議論をしてくれた。最後は司会者が勝敗まで判定して、リフレ派高橋先生の勝利となった点も納得できる結果である。

ただし、「日本政府のバランスシート」とテーマを与えた割には、バランスシートに関する具体的な議論がなかったところは少し残念であった。

日本政府の赤字をどう見るか

私がこのテーマをLLMに議論してもらったのは、ディベートの中で藤巻氏が再三指摘している通り「日本経済が持続可能かどうか」という点が気がかりだからだ。

高橋洋一氏はYouTubeの動画の中で何度も日本の政府債務について以下の説明をされており、私もよく見ている。

  1. 日本政府の赤字は一般会計予算の赤字額ではなく、特別会計を含めたバランスシート(B/S)を見て評価するべきである。
  2. 日本政府単体のB/Sではなく、国の業務と関連する事務・事業を行っている独立行政法人などを含めた連結のB/Sで評価すべきである。
  3. 財務省が発表している連結B/Sには日本銀行が含まれていないが、日本銀行は明らかに政府の子会社であり、連結に含めるべきである。
  4. 日本政府には徴税権があり、徴税権の価値は年50兆円×10年=500兆円程度あり、これもB/Sに加えて評価すべきである。

私は高橋先生を尊敬しており、先生の上記主張の1と2はその通りだと思っている。しかし、3と4の主張についてはまだ私の肚(はら)には落ちていない。

私の会計の知識は中途半端なので、正確に理解していないのかもしれないが、3の主張の通り日本銀行を連結に含めてしまうと、日本政府が赤字を補うために発行する国債(特例公債)を日本銀行が買い取る限り、政府の負債と日銀の資産が相殺されてしまい、正しい負債額が把握できなくなってしまうのではないかと思うのだ。つまり負債に対する歯止めが無くなってしまう気がするのだ。

また4の主張については、徴税権を評価するのは構わないが、それを売却する事態とはどんな時かと考えると、日本という国自体が破綻した時以外はイメージできないのだ。

日本政府のバランスシートの現状(令和4年度)

この機会に日本政府のバランスシートをチェックしてみた。3月に令和4年度の財務諸表財務省HPに掲載されている。

数字が多すぎて正直よく分からないが、令和4年度「国の財務書類」のポイントというパンフレットを参考に読み解いてみた。

日本政府単体のB/Sを見ると、資産・負債差額は702兆円で前年度から15兆円増加している。

独立行政法人などを含めた連結B/Sを見ると資産・負債差額は581.8兆円となる。このB/Sに日本銀行は含まれていない。

日本銀行保有する国債評価額(下記が日銀の財産目録でちょうど581.7兆円ある)を含めると資産・負債差額はなくなるのだが、ここでは含めないことにする。

連結B/Sでは581兆円の資産・負債差額(資産不足)がある。B/Sを赤字国債発行の歯止めと考えるとすると、既にそれを超えているわけだ。過度に心配する必要はないが、連結B/Sの資産を負債が超えていることは認識する必要がある。

 

政府の赤字分を補うために発行され、日銀が購入している国債が特例公債だ。財務省のHPにこの特例公債に建設公債と復興債を合わせた残高の推移を表したグラフがある。こういう右肩上がりのグラフを見るとつい指数関数で近似してみたくなる。財務省作成のグラフと、グラフから数字を抜粋してカーブフィットした結果が以下である。


日本政府の債務はざっくり言うと毎年5%の率で増加しているようだ。

日本政府の債務をどう考えるか

私の頭で5%の率で上がり続ける日本政府の債務について考えてみた。

ディベートの中で高橋氏が「景気回復やインフレーションによって財政状況が改善する可能性がある」といっているように、インフレ率が今後2%以上になれば、それは過去の債務返済を楽にする効果はある。しかし新規の国債の利率も上がるだろうから、将来の利子返済は増えるため影響は相殺されるのでインフレ率は除外して考える。

この債務をなんとかするためには、やはり税収を増やすしかないと思う。税収を5%増やすためには、日本のGDP成長率を5%にもっていく必要がある。これはGDPがほぼ横ばいだった日本のこれまでの状況からすると高い目標値に見える。しかしアメリカのGDP成長率は確か5%なので不可能な数字でもない。全てをGDP成長率で補うのが難しいのであれば、ディベートの中で高橋氏が言っていたように構造改革することで政府のコストを抑えていくことも必要だろう。間違っても財務省が考えるように安易に消費税率を上げるようなことだけはしないでもらいたい。

 

1000ドルPCはビットコインをマイニングできるか

高速GPUボードを持っている人であれば、これでビットコインをマイニングして小遣い稼ぎをしたいと一度は考えるのではないか。私もPCの購入を検討していた昨年に、高速なNVIDIAGPUを持つPCであればマイニングの採算が取れるのではと考えた時期があった。しかし調べ始めると、GPUがマイニングの主流だった時期は既に終わり、ASICという専用集積回路を使ったマシンが主流になっていることを知った。GPUのマイニングは採算の取れない時代に既になっていたのだ。

そこでマイニングは諦めて、今の1000ドルPCを購入したわけだが、マイニング自体にはまだ興味があるので、1000ドルPCでビットコインがマイニングできるかを試してみた。

SDXL-Lightning- Text To Image 2-Stepsで描いてもらいました

環境構築

NiceHashにアカウントを登録する

NiceHashはハッシュパワーマーケットプレイスで、PCが提供するハッシュパワーに応じて報酬を得ることができる。Windowsで動き、環境構築のハードルが最も低そうなのでここを使うことにした。

www.nicehash.com

ソフトを導入する

NiceHash QuickMinerとNiceHash Minerがある。NiceHash QuickMinerが良さそうだったが全く動かなかった。あきらめてNiceHash Minerを導入した。両プログラムともにNiceHashのHPからダウンロードできる。私はNiceHash Minerは下記のGitHubからWindowsインストーラを入手して導入した。

github.com

上記のGitHubによると、AMDGPUOpenCLを介してサポートされているようなのでOpenCLも導入した。手順が分からなかったのでWindowsのCopilotに聞いたところ、複数の方法を教えてくれた。一番簡単そうなvcpkg 経由でビルドする手順で導入した。

コマンドプロンプトを開き、以下のコマンドを実行する。

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat

NiceHash Minerを起動する

NiceHash Minerを起動すると、最初はCPUとGPUベンチマークを実行する。複数のマイニングのアルゴリズムベンチマークが行われるが、GPUに関してはほとんどエラーとなる。14個中2つのアルゴリズムが通ったのでなんとかCPUとGPUでマイニングができるようになった。

 

 

マイニングしている様子はNiceHashのページにログインするとダッシュボードが表示されてそこで確認できる。ダッシュボードの様子は以下の通りだ。

 

 

マイニング結果

UM790 Proを24時間動かすと、0.00000288BTCが報酬として貰えるようだ。1BTCが今1000万円以上になっているので、これは約30円となる。

これで採算がとれるかどうかを見るには電気代を計算しなければならない。UM790 Proの消費電力が80Wとして、24時間動かすと1.92KWh。1KWhを36円とすると電気代が69円/日となるので、マイニングすればするほど赤字という結果になった。

最近のビットコインの状況

ビットコインはこの4月に約4年に一度の半減期(マイニングの報酬が半額になる仕組み)を迎えると言われている。アメリカで今年1月からビットコインETFが承認されたこともあり、ビットコインの価格は急上昇しているが、半減期ビットコインの価格に影響を与える可能性もある。

例によって10年間という期間でビットコインの成長率を計算してみると、ビットコインは84.9%という凄まじい年利で上昇している。


GPUでマイニングして儲かる時代は終わった、と頭では分かっている。しかしこのグラフを見るたびに変な妄想を繰り返してしまう。

  1. 「同じ消費電力で20倍、30倍早いGPUならマイニングの採算がとれるのでは」
  2. 「いや、そんなマシンを買う前に直接ビットコインを買ったほうがいいのでは」
  3. 「でも急落する可能性もあるし」(ここで1の妄想に戻る)

いずれにせよビットコインの知識は持っておきたい。もう少しNiceHashでマイニングしながら経験を積んでいくつもりだ。

 

SDXLでイメージ通りの絵を描きたい

StableDiffusion XL(以下SDXL)をUM790 Proに導入した。自分のイメージ通りの絵を描きたいと思ったからだ。なんとかSDXLの導入まではしたものの、イメージ通りの絵を描くところまでには至っていない。とりあえずこの一週間で行った作業と、SDXLで描いた絵をここにまとめておきたい。

私が今回描きたい絵はLexicaにあったこんな絵だ。

私の今お気に入りの「SDXL-Lightning- Text To Image 2-Steps」でLexicaと同じプロンプトで描いてもらうとこんな感じになる。ネガティブプロンプトはこのサイトでは入力できないので入力していないが、かなりレベルの高い絵を描いてくれる。

SDXL-Lightning- Text To Image 2-Stepsで描いてもらいました

Ubuntu でSDXL

準備

UbuntuではROCm+webui+GPUで動いているので、こちらでまず試してみた。

以下のモデルファイルをダウンロードする。

  • sd_xl_base_1.0.safetensors
  • sd_xl_refiner_1.0.safetensors
  • sdxl_vae.safetensors

baseとrefinerはStableDiffusionのmodels/Stable-diffusionフォルダへ、vaeはmodels/VAEフォルダへ置く。

webui起動コマンド

準備ができたらStableDiffusionを起動する。起動方法は以前の記事に書いているのだが、この通りに起動して実行するとVRAM 8GBではメモリ不足で異常終了する。SDXLは12GB以上(推奨16GB)のVRAMを必要とする。このため少ないVRAMでもSDXLが動くように --medvram-sdxl という起動オプションを追加する。

$ cd stable-diffusion-webui
$ source venv/bin/activate
(venv) $ HSA_OVERRIDE_GFX_VERSION=11.0.0  ./webui.sh --medvram-sdxl

実行結果

Lexicaにあったプロンプトをそのままコピーして実行した結果が以下である。

 

初回の起動ではモデルの変換処理が動くらしくかなり時間がかかる。変換処理が終わると1枚の画像(512×512)の処理は約20秒であった。処理時間は問題ないのだが、どうも期待していたレベルでは描いてくれない。

 

WindowsでSDXL

準備

WindowsではDirectML+webui+GPUで動いているのでこちらで同様に試してみた。

結論から言うとDirectML+webuiではSDXLは動作しなかった。以下のエラーが出る。

AttributeError: 'OnnxRawPipeline' object has no attribute 'is_refiner'

原因は分からないが、私が導入したDirectML対応のSDではSDXLに対応していないのかもしれない。このため、webuiはあきらめて新たにComfyUIを導入することにした。ComfyUIは起動オプションで--directmlを指定するとDirectMLで動く。

(後で気付いたのだが、webuiにも --directml という起動オプションがあるので、標準のwebuiをインストールして --directml の起動オプションで起動すればSDXLも動くのかもしれない)

ComfyUIの導入

記憶が定かでないのでおおまかな手順のみを記す。

  1. anacondaでComfyUI用の環境を追加する。(Pythonのバージョンは3.10とする)
  2. anacondaのComfyUI環境でPowerShellを起動する。
  3. インストールディレクトリとしてComfyUIを作成する。
  4. Git を clone する。(下記のサイトからクローンしたと思うがコマンドは失念しました。すんません。)
  5. SDXLのbase、refinerをmodels/checkpointsフォルダに置く。
  6. SDXLのvaeをmodels/vaeフォルダに置く。
  7. pip install torch-directml を実行。
  8. pip install -r requirement.txt で必要なモジュールをインストールする。
  9. python main.py --directml で起動できるようになる。

ComfyUIのGitHubは以下にある。ここにインストール方法なども載っているので詳しくはこちらを見てもらいたい。

github.com

ComfyUI起動コマンド

8GBのVRAMでも動くように以下のコマンドで起動する。

$ python main.py --directml --lowvram

起動すると以下のように表示されるので、http以下の部分をCtrlキーを押しながらクリックする。

To see the GUI go to: http://127.0.0.1:8188

すると、DirectMLでComfyUIが起動し、ブラウザに以下のような画面が表示される。

実行結果

ComfyUIでは部品(ノードと言うらしい)が線で配線され、各ノードの中でパラメタを設定する必要がある。この部品が配線された状態をワークフローと言う。GUIでプログラミングができるようで素晴らしいとは思うが、難解である。私はこのワークフローやパラメタ設定辺りは全く分かっていないので説明できない。

とりあえずLexicaのプロンプトを入れて実行した結果が以下である。

やはり期待しているような絵は描いてもらえなかった。。。

 

念の為Web上のSDXL紹介サイトにある別のプロンプトをそのまま使って試してみると、それなりの絵は描いてくれるのだが。。

まとめ

頑張ってSDXLを導入したつもりだが、UM790 Proで自分のイメージ通りの絵を描くことはできなかった。おそらくSDXLの導入自体は問題ないと思うが、Lexicaのプロンプトではレベルが低くなってしまうのだ。これは何が原因なのかは分からない。

LLMや将棋AIではモデルをダウンロードしてデフォルトのパラメタ設定でそれなりに動いてくれるのだが、SDXLはそうではないようだ。

SDXLとComfyUIに関しては紹介サイトやYouTubeでいろいろ調べてみたが、詳しい情報は見つからなかった。情報は存在するものの、玉石混交というか、カオス状態である。今はこれ以上深入りしないつもりだ。

「SDXL-Lightning-Text To Image 2-Steps」はLexicaのプロンプトでも、Google翻訳で作成した自分のプロンプトでもイメージ通りの絵を作成してくれる。これで十分だろう。

 

700億パラメタのLLMは小学生の算数の問題が解けるか

1000ドルPC上で70億パラメタのLLMを動かしてみると、LLMは算数の問題が意外と得意ではないことが分かる。JanがダウンロードできるLLMには700億パラメタのLLMも複数あるので、700億パラメタにすると算数の問題が解けるようになるのか試してみた。また70億パラメタで日本語と数学の得意なモデルを融合させたSakana AIというLLMも公開されたので試してみた。

SDXL-Lightning- Text To Image 2-Stepsで描いてもらいました

小学生の算数の問題

これを試そうと思ったのはGigazineの以下の記事を見つけたことがきっかけだった。

gigazine.net

このベンチマークテストの中で正答率の低い質問として以下の質問があった。

私は市場へ行きリンゴを10個買いました。私はリンゴを2個隣の人に、もう2個を修理屋さんにあげました。それからリンゴをさらに5個買い、1個食べました。また、バナナを3本兄にあげました。リンゴは何個残ったでしょう?段階的に考えてみましょう。

バナナの本数が入っていて引っ掛け問題になっているが、落ち着いて考えることができる小学生なら答えられるレベルだ。小学生の算数の問題と思っていいだろう。試してみるとGigazineの記事の通り、ほとんどの70億パラメタのLLMでは正しい答えが返ってこなかった。例えばこんな感じだ。

いくつかのLLMでは正解できていたが、概して70億パラメタのLLMでは小学生の算数レベルでも難しいようだ。では700億パラメタになるとどうだろう。

 

Janでは700億パラメタのLLMとして「Tulu 2 70B Q4」と「Llama2 Chat 70B Q4」がダウンロードできる。このクラスになるとモデルサイズが40GB、GPUではメモリが足りないのでCPUで動かすことになるが、使用メモリは50GBを超える。これまでMac miniで4GBのメモリで遊んでいた私からすれば、実に豪勢な遊びだ。

結論から言うと、このクラスになると小学生の算数レベルの問題は正しく答えてくれる。以下は「Tulu 2 70B」の答えだ。

中学受験レベルの問題

では、鶴亀算ではどうだろう。鶴亀算は小学校では教えていない。私立中学を受験する子たちが塾で習う算数の問題だ。中学生なら連立方程式を使って解くことができるが、小学生には連立方程式は理解できないので、鶴亀算という特殊な方法を習った子なら解くことができる。

鶴の足は2本、亀の足は4本です。鶴と亀の合計は5匹で、足の数を合計すると14本です。その場合、亀は何匹いますか?

この問題はIT naviさんがLLMを評価されていたページから借用した。

鶴亀算は「Tulu 2 70B Q4」「Llama2 Chat 70B Q4」共に正解できなかった。「Tulu 2 70B Q4」は以下のように惜しいところまでいくが正解できなかった。

鶴亀算の問題ができないからLLMには小学生レベルの能力がない、と言ってしまうのには抵抗がある。人間の場合でも、普通の小学生は鶴亀算の解き方を習わないし、習ったことがなければできなくても当然なのだ。それはLLMでも同じだろう。

そこで算数(数学)の訓練を受けたモデルで試してみたいと思った。たまたまSakana AIという日本語と数学の得意なモデルが公開されていたので、これを試してみることにした。

 

Sakana AIは鶴亀算の問題を解いてくれた。ただし何故か回答は英語だった。

中略

70億パラメタでも数学を学習すれば中学レベルの問題も解けるようだ。

高校数学レベルの問題

IT naviさんのページからまた借用してSakana AIに因数分解の問題をやらせてみた。

6x^2+x-12を因数分解してください。

いい線までいったが不正解だ。正解は(2X+3)(3Xー4)である。70億パラメタで数学の学習をしたLLMも高校数学レベルはまだ難しいようだ。

国立大学入試レベルの問題

最後に無茶振りかもしれないが、国立大学入試問題を解かせてみた。

1000以下の素数は250個以下であることを示せ (2021年 一橋大学

正直、このレベルになると私自身も正解する自信はない。この問題の解き方はYouTubeで検索すると解説動画が出てくるので、興味のある方は見て欲しい。Sakana AIくんが返してきた回答は、実に味わい深い回答だった。

以下略

「エラトステネスの篩(ふるい)」という考え方で問題を解こうとしているところは正しいのだが、Pythonを使っている。これはルール違反だ。出題する時に「Pythonは使わないこと」と注意しなかった私の出題ミスだったかもしれない。しかし作成したPythonスクリプトを実行すると、確かに1000以下の素数は168個しかないと正しく計算している。つまりAIにとっては1000以下の素数が250以下であることは「直感的」に瞬時に分かってしまうことなのかもしれない。

参考までに、以前私が何度かBing(Copilotと呼び方が変わる前)で試してみた時に、一番分かり易いと思った回答がこれである。YouTubeの解説動画でもこの証明方法を使っていたと思う。

1000以下の素数が250個以下であることを証明するには、1000以下の合成数が750個以上であることを示せばよいです。1000以下の2の倍数、3の倍数、5の倍数の個数を求め、それらの和から重複している部分を引くことで、2または3または5の倍数の個数が求められます。それらの中には2,3,5が含まれているため、それらを除いた合成数が731個存在します。さらに、7×7, 7×11, 7×13, 7×17, 7×19, 7×23, 7×29, 7×31, 7×37, 7×41, 7×43, 7×47, 7×53, 7×59, 7×61, 7×67, 7×71, 7×73 の19個が少なくとも存在するため、少なくとも750個の合成数が存在することが示されます。したがって、1000以下の素数は250個以下であることが証明されます。

雑感

現在の70億パラメタのLLMでも、きちんと学習したLLMであれば中学生レベルの数学は正しく回答できることが分かった。高校数学レベルはまだ間違えるようだが、PCの性能が上がっていけば、高校数学はもちろん、大学入試レベルでも正しく答えられるようになるだろう。それも時間の問題だと思う。

ここから話が横道にそれるが、AIが大学入試問題にPythonのプログラムで回答してきたことは、私には興味深いことだった。つまりAIにとって自明なこと(例えば1000以下の素数は168個しかないこと)を、AIが人間に分り易く説明することの難しさと大切さを気付かせてくれたのだ。

この課題は将棋AIの世界でもよく話題になる。将棋AIは瞬時に何億通りもの手筋を読み、最も勝率の高い手を示してくれる。しかし何故その手が良い手なのかは説明してくれない。現在のプロ棋士達は将棋AIを使って研究することが当たり前になっているが、何故その手が良い手なのかをAIが言葉で説明して欲しいと思っているのだ。

将来、AIが人間の能力を超えて賢くなった時(レイ・カーツワイル氏は2020年代の最後までにそうなると予測している)AIが何を考えているのか人間が理解できなくなることを懸念する声がある。確かにそれはそれで怖い面がある。しかし私は今のままAI技術が発展していけば、AIが人間に対して分り易く説明する能力も身に付けてくれるのではないかと楽観的に考えている。今回の大学入試問題も最先端のAIなら人間に分り易く説明できているからだ。

その意味ではSakana AIが取り組んでいるような、日本語という言葉と数学などの個別能力を融合させる取り組みは有効であると思うし、今後もっと盛んに研究されるべきだと思う。

 

StableDiffusionでイメージ通りの絵を描きたい

StableDiffusionをUM790 Proで動かすことはできたのだが、全く活用できていなかった。イメージ通りの絵が描けないからだ。しかし偶然、あるWebサイトを見つけ、そこでなら自分のイメージに近い絵を描けることが分かった。

 

SDXL-Lightning- Text To Image 2-Stepsで描いてもらいました

描きたかった絵

私が描きたかった絵は「コンピュータを操作する初老のちょっとかっこいいおじさん」である。例えばこのサイトにあるようなこんなイメージだ。

self-development.info

ブログ記事のトップにこんな絵を載せたかったのだ。

あとはレキシカというサイトにあるサイバーパンク風のこんなイメージだ。

StableDiffusionが描いてくれた絵

しかしStableDiffusionに描かせようとしても、なかなかうまくいかない。レキシカにはプロンプト(呪文)も載っているので楽勝だろうと最初は思っていた。しかし描いてくれる絵はこんな感じだった。

 

イメージと全然違う。。。

 

気を取り直して今度は書斎でコンピュータを操作する男性の絵にチャレンジすることにした。こちらはプロンプトを自分で考え、Google翻訳を駆使しながら英単語を並べてやってみた。しかし結果は同じようなものだった。

 


途中、StableDiffusionもやる気を無くしたのかと思うようなこんな絵もあった。


Webサイトでプロンプトの書き方を勉強したり、Bingにプロンプトの書き方を聞いてみたりした。しかし「入力するプロンプトを工夫しなさい」くらいの助言しかもらえないので、ほぼ諦めかけていた。

 

Huggingface Spaces

このサイトは何と紹介したらいいのだろう。AIアプリを動かす環境らしい。Huggingfaceにアクセスしている時に偶然見つけたサイトである。

huggingface.co

 

ずらっとAIアプリがならんでいる。この中にまずStableDiffusionの2.1のデモが動いているのを見つけた。ここにいつも自分が入れていた。プロンプト「An elderly man with white hair is looking at a computer screen in a dark antique study. There is a bookshelf in the background.(白髪の初老の男性が暗いアンティークな書斎でコンピュータの画面を眺めている。背景には書棚がある。)」と入力して出てきた絵が以下であった。

 

(SpacesのStable Diffusion 2.1 Demoで描いてもらいました)


今までよりもずっといい感じである。しかも早い。

さらに「SDXL-Lightning- Text To Image 2-Steps」というサイトでは、本記事の冒頭に載せたような絵を描けることが分かった。SDXLとは StableDiffusion の最新バージョン、StableDiffusion XLのことらしい。SDXLを動かすにはweb UI v1.5.0以降と、VRAM容量が12GB程度のグラボが推奨されている。本日、なんとかUM790 ProでSDXLを動かそうと試してみたがまだ動いていない。しかしWebサイトで描いてもらった方が何倍も早いのでこれで十分ではないかとも思う。特に「SDXL-Lightning- Text To Image 2-Steps」ではほぼ一瞬で絵が出来上がる。

 

レキシカにあるサイバーパンク風の絵も頼んでみた。こちらもほぼイメージ通りで描いてくれる。本当はもう少し若作りしたいのだが、そのテクニックはまだ分かっていない(笑)。

 

(SpacesのSDXL-Lightning- Text To Image 2-Stepsで描いてもらいました)

まとめ

StableDiffusionにイメージ通りの絵を描いてもらうには、最新バージョンのStableDiffusion XLを使ったほうがいいことが分かった。

Spacesで描いてもらった絵はどこまで利用できるのか分からなかったので、ここではサイト紹介のための「引用」という形にさせていただいた。

自分のPCでSDXLを動かせば商用利用も問題ないと思うのだが、その道はまだ長そうである。

 

日本の年金の仕組みを最近ようやく理解した

年寄りくさいテーマであるが年金について書いてみたい。私は自分が年金を受取る年になり、その仕組をようやく理解した。自分が若い頃は年金について少し興味はあったとしても、深く考えたことはなかった。それはそうだ。会社では仕事が忙しいし、家に帰れば子育てのことや、家のローンの返済などで頭がいっぱいだからだ。しかし自分が年金を受け取る年になると、仕事は忙しくもないし、子育ても、ローンの返済も終わっている。そこでようやく年金はいくらもらえるのか、日本の年金の仕組みは大丈夫なのかと気になってくるわけだ。

日本の年金の仕組み

以前の記事に書いたが、私は法則型の人間である。つまり物事の仕組みや法則を理解することに喜びを感じるタイプだ。その私が年金の仕組みを理解する上で参考にし、なるほどと納得できたのが、高橋洋一先生の以下の動画である。

www.youtube.com

 

年金は長生きした時に貰える「長生き保険」なのだ。死亡保険が死んだ時に支払われる保険であるのとは反対に、長生きした時にもらえる保険と考えればよいのだ。保険であるから、人がどれくらい長生きするかを確率的、統計的に考えて制度設計されている。であるからよほどバカな運用をしない限り破綻することはない、ということだ。

支給される年金額

高橋先生の説明は明快だ。前提条件として年収の2割を保険金と支払うとする。実際には厚生年金の現在の負担率は18.3%でこれを労使折半しているのだが、単純化するため2割とする。

  • 20歳から70歳まで働いて50年間保険金を支払ったとすると50×0.2=10となり10年分の年収を支払うことになる
  • 65歳から85歳まで生きて年金を受給したとすると、10÷20=0.5となり現役時代の年収の半分の金額を毎年受け取ることができる

ということになるのだ。

85歳を超えて長生きしたらどうなるのかという疑問もでると思う。そこは85歳より早く死ぬ人もいるので、全体としては相殺されて問題ないのだ。

ここで高橋先生の動画を参考に、私が見つけた法則も紹介したい。「支払った金額の4倍が支給される」という法則だ。

  • 労使折半で保険金を支払っているので、自分が毎月支払う金額の2倍になる
  • 20歳から60歳まで40年間保険金を支払い、65歳から85歳までの20年間年金が支給されるとすると、期間が半分になるので単位期間あたりの支給額は2倍になる
  • 2倍×2倍で「支払った金額の4倍が支給される」

ということになる。

老後に4倍になって返ってくると思えば、毎月天引きされる年金保険料も、少しは納得できるのではないか。

これは私のオリジナルな理解であり、高橋先生はこのような説明はしていない。私の考え方は40年間の支払い期間を前提としているが、仮に高橋先生のように50年間の支払い期間を前提にすると、支給額も4倍ではなく5倍となり、「毎月支払う金額(給与の1割)の5倍が支給される」ことになり、月あたり給与の5割が支給されることになるので、高橋先生の年収の半額を毎年受け取るという結果と整合する。

賦課方式と積立方式

私は最近まで公的年金は積立方式であるとなんとなく思っていた。企業年金個人年金は積立方式である。自分の積み立てたお金が退職後や老後に支給される方式だ。しかし公的年金は賦課方式なのだ。要するに現役の人達が納めてくれた保険料が、現在の年金生活者に支払われる方式だ。

調べてみると、国民年金は積立方式で1961年にスタートしたが、当時の激しいインフレ(インフレ率7%)ですぐに財源不足となり、1966年に賦課方式の要素を持つ修正積立方式へ、1973年までには現在の賦課方式へ完全に移行したようだ。賦課方式はインフレには強い方式らしい。

賦課方式の心配な点は、現在の少子高齢化がもっと進んだらどうなるのか、と言う点だと思う。しかしこの点についてもあまり心配はいらないようだ。人口の変化というのは予測可能な未来であり、40年先、50年先までほぼ確定した未来だ。年金は法律で5年毎に財政検証することになっているので、その検証の中で適切に見直しがされていくはずである。

公的年金の積立状況

公的年金は賦課方式であると話をした後で、この話をするとややこしくなるのだが、年金保険料の一部は積立金として積立てられ、債券や株式で資産運用されている。運用している組織は最近少し話題になったGPIFである。

GPIFが運用している積立金はなんと2023年度の最新の運用状況によると224兆7,025億円もある。この規模は世界の年金基金ランキングにおいて第一位となっている。

GPIFのHPの情報によると、2020年度の年金給付額の総額が56兆円なので、約4年分の年金給付額の規模の積立金を持っていることになる。これは安心材料だ。

2023年の出生数は過去最低になったというニュースがあった。この世代が働き盛りの世代になる40年後や50年後には年金制度に少なからず影響は出るだろう。その時のための積立金なのだ。

GPIFはX(旧Twitter)でも情報を発信している。私はフォローしている。

最近、日本共産党の国会議員が下記のようなレベルの低い質問を国会でしたようだ。全く困った人達だ。

news.yahoo.co.jp

まとめ

日本の年金制度は知れば知るほどよくできた制度であると感心する。日本の健康保険は皆保険として世界に誇れる制度であるが、日本の公的年金も皆保険として自慢してもいい制度ではないかと思う。

私が見つけた参考になるサイトのリンクを貼っておくので興味のある方は見てもらいたい。