2023年5月24日水曜日

りんなをM1 mac mps で動かす

rinna株式会社さんが、りんなの3.6bを公開してくれました

https://huggingface.co/rinna/japanese-gpt-neox-3.6b


サンプルソースのcudaの部分をコメントアウトして

model = model.to("mps")

とするだけのはずなんだけど、Pytouch 2.0.1だと動かないので nightlyにした

以下のように頑張る


pip3 install --pre torch torchvision --index-url https://download.pytorch.org/whl/nightly/cpu

2023/5/24現在では

(venv) % pip list | grep torch            

torch                    2.1.0.dev20230523

torchvision              0.16.0.dev20230523


1回目、うーん、お馬鹿さん

python3 r.py            

ユーザー: 日本のおすすめの観光地を教えてください。<NL>

システム: どの地域の観光地が知りたいですか?<NL>

ユーザー: 渋谷の観光地を教えてください。<NL>

システム: そうですね、私のお気に入りの観光地は東京です。</s>

何回か動作させると

システム: 

それは広大で、多くの異なる観光スポットがあります。以下は、いくつかのおすすめの観光地です:


- ハチ公

- スカイツリー

- スカイツリー

- 浅草寺

- 富士山

- 皇居

- 日光東照宮

- 日光東照宮</s>

ハチ公しかあってない気もするけど、3.6bの繋がりじゃこんなもんですかね


動作させたソースコードは以下の通り

# 入力プロンプトは、「ユーザー」と「システム」間の会話書式で記述します。
#各発話は、以下で構成されます。
#
#(1) 話者 ("ユーザー" or "システム")
#(2) コロン (:)
#(3) スペース 
#(4) 発話テキスト

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM 

prompt = [
    {
        "speaker": "ユーザー",
        "text": "日本のおすすめの観光地を教えてください。"
    },
    {
        "speaker": "システム",
        "text": "どの地域の観光地が知りたいですか?"
    },
    {
        "speaker": "ユーザー",
        "text": "渋谷の観光地を教えてください。"
    }
]
prompt = [
    f"{uttr['speaker']}: {uttr['text']}"
    for uttr in prompt
]
prompt = "".join(prompt)
prompt = (
    prompt
    + ""
    + "システム: "
)

print(prompt)

#
tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt-neox-3.6b-instruction-sft", use_fast=False)
model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-neox-3.6b-instruction-sft")

#if torch.cuda.is_available():
#    model = model.to("cuda")
model = model.to("mps") # arm macなら mps に変換すると速い

# token_ids = tokenizer.encode("ユーザー: 日本で一番高い山はシステム:", add_special_tokens=False, return_tensors="pt")
token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")

with torch.no_grad():
    output_ids = model.generate(
        token_ids.to(model.device),
        do_sample=True,
        max_new_tokens=128,
        temperature=0.7,
        pad_token_id=tokenizer.pad_token_id,
        bos_token_id=tokenizer.bos_token_id,
        eos_token_id=tokenizer.eos_token_id
    )

output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1):])
output = output.replace("", "\n")
print(output)


エラーは検索用に残しておく

Apple M1 MPS touch error UserWarning: MPS: no support for int64 repeats mask, casting it to int32

end


2022年11月1日火曜日

RealForce Mac用 R3

mac用の新型キーボード R3 を買いました

 前のバージョンのR2はWindows用は全体がガッチリしててとても良かったのに、mac版は筐体が華奢だったので泣く泣くWindows用のを使っていました

 R3はずっしり、ガッチリ、静音でGood !

 ラバーとキーそのものの精度も高くて軸がブレずにとても快適

キーボードの押下の重さについて

 職業病ではありますが、腱鞘炎気味なので押下30gのものを使ってました

 R3は45gのものしかないので腱鞘炎にどの程度ダメージが出るかはまだ不明です

 店頭でR3を触ったらとてもいい感じでしたが自宅でタイプすると...

 ん~やはり少々重め

 とはいえAPCというキーの打ち込み深さを変更する機能があって、自分は最小の0.8mmにしました

 奥まで押し込まなくても打鍵に反応してくれるので撫でるようにタイピングすればいいらしいのですが、まだその感覚がわからず底まで押し込んでしまいます

 ここらあたりはタイピング仕方を変えるようにするつもりです


かな/英数キーは必須

 カナ打ちなので かな/英字 キーは必須です

 GoogleのIMEもこのキーに対応しているので、英字を入れているつもりがトントカイモとかにならないのでWindowsでもとても快適になりしまた

 いままでのWindows版でもかな/英字キーがあるんですがmacにそれを対応させる為にカラビナというアプリを使ってました

 仕事がらひんぱんにmacとWindowsを切り替えて使う事もあり、Windowsに切り替えるとそれが使えなくなるので靴の上から掻いてるみたいでもどかしかったという事もあります


BT切り替えが速い!

 BTの切り替えが遅いのでいままで有線で使ってましたが、BT5.0の効果のせいかmacに接続するのがむっちゃ速い!
 WindowsのほうはレシーバーがBT4.2なので1,2秒かかります
 Windowsも5.0レシーバー買おうかな

有線接続したまま切り替えてもUSB-UnPlugしない

 WindowsにUSBを挿抜すると「ぴんころぴん」となりますが、このキーボードはUSBからBTに切り替えてもUnPlugしないので警告音がでなくて快適です
 挿抜する時にデバイスドライバにログが残るとハードウェアの開発している時にUSBログに記録されてうっとおといのと、あまり速く切り替えると刺したことに気づかない事があるのでこの対応はGood !

カスタマイズがすごい

 これは書ききれない(笑)

なんだかんだでよくできてるキーボードだと思いました


2022年10月18日火曜日

Xeon e5 2620 v4 から e5 2643 v4(中古)へ換装

Xeon x 2サーバー来歴

  自宅のVMWareサーバー& Jenkinsビルド用に2016年末 Xeon e5-2620 v4 x 2CPUのマシンを作りました。

 当時はmac mini(2012)でXcodeのコンパイルがあまりに辛かったのでWindows上でXCodeを動作させてコンパイルしていたりもしました。(Asset Storeのグレーなアプリ) 

 手元のmac miniはCorei7で2Core 4スレッドで事実上Corei5、つまりナンチャッテCorei7でした。

 性能より消費電力が低いのが売りだったみたいです。まぁminiシリーズですからね。

 実際 2CPUで16Core 32スレッドは強烈でmac miniの10倍速でコンパイルが終わりスクラッチ&ビルドが死ぬほど捗っていました(miniだと15分、2620v4だと2分かからない)

 資産の関係で20万円を超えたくなかったのでメモリーは32GByteとしました。

 CPUは@5万円もしたのと、もう一ランク上は@7万円となり予算超えで諦め。

 

SSDをOptaneへ 2年目

 その後SSDをOptane 900Pに変えたら更にコンパイルが早くなりました。

 OptaneはシーケンシャルリードはNAND SSDと大差ありませんが、C++の小さいファイル1万個ともなるとIOPSが10倍と効きまくり。コンパイル速度が30%ほどアップしました


メモリーを64GByteへ 3年目

 元々32GByteでしたがメモリーショックでドカンと価格が落ちたので追加で+32GByte
ECC付きのレジスタードメモリー。
 サーバー用マザーの為メモリーバスが4chもあるので、4ch(8枚)全部埋まりました。


CPUを換装 5年目 超快適!

 今回CPUをXeon 2643 v4 x 2 に交換しました
 聞いたことない型番だったんですが、Xeon v4 中古で一年くらい地道に検索したらでてきましたよ、1つ17,500円。ebayだと12,000円くらいからありますがes品だったりラベル書き換えCPUかもしれないので日本の業者さんを選択
 元々コンパイル用のマシンだったのでコア数重視だったんですが、最近はVisual Studioで開発にも使い出しました。
 ベースクロックが2.1GHzというのが存外モッサリ
 VSのコンパイル時は当然マルチスレッドでコンパイルしてくれますが、エディターが2.1GHzというのがツライ。
 自分のキータイピングの速さは大したことないんですが、最近のIDEは超優秀な補完・推奨機能があってこの推奨候補がでるのにキーボードの入力が妨げられていたのです。

 なので今回はベースクロック重視

CPUBase ClockCore数(2CPU)CineBench R23
2620v42.1GHz1612332
2343v43.4GHz1213004

表にするとこんな感じで、マルチスレッドでのコンパイル速度はほぼ同じです。

ところがこの通常3.4GHzというのがVSエディターではやたらに効いてるようで 

超快適 !!

あと電力と熱はこんな感じ。室温は20度くらい

CPUメーカーTDPコンパイル実測PC全体アイドル時コンパイル時温度
2620v485W40W100W25度(笑
2343v4135W85W100W75度

 2620v4の消費電力と温度がおかしい。超当たりだったのかも。選別品なのでもっと上位のCPUになる筈だったのかもしれません。

 コンパイル時の消費電力は120Wから350Wと激増しましたが、もうビルドマシンじゃないので目をつぶります。VSエディタ上なら100Wと変わりません 


長生きしてくれよ 

 Xeon e5 v4シリーズではこれ以上のベースクロックがなさそうなので、このマシンはこれで拡張終了ですかね。

 Xeonはサーバーメーカーの案件毎に本当に色々な型番があるので探すの大変ですが、用途にぴったりなのが見つかって良かったです。

これからさらに10年くらい長持ちしてほしいな。


おしまい


2022年2月5日土曜日

Hue Bridge V2 API (Phirips Hue Lamp)

HueのREST API V2を使う

 我が家では、照明コントロールにHueのブリッジを複数使って、家中のライトをコントロールしているのだ

 SiriでもAlexaでもコントロールできるので楽ちん


アプリ使えば?

 はい、前はそれで十分でした。使いやすいGUIアプリだったし

 ところがiOS13あたりから改悪されて、アプリケーションは長時間起動し続ける事ができなくなったのだ!アリエン
 寝る前に30分だけタイマーして電気を徐々に暗くしていただけどそれができなくなった

 ムキー

 iOSのショートカットを作ってもiPadがスリープすると「ショートカットアプリ」自体がkill processされちゃう。iOS 裏アプリは5秒しか動けない制限。

 つまり「スクリプト」をアラームにしても「アラームアプリ」までは目覚ましの機能で起動するんだけど、その後「ショートカットアプリ」がすでに死んでるんでその先の「Hueの照明を消す」に進まない。
 「アラームアプリ」はスーパースペシャルで、「ショートカット」なんて新参者にはあまり権限がないようだ
 しかたない、自作するか


やれやれどっこいしょ

 V1 APIとV2 APIがあるんだけど、V1は古いAPIなので、もうじきなくなるよ、と脅し文句がAPIリファレンスに書いてあるけど、告知されてから早10年以上たってる気がする

 家電なので10年や20年は使うから、そうそう無くせないよね

 またV1じゃないとできない機能があるらしい。はよ解決しろ

V1 API

http://192.168.0.127/debug/clip.html

 httpでもアクセスできるよ、いいんかい。確か初代のブリッジはCPUとメモリがしょぼすぎて httpしかできなかったのでAppleのHomeに公式登録する事ができなかったんだよな

 初代ブリッジはhttpsの実装ができないので、新しくブリッジに買い直したんだよ

 1万円近かったよ

 海外は初代ブリッジ下取りするサービスがあるんだけど、日本のサポートに問い合わせたら

「そんなサービスの予定はありません、フヒヒ」

と言われてがっかりした

 フヒヒは言ってなかった気がする


V2 API

前準備

まずはブリッジのDHCPのアドレスが必要なのだ

Hueブリッジは勝手にインターネットにつないでくれてちゃって


https://discovery.meethue.com/


にブラウザでアクセスするとどういう仕組みなんだか、自宅のブリッジが全部出てくる

[{"id":"002992aaae7ee5c3","internalipaddress":"192,168.0.115","port":443},{"id":"00354ffe299d29","internalipaddress":"192.168.0.127","port":443}]

うむ、怖いww

まぁルーターのDHCPリストとmacアドレスを老眼で突き合わせてショボショボ IPを探すよりは楽なんだけど

このidはいつ使うのかな。自分のアプリでブリッジを見分ける時に使うのかも

複数のルーターを使っている人は知識あるから説明は不要でしょう

postmanなるツールを使うなら、SETTINGSの

Headers 項目

  1. Send no-cache header をon

  2. Send Postman Token Headerをon

  3. Trim keys and values in requst body をoff

  4. SSL certificate verification を off. (俺俺証明書だから)

としときなさいよ、と

ハイカラなGUIが不得意な8bitおじさんなのでcurlで作業するのじゃ、ヨボボ

1は  -H 'Cache-Control: no-cache'

2と3は無視

4は -k をくっつけとけばよさそうじゃのぅ

ブリッジにIDを作る

まずREST APIをアクセスできるように、ブリッジに適当な名前で「アプリ#ユーザー名」の登録をする

urlを /api

Message Body の中に

{"devicetype":"my_app#mydebug"}

とか入れる。

my_app が 今回決めたアプリケーション名(適当)で、

mydebugがそのアプリのユーザー名という事らしい

何個作れるんですかね


curl -X POST -H 'Cache-Control: no-cache' -k "https://192.168.0.127/api" --data '{"devicetype":"my_app#mydebug", "generateclientkey":true}'

を送信すると

[{"error":{"type":101,"address":"","description":"link button not pressed"}}]

hueブリッジのボタンを押せ、とな。押入れまで歩いて一回だけポチする

30秒くらいでこの呪文の効果が切れるらしいのでダッシュで戻り、さっきのcurlをもう一度たたくと

[{"success":{"username":"LuY7AOkGozQTotCstgya28EUddfYpSflIr-CCPc","clientkey":"007E618660B3464232C29946A01CE3DF"}}]

なんか手に入ったっぽい!

これ何人くらい登録できるんすかね。ブリッジのメモリーなんてたかが知れてるし

で、このusernameをヘッダーにくっつけとくとGETができるようだ

返ってくるのが一本グソのjsonなので jq で整形する

# brewはおググりください
% brew install jq

usernameはさっき手に入れてたので、-H "hue-application-key: LuY7AOkGozQTotCstgya28EUddfYpSflIr-CCPc"をくっつけて、/clip/v2/resource/device のリクエスト

curl -H 'Cache-Control: no-cache' -k "https://192,168.0.127/clip/v2/resource/device" -H "hue-application-key:LuY7AOkGozQTotCstgya28EUddfYpSflIr-CCPc" | jq

でっかいjsonキター

このjsonはランプのuuidとか入ってて、これがバレると外からアクセスできちゃうからhueの画面を貼っとく







APIの一覧

ユーザー登録すると、以下のurlでapi一覧を見る事ができる

https://developers.meethue.com/develop/hue-api-v2/


よし、これを使って30分で消えるタイマーをRaspberyy PIで作るぞ

今年度中には


2021年3月2日火曜日

DHT22 is not a Maxim standard.

けっこう外人さんがくるので英語でも書いておく

DHT22 (AM2302) はオレオレ 1Wireだった


DHT22 is not a Maxim standard. 

Using the RaspberryPI 1wire driver (GPIO4) is a mistake!

There is a program written in python3 from the device manufacturer that can be used for this purpose.

Since it is not a 1wire standard, it was not possible to connect multiple sensors to the same bus.


DHT22は1wireと書いてあるけど、マキシム社の規格ではありません。

RaspberryPIの1wireドライバ(GPIO4)を使うのは間違いです。

デバイスメーカーからpython3で書かれたプログラムがあるのでそれを利用しましょう


という事で、ここから先には奮闘記が書いてあったんだけど、結論からいえば上記の注意の通りである。

1wire規格ではないので、複数のセンサーを同じバスにつなげる事はできませんでした。

20年は押入れの中に入っているとおもう

奮闘記は嘘/紛らわしいので消しました


というかGPIO 4に接続している人多いな。

これ間違いだから。

あとプルアップは VCC(電源)が5Vとの時は 5.1KΩって説明書に書いてあるから!

10kΩとか
sudo dtoverlay w1-gpio gpiopin=4 pullup=4
は間違いだから

Raspberry PIのプルアップは 1.5KΩしかないのでセンサーがドライブできない。

動いたとしたらたまたまだからね


18B20(maxim 1wire tempture sensor)と並列にぶら下げられると思って5個も買っちゃったよ、トホホ



おしまい

2021年2月28日日曜日

HDC1080 と RaspberryPI と Golang で温度湿度を読み取る

  タイトルの通りなんですが、Amazonで購入した HDC1080 という温度と湿度を測るチップをRaspberry PI4 とGO言語を使ってI2Cバスから読み取ってみました


HDC1080のデータシートはここから手に入れました

# i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 


似たような温度湿度センサーSi7021と同じアドレスだ

Pythonは嫌だ

 なんだってまたGo言語を使うのかというと、HDC1080の読み取りでググるとほとんどがPythonで書かれているんですよね
 で、PythonはPython2とPython3で互換性がなく、パッとソースみただけじゃどっちかわかんない書き方をしているものが多いです

 pipコマンドでライブラリを入れるんですが、pip3だとpip2だのいろいろバージョンがでてくる

 しかも pip serch 欲しいライブラリすると...

pip3 search test

ERROR: XMLRPC request failed [code: -32500]

RuntimeError: PyPI's XMLRPC API has been temporarily disabled due to unmanageable load and will be deprecated in the near future. See https://status.python.org/ for more information.

 ううーん、pip3 install ホゲホゲ はできるのに、サーチできない。

 pip3をアップデートしろ、という書き込みをみたのでアップデートしたらpip(Python2のほう)がぶっ壊れたww

 真の原因は、どうやら現在searchする為のサーバーが攻撃だかリクエスト有りすぎだかでダウンしていて、回復する見込みはないという絶望的な状態とのこと(2021/02現在)

 意味わからんのでPythonは金輪際使いたくない。

 昔インフラの仕事もしてたから、破壊的バージョンアップを平気でするスクリプト系は嫌いなんだよ。Dockerとかこのあたりを解決したかったんじゃないかとも思える 

 Rubyは2.0系にAppleが開発に加わって破壊的なのが激減したから許す

2021年2月26日金曜日

Zabbix 4 LTS グラフ 日本語文字化けの修正方法

Zabbixのグラフが豆腐になってしまう

 Raspberry PI 4だとRAMが4Gもあってzabbixが楽々動作

 

 まずは日本語フォントをダウンロードする。

ipa00303.zip じゃないとダメ

リンクが切れていたらファイル名でググって手に入れてましょう。

 最新のipaフォント(IPAexfont00401)だとなんかうまく出ない

 ipa.go.jp っていつの間にかなくなってたのね。あちこちこの手の情報はあるけど、リンクが切れまくってるのと、最新フォントならいけるだろ、と思ったらイケなかった。


$ sudo su -

# wget https://ja.osdn.net/projects/ipafonts/downloads/51867/ipag00303.zip

# cd /usr/share/fonts

# unzip  ~/ipag00303.zip        

 //  ipag00303/ipag.ttf ができあがっている事


# cd /etc/alternatives/

# mv zabbix-frontend-font zabbix-frontend-font.org

# ln -s /usr/share/fonts/ipag00303/ipag.ttf /etc/alternatives/zabbix-frontend-font

zabbix-serverが動作したままでもこの変更でブラウザをリロードしたら即座に反映できた

なんか元のフォントに比べると、弱っちい見た目になるけど日本語である事のほうが重要

表示用のhtmlを修正してフォントサイズを少し大きくすればいい筈だけどめんどいからパス


end