オーバースペックなので

新しいサーバなんだけども。

今使ってるのはWordpressだけ。要はApacheとMariaDBだけ。これは勿体ない。VPSサーバは結構良いのを借りている。メモリ4Gに仮想コア4つ。SSDも400G。もったいなさ過ぎる。

なので、適当なVPNサーバを突っ込んで拠点にできんかなと思ってる。

メールサーバも構築失敗したくせに何を言ってんだと思わなくも無いが。挑戦は大事なので。

さて、どうなることやらな。

サイトデザイン

サーバも古いが、サイトデザインもかなり古い。

テーマの配布・更新は何年も前に止まってる。レスポンシブ対応も不完全。

2カラムで、個尾体ページのタブは好きなので維持したいのだが、タブ付きは厳しいかもしれんな。

なるべく素のテーマに近い物にして更新に強くしたい。公式のデザインは今一すかんのでなんか無料の奴を探すことになるかなぁ。

サーバの切り替えについて

現在のサーバはCentOS7。だいぶ古くなってきた。

サーバ作成に慣れていない頃で、設定の仕方もこなれていない。最近はGmailを使ったメール送信で、サーバとの接続拒否されていて、難儀である。

スペックも現在のサーバはオーバースペックだ。ほんとはもうちょっと色々とサービスを作成したかったのだが、結局用途別にサーバを作成することにしたためだ。

学校の授業で使うRockyLinuxにするか、今後の伸びを考えてUbuntuにするか。悩ましいところ。

Dockerも使ってみたい。

PythonでのWebアプリ公開もしてみたい。

何にせよさくらインターネットでのサポートもそろそろ切れるんじゃ無かったっけ?(ソース脳内)

年末年始、パソコンが壊れ、分裂した話

パソコン環境が大きく切り替わった話。

昨年末12月末、メインマシンをデュアルブートにしようと思ったのが運の尽きであった。

Windowsマシンの切り分けとUbuntuインストールまでは上手く行ったのだが、NVMEの認識が出来ず起動できない。
ネットを調べChatGPTに聞きながら色々と試すが、状況は悪くなるばかり。
結局12/31早朝、マザーボードが壊れてしまった。
それから、串刺し未遂事件が起こったのだが、パソコンが動かないと仕事が出来ない。
宮崎のパソコン工房にマザボなどを買いに行こうとするが、実家の家族に反対される。結局鎌倉から戻ってた弟に送り届けて貰う事になった。

CPUとマザボをIntel系に切り替えるが、状況変わらず。
最終的にKernelに関してまで調査して、ようやく原因が分かる。私がメインで使っていたSSDのGenが進みすぎててKernel対応してなかったのだ。
色々見てみるとKernelを自力でコンパイルすれば行けるようなことも書いてあるが、私がそれを実行しても後の保守が出来ない。
泣く泣くメインのSSDを外す。そうすると、今度はグラボの2枚差しも上手く行かない。これも結局1枚刺しに戻すことになった。

何だかんだで動くようになったのは6日。仕事が始まる直前。しかし、その間にWindows環境も死んでしまいノートでしか仕事が出来ない。Officeの授業などがあるからUbuntuだけでは仕事が完結しないのである。

9日、残ったグラボやSSD、以前使っていた電源などにマザボとCPUを買い足してWindows機が出来上がった。
OSや環境は、AcronisのUniversalRestoreツールで問題なく復元できた。しかし、ほんとにこれすごいな。助かってます。

それからubuntuは23.10から22.04になり、CUDAなどを入れ直している最中である。テスト期間が近く、余り余裕がないのだ。

フロントをWindows、バックをUbuntuにして独自アプリなんかも作りやすくなった。金は飛んだし時間も吹っ飛んだが、塞翁が馬になるとよいな。

まぁしかし、VPSと実機ではまるで違う。もちろんWindowsとUbuntuも。これまでより高度なことが出来るようになった分、面倒な事も増えた。
イい年(52)になってからの学習はキツイが、まぁ頑張ろう。

Windows機

部品名 製品名 購入日
CPU Intel Core i5-13400F 2024/1/9
CPUファン レファレンス 2024/1/9
マザーボード PRIME B760M-K D4-CSM パソコン工房限定モデル 2024/1/9
メモリ TED432G3200C22DC01 [DDR4 PC4-25600 ] 2024/1/9
グラボ GG-RTX3060-E12GB/OC/DF 2023/8/24
SSD G-Storategy  NV47004TBY3G1 2023/9/1
HDD ST4000DM004-2CV104 2017/11/11
ガワ zalman t3 plus 2024/1/9

Ubuntu機

部品名 製品名 購入日
CPU Intel Core i5 13400F 2023/12/31
CPUファン レファレンス 2023/12/31
マザーボード MSI PRO B760-P WIFI DDR4 2023/12/31
メモリ v-color Hynix IC DDR4 4266MHz 64GB 2022/11/30
グラボ MSI GeForce RTX 3080 VENTUS 3X PLUS 12G OC LHR 2022/11/9
SSD intel ssdpeknw020t9(Intel SSD 665p 2T) 2020/10/4
HDD ST4000DM004-2CV104 2017/11/11
電源 玄人志向 KRPW-GR1000W/90+ 2023/8/24
ガワ Antec P10 FLUX 2021/6/23
ディスプレイ Acer VG240YUbmiipfx 2022/4/17
液タブ XP-Pen Artist 24 2022/3/11
VRHMD Pimax 5KSuper 2021/11/23

色々なパソコン部品の変更

8/24にローカルLLMの大きなサイズを動かすためにグラボ(RTX3060-12G)を追加した。それに併せて電源を750Wから1000Wに変更。

8/31にDドライブのSSDが呼称したために9/1にSSDの4Tを購入。
Cドライブが2T→4T。Dドライブが1T→2Tへ。旧CドライブがDドライブへ、Cドライブは新規購入部品に変更。

SSDはBIOSがおかしかったのか、リストアで何かおかしな事をしたのか、リストア後にCドライブが起動せず苦労した。物は9/2朝に届いたのだが、復旧完了したのは9/3夕方であった。

現在の構成は以下の通り。

部品名 製品名 購入日
CPU AMD Ryzen 5 5600X 2021/6/23
CPUファン 虎徹Ⅱ 2021/6/23
マザーボード ASUS TUF GAMING B550-PLUS 2021/6/23
メモリ v-color Hynix IC DDR4 4266MHz 64GB 2022/11/30
グラボ MSI GeForce RTX 3080 VENTUS 3X PLUS 12G OC LHR 2022/11/9
グラボ GG-RTX3060-E12GB/OC/DF 2023/8/24
SSD G-Storategy  NV47004TBY3G1 2023/9/1
SSD intel ssdpeknw020t9(Intel SSD 665p 2T) 2020/10/4
HDD ST4000DM004-2CV104 2017/11/11
HDD ST4000DM004-2CV104 2017/11/11
電源 玄人志向 KRPW-GR1000W/90+ 2023/8/24
ガワ Antec P10 FLUX 2021/6/23
DVD-RAM LITEON? 不明
ディスプレイ Acer VG240YUbmiipfx 2022/4/17
液タブ XP-Pen Artist 24 2022/3/11
VRHMD Pimax 5KSuper 2021/11/23

Rinna4BをCtranslate2で軽くしてWindowsで動かした。

一昨日、昨日と頑張ってた「Japanese StableLM Alpha」なのだけど、とりあえず他のから動かしてみて、実績を作る事にした。そのうち、分からなかったところも治せるようになるだろう。

そんなわけで今朝は「rinna/bilingual-gpt-neox-4b-instruction-ppo」をCtranslate2で量子化して動かす事にチャレンジ。

主にこちらを参照に。他にも色々見てたのだけど訳が分からなくなってしまった。

前提条件

  • windows11
  • Python3.10.10
  • 仮想環境はpyenv + venvで作成

# 環境作成
pyenv local 3.10.10
python -m venv .venv
.venv/Scripts/activate
python -V
pip install --upgrade pip
python -m pip install --upgrade pip
#torchのインストール
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# ctranslate2インストール
pip install ctranslate2
pip install sentencepiece transformers
pip install protobuf
# 変換
ct2-transformers-converter --model rinna/japanese-gpt-neox-3.6b-instruction-ppo --quantization bfloat16 --force --output_dir rinna-ppo-bf16

変換は、bfloat16にしてみた。この状態で動かしても6G程度。変換で使用したメインメモリは20G程度だったかな?(うろ覚え)応答も十分早く、遅延は気にならなかった。

最終的に動かしたコードは以下の通り。

import ctranslate2
import transformers
import torch
import os

os.environ["CUDA_VISIBLE_DEVICES"] = "0" #GPUを使用する場合はコメントアウトを外す
model='rinna-ppo-int8' #directory of the model

ppo = "rinna/japanese-gpt-neox-3.6b-instruction-ppo"
generator = ctranslate2.Generator(model, device="auto")
tokenizer = transformers.AutoTokenizer.from_pretrained(ppo, use_fast=False)


# プロンプトを作成する
def prompt(msg):
    p = [
        {"speaker": "ユーザー", "text": msg},
    ]
    p = [f"{uttr['speaker']}: {uttr['text']}" for uttr in p]
    p = "<NL>".join(p)
    p = p + "<NL>" + "システム: "
    # print(p)
    return p

# 返信を作成する
def reply(msg):
    p = prompt(msg)
    tokens = tokenizer.convert_ids_to_tokens(
        tokenizer.encode(
            p,
            add_special_tokens=False,
        )
    )

    results = generator.generate_batch(
        [tokens],
        max_length=256,
        sampling_topk=10,
        sampling_temperature=0.9,
        include_prompt_in_result=False,
    )

    text = tokenizer.decode(results[0].sequences_ids[0])
    print("システム(ppo-ct2): " + text + "\n")
    return text


if __name__ == "__main__":
    # import readline
    while True:
        msg = input("ユーザー: ")
        reply(msg)

次にint8でも実行してみた。VRAMは4Gほどか?応答速度は、これも気にならなかった。応答精度も高い。

Japanese StableLM Alpha 7B チャレンジ中

先日公開された「apanese StableLM Alpha 7B」をローカルで動かせないかチャレンジ中。

自分の環境はWindows11+VRAM12Gbなので8bit化しないと動かない。公開されている記事の多くはGoogleColabでそのままでは自分の環境では使えない。Windows11での記事も一箇所見つけたのだけど、公開されているサンプルをそのまま動かしていたので、VRAMも潤沢なのだろう。私が詰まっているポイントでは参考できない。

そもそも私はAIの事を勉強したことはない。昨年のAIブームを受けて騒いでいるミーハーだ。でもまぁこれを機会に自分なりの物を作ってみたいと思っている。langflowとやらを使えば何とかなるんじゃ無いかと思っているんだが。

Windows11ローカルが駄目ならWSL2。そっちの方が楽という呟きもちょいちょい見ているので、駄目ならそっちに行こうと思って居る。

もしくはRinna4Bも作例が多いように思って居るのでそっちから手を付け直しても良いのかも。いや、むしろそっちの方が良くないかなぁ。

ちょっと調べて、考えてみる。

langChain勉強開始

ChatGPTをAPIを通じて操作するとき、自力で実装するのが難しい・手間が掛かる時に使うライブラリがlangChain。(という理解)

占いアプリ、Misskeyでのボットなんかをやってみたいので勉強することにした。

新しいことをやっておかないとどうしても鈍ってしまうし、一応プログラムを教える講師としては新しい物を追っていないのは恥ずかしい。

コアを作ってしまえば、ガワはある程度どうにかなるはず、と目論んでる。どうなりますかな。

faster-whisperを使って口述筆記に挑戦

OpenAI社のAIの話を追っかけでして、Whisperの存在を知り、口述筆記をやってみたいと思って居た。

そしたら先日、Whisperより早く、GPUも食わないfaster-whisperというモジュールの存在を知った。

一昨日、以下のサイトからサンプルプログラムを頂き、動かしてみた。結果は良好。

[ローカル環境] faster-whisperを利用してリアルタイム文字起こしに挑戦

しかし残念な事にこのプログラムは話したものをテキストに落とす部分が無い。あと、終了させるときにエラーが出ちゃう。そこをちょいとだけ改造してみた。昨夜何度か試したが、問題は無い模様。次はGUIにしたり、ChatGPTと連携させたりとかかな?

黒歴史、作ります。後ChatGPTすごい。

今年のGWはプログラム作成強化週間となりました。

先月末から別アカウントの方で使うソフトを作成し、今日リリース。小っさいプログラムなので今後アップデートは余り無い予定。GUIがダサいので多少作り直すかもしれないけど。

で、GWの残り何をするか。

今回プログラムをChatGPT4と作って思ったんだけども。ChatGPT4との協力は良いね。何が良いかって言うと、作業に対する心理的な敷居がだいぶ低くなる。

引っかかったらとりあえず聞く。何らかの答えが出る。自分で調べるなりもう一回聞くなりして精度を高める。一人で作ってると煮詰まりがち。そして段々面倒くさくなって止まる。やりたい事が見つかっても、とっかかりが見つからなくて止まってしまう。そういう事がかなり減る。これは私のようなやる気無し勢からするとデカい。

まぁただ、普段のスピードと違ってウェイトがあまり掛からないので、疲れちゃうのが玉に瑕、か?

で、そこで思ったんですわ。そーいえば、敷居が高くなって止まったモノがあったなと。

小説です。以前、書いてた小説、カクヨムに載せてたんだけど1話書くのに5時間は掛かってた。それでも中断したり何たりしながらも一年半くらいは頑張ったのかな。でもそこで止まってしまった。やっぱり1話に時間が掛かりすぎる。書くことに対して気が重くなってしまった。

そこでChatGPTですよ。アイディア出しとか執筆そのものなんかをフォローしてくれると嬉しい。全自動というのはよく見かけるけど、協力態勢はあまり見かけない。そして短編では無くて長編の手伝いをしてほしい。

ChatGPTの記憶に関してはトークン毎の料金の問題もあり、あまり使える手段では無い。なので、全編を通してのアドバイスとかはちょっと難しい。スポットで表現を見て貰うとかそんな感じになるのかな?

となれば、一番にやって貰いたいのは口述筆記。大まかにやってくれれば良い。後は手動で直したりChatGPTに投げたり出来ればそれで。下ごしらえをしてくれるだけで大幅に時短になるし、モチベーション維持にも役立つはず。

幸い、OpenAIのソフトにはWhisperというものがある。ネットで見かけるのはこれのAPIを使ってのSpeech to Text(or chat)な訳なのだが、せっかくRTX3080(12Gver)を持っているのでローカルで動かしたい。これを使って喋った内容を一端テキストに変換する。これを第1段階とする。

変換が出来るようになったら、それを適当なテキストボックスか何かに入れて雑に編集。質問点なんかを添えてChatGPTに質問。戻ってきたモノを見ながら修正。さらに再質問、みたいなサイクルが出来ると良いなと。

まぁ雑に考えているだけなので、やっていくうちに変わる部分も多々有ると思うのだけど、とりあえずはこんな感じ。