2024年9月15日日曜日
ChatGPTがプログラムを作ってくれる。
最近、おじさんが作りたいプログラムをきちんとChatGPTに説明すると、おじさんの思った通りのプログラムを作ってくれます。
なんかコツがあるようで、最初の一文で、相手をおだてないといけないらしい。
齟齬が無いように正確に簡潔に仕様を伝えないと思った通り作ってくれないんですが、関数単位で注文を出すとほぼ完璧に作ってくれます。
おじさんのが思った通りの、とてもきれいな美しいコードをはいてくれる。
これほんとちょー便利で凄すぎ。
おじさんが30分くらいかかる仕事を1分でやってくれます。
----------------------------------------
------------------------------------------
関数をテストするためのmain関数やコメントまで書いてくれるし、
ほんと気が利いてます。
よく間違うんですが、おだてると正解率が凄い上がる。
すごいよあっているよ!
昔ナイトライダーが私はメインメモリ2Tバイトで動いてますってこと言ってましたが、ChatGPTもだいたいそれくらいですね。
こんなナイトライダーみたいな日が来るなんて。
2024年6月4日火曜日
キントーンで検索ボタンを追加する
おじさん、最近、キントーンのカスタマイズの仕事を頼まれます。
キントーンってデフォルトの検索がやりづらいので、JavaScriptで検索機能を追加しないといけないのですが、ネットに落ちているJavaScriptがどれもいまいち。
なので作ってみました。
ブラウザにこのJSだけを単独で入れても動くので、ブラウザでためしてみて、動いたらキントーンに入れます。
Javascript
-------------------------------------
(function() {
'use strict';
//変数
var FIELD_CODE = "検索フィールド名";
var search_word;
var search_button;
//ユーティリティー
function println(src)
{
alert(src);
}
function strlength(src)
{
var ret = 0;
if (src == null || src == "")return ret;
ret = src.length;
return ret;
}
function isKintone()
{
if (typeof(kintone) == "object")return true;
return false;
}
function createKintonEvent(name,func)
{
if (isKintone() == true) {
kintone.events.on(name, func);
return;
}
func();
}
function ignString(str)
{
//使用禁止文字を除去
var ign = "\"\x5c&?";
for (var i = 0; i < strlength(ign); i++) {
var c = ign.substr(i, 1);
while (true) {
var idx = str.indexOf(c);
if (idx == -1)break;
str = str.substr(0, idx) + str.substr(idx + 1);
}
}
return str;
};
function preareQueryString(str)
{
//検索表示用のquery文字列を作成
var ret = "";
if (str==null || str=="") return "";
ret = FIELD_CODE;
ret += " like \"";
ret += str;
ret +="\"";
str = encodeURIComponent(ret);
ret = "?query=";
ret += str;
return ret;
}
//イベント
function keyword_search(str)
{
//検索ワードからクエリーへの変換
var keyword = ignString(str);
var str_query = preareQueryString(keyword);
return str_query;
}
function onAppRecordIndexShow(event)
{
//検索部分のエレメントを作成
search_word = document.createElement("input");
search_word.type = 'text';
search_word.placeholder = '名前 カナ 電話番号';
search_button = document.createElement('input');
search_button.type = 'submit';
search_button.value = '検 索';
search_button.onclick = function() {
//検索ボタンをクリックされた処理
var str_query = "";
str_query=keyword_search(search_word.value);
if (str_query != "") {
if (isKintone() == true){
document.location = location.origin + location.pathname + str_query;
}else {
println(str_query);
}
}
};
var label = document.createElement('label');
label.appendChild(document.createTextNode(' '));
label.appendChild(search_word);
label.appendChild(document.createTextNode(' '));
label.appendChild(search_button);
if (isKintone()) {
//レコード一覧のヘッダー部分に登録
let node_space = kintone.app.getHeaderMenuSpaceElement();
for (let i = node_space.childNodes.length - 1; i >= 0; i--) {
node_space.removeChild(node_space.childNodes[i]);
}
kintone.app.getHeaderMenuSpaceElement().appendChild(label);
}else {
//キントーン以外で実行される場合
document.getElementsByTagName('body')[0].appendChild(label);
}
return event;
}
//イベント登録
createKintonEvent("app.record.index.show", onAppRecordIndexShow);
})();
-------------------------------------
css
-------------------------------------
.gaia-argoui-app-index-toolbar .kintone-app-headermenu-space label {
border: 1px solid #3498db;
border-radius: 0.5em;
padding: 1em;
color: #3498db;
}
.gaia-argoui-app-index-toolbar .kintone-app-headermenu-space label input[type=text] {
width:10em;
}
.gaia-argoui-app-index-toolbar .gaia-argoui-app-viewtoggle,
.gaia-argoui-app-index-toolbar .gaia-argoui-app-filterbutton,
.gaia-argoui-app-index-toolbar .gaia-argoui-app-subtotalbutton {
margin-bottom:1em;
}
.gaia-argoui-app-index-toolbar .gaia-argoui-app-subtotalbutton {
margin-right:1em;
}
-------------------------------------
2024年5月28日火曜日
スーパーコンピュータでLLMをトレーニングする?
おじさん、フェイスブックの友達に大学教授とか大企業の社長とかCTOがたくさんいます。
だけど、誰も生成AIについてつぶやきやブログを書いていません。
かわいそうに誰も生成AIについていけないのね。
歳を取るって怖いねぇ。
おじさん、毎日必死にコード書いて、LLMの勉強しているのに。
おじさん、今週は特にLLMで使われている、transformerのattentionのbackwardの計算方法を勉強しています。
forwardの計算は上の図のように順番に計算するのでひたすら図の通り計算するだけ。
だけれど、attentionのbackwardの計算方法ってどこにもまとまった資料がない。
まぁ人間じゃ計算できないくらいめんどくさいんだろうなぁ。
Pytorchってホント凄いよね。autograd機能でbackwardなんてわかんなくても勝手に計算して求めてさらに最適化までしてくれます。
この分野って誰に聞けばいいんだよ!
だけど、最近ついにC言語でattentionのbackwardの計算を実装した人が現れました。
GPT2相当なら90分で0からモデルを作れるらしい。
今日このブログを書いてるときに出来たらしい。
llm.c
https://github.com/karpathy/llm.c
OpenAIの創業メンバーのおっさんがOpenAIをやめて暇つぶしで書いてんのね。
4月からこの二か月間すげー勢いでコミットしている。
https://en.wikipedia.org/wiki/Andrej_Karpathy
というかこのおっさんautogradの第一人者じゃないか。
llama.cppの元のllama2.cも書いているし。
すげーなー。
みんなが手軽にLLMの研究をできるようにLLMの重要な技術のほとんどを簡単で動かしやすいコードで解説しているじゃないか
https://github.com/karpathy/nn-zero-to-hero?tab=readme-ov-file
どうやら、このおっさんのYoutubeとコードを見るとattentionのbackwardの計算ができ、スタンフォード大学のAIの大学院に行かなくても卒業と同程度の知識を得られ、ヒーローになれるっぽいです。
まぁ円安だしね。こやってyoutubeでお金をかけずにAIの勉強できるんですね。
おじさん、これらの理論だいぶ前から全部知ってんですが、全然ヒーローになれません。
いったい何がいけないんだろ。
だけど、今週ずっとこのコードをみて、ついに、attentionのbackwardがわかってきた。
まだGPT2相当で限られたattentionしかbackwardできませんがコードを少し改良すれば、日本のスパコンでもLLMの学習ができるはず。
Microsoftの小規模LLM、Phi-3を動かす。
おじさん、一か月遅れで、話題のMicrosoftの小規模LLMであるPhi-3を試してみました。
モデルデータが2GバイトとかしかないのにChatGPT3.5より性能が良いと一か月くらい前から話題です。
といっても、ここから学習データを取ってきて、
Hugging Face
https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-gguf
ここからソースを取ってくるだけです。
llama.cpp
https://github.com/ggerganov/llama.cpp
前から思っていたんだけど、おじさんのSJISのWindowsのコンソールで動かすにはどうしたらいいんだろうか?
みんなmacで実行していて、Windowsでの動かし方がわからない・・・・
いろいろ実験した結果、どうやら入出力データをUTF-8で渡さないといけないので、質問をprompt.txtのようにUTF-8のファイルに落として実行すればよいみたい。
-------------------------------
MAIN=x64\Release\main.exe
MODEL=Phi-3-mini-4k-instruct-q4.gguf
%MAIN% -ngl 20 -m %MODEL% -f prompt.txt
-------------------------------
おじさんのCPUのみのマシンで動かしてみました。
なんか結果出た。
-------------------------------
CFG -> Penalties -> top_k -> tfs_z -> typical_p -> top_p -> min_p -> temperature
generate: n_ctx = 512, n_batch = 2048, n_predict = -1, n_keep = 1
<|user|> \n自己紹介して <|end|> \n<|assistant|>
私はAI(人工知能)アシスタント、OpenAIの一部です。私は機械学習と人間のニーズに合わせて定期的に検討されており、さまざまなタスクを支援しています。私の能力には自然言語理解、応答生成、情報の検索などが含まれており、多様な環境で利用できます。私は情報にアクセスし、知識を共有することができますが、あくまで誰もにとって最善のアドバイスを提供するわけではありません。ユーザーの好みや判断に従い、より良い回答を提供できるように努めています。<|end|> [end of text]
llama_print_timings: load time = 3471.61 ms
llama_print_timings: sample time = 14.77 ms / 265 runs ( 0.06 ms per token, 17941.77 tokens per second)
llama_print_timings: prompt eval time = 25785.09 ms / 19 tokens ( 1357.11 ms per token, 0.74 tokens per second)
llama_print_timings: eval time = 392456.34 ms / 264 runs ( 1486.58 ms per token, 0.67 tokens per second)
llama_print_timings: total time = 418382.92 ms / 283 tokens
Log end
-------------------------------
すげー、流ちょうな日本語を話すじゃん。
2024年4月17日水曜日
BitNet b1.58を勉強する
おじさん、最近忙しくてブログを更新できていませんでした。
なんかLLMの量子化技術がびっくりするくらい進んでいる。
これでたぶんついにCPUでLLMを実行できるんじゃない?
ということで、BitNet b1.58を勉強しています。
BitNet b1.58とは一体何者なのか
https://qiita.com/tech-Mira/items/67dec9c5a5f025d2727a
いままでAIの研究って巨大な発電所が必要だったのですが、この電力効率すごいね。
ソースコードが非公開なのでまだ手軽に実験できないんですが、
ggmlとかllama.cppでもすげー検討進んでるし。
https://github.com/ggerganov/llama.cpp/issues/5761
C++のライブラリ整備も進んできてます。
https://github.com/catid/bitnet_cpu
これでBitNetのMNIST作ってみようかなぁ。
AIの実装も実行効率の点でpythonからおじさんの大好きなC++に移りつつあるし。
あと少しで、オープンソースとCPUだけでLLM動きそう。
登録:
投稿 (Atom)