ハードウェアからサーバ・アプリまでワンストップで開発

Orange Pi 5で「ELYZA-japanese-Llama-2-13b」を動かしてみた

現在最強のOSS LLMをSBCで

ELIZAの新版が出ました。130億パラメータだそうです。

130億パラメータの「Llama 2」をベースとした日本語LLM「ELYZA-japanese-Llama-2-13b」を公開しました(商用利用可)

詳しい能書きは上記のELIZAの発表のエントリを見て下さい。

さっそくGGUFも公開されていました。

ELYZA-japanese-Llama-2-13b-fast-instruct-gguf

これをOrange Pi 5で試してみます。

以前試してみたのはこちらです。

Orange Pi 5でELYZAを試す

はじめに

最近もAI関係のものの勢いは留まらず、どんどん新しいものが出ています。ChatGPTも新しくなってますし、弊社も課金勢となりAPIも使えるようになりました。

とは言え、色々な事情や思いから「うちの子」という感じで使えるAIが欲しいと思っています。

ですから、新しいローカルLLMが出ると試してみるわけですが、手元で簡単に動かせる(そして実用にできる)ものはLlama系統のものです。それでも最近は

パワーこそ力

と言わんばかりのパラメータ数で勝負みたいなものが多く、GGUFにしても大き過ぎて手が出せないものが増えて来ました。雑に言えば、GGUFのファイルサイズで10GBを超えると、厳しいなという感じです。量子化ビット数を小さくすれば何とかという感じがなくもないですが、量子化ビット数をあまりに減らすと意味不明な返答(推論)になったりすることもあって、最低でも4bitは欲しいところです。

というところに、ELIZAの130億パラメータが出ました。また、その直後くらいにGGUFが出て、そのサイズが程々らしいこともわかったので試してみることにしました。

やったこと

Llama.cppを使って誰かが作ったGGUFを使う時は、本当にダウンロードして試すだけです。

Llama.cppは高頻度に更新されているので、まずは最新にします。

$ git pull origin master

こちらも結構高頻度でpullしているのですが、pullする度に大量の更新が来ますね。

コンパイルします。大量に更新があった時は一度綺麗にした方が良いですね。

$ make clean
$ make -j 4

特に問題なく終わります。いろんなライブラリを使うということもありますが、特にそういったものを使うメリットもない(そんなに高速化されない)ので、単純にmakeするだけにします。x86_64環境だとかGPUとか持っていれば、あるいは意味があるかも知れませんが。

モデルを落とします。

$ cd models
$ wget https://huggingface.co/mmnga/ELYZA-japanese-Llama-2-13b-fast-instruct-gguf/resolve/main/ELYZA-japanese-Llama-2-13b-fast-instruct-q4_K_M.gguf

とりあえず4bit量子化のものを選びます。

いつもの「クマベンチ」を入れてみます。

$ ./main -m models/ELYZA-japanese-Llama-2-13b-fast-instruct-q4_K_M.gguf -n 256 -p '[INST] <<SYS>>あなたは誠実で優秀な日本人のアシスタントです。<</SYS>>クマが海辺に行ってアザラシと友達になり、最終的には家に帰るというプロットの短編小説を書いてください。 [/INST]'
Log start
main: build = 1706 (b47879b)
main: built with cc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 for aarch64-linux-gnu
main: seed  = 1703735613
llama_model_loader: loaded meta data with 22 key-value pairs and 363 tensors from models/ELYZA-japanese-Llama-2-13b-fast-instruct-q4_K_M.gguf (version GGUF V3 (latest))
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
llama_model_loader: - kv   0:                       general.architecture str              = llama
llama_model_loader: - kv   1:                               general.name str              = LLaMA v2
llama_model_loader: - kv   2:                       llama.context_length u32              = 4096
llama_model_loader: - kv   3:                     llama.embedding_length u32              = 5120
llama_model_loader: - kv   4:                          llama.block_count u32              = 40
llama_model_loader: - kv   5:                  llama.feed_forward_length u32              = 13824
llama_model_loader: - kv   6:                 llama.rope.dimension_count u32              = 128
llama_model_loader: - kv   7:                 llama.attention.head_count u32              = 40
llama_model_loader: - kv   8:              llama.attention.head_count_kv u32              = 40
llama_model_loader: - kv   9:     llama.attention.layer_norm_rms_epsilon f32              = 0.000010
llama_model_loader: - kv  10:                       llama.rope.freq_base f32              = 10000.000000
llama_model_loader: - kv  11:                          general.file_type u32              = 15
llama_model_loader: - kv  12:                       tokenizer.ggml.model str              = llama
llama_model_loader: - kv  13:                      tokenizer.ggml.tokens arr[str,44581]   = ["<unk>", "<s>", "</s>", "<0x00>", "<...
llama_model_loader: - kv  14:                      tokenizer.ggml.scores arr[f32,44581]   = [0.000000, 0.000000, 0.000000, 0.0000...
llama_model_loader: - kv  15:                  tokenizer.ggml.token_type arr[i32,44581]   = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...
llama_model_loader: - kv  16:                      tokenizer.ggml.merges arr[str,73695]   = ["て い", "し た", "ま す", "�...
llama_model_loader: - kv  17:                tokenizer.ggml.bos_token_id u32              = 1
llama_model_loader: - kv  18:                tokenizer.ggml.eos_token_id u32              = 2
llama_model_loader: - kv  19:            tokenizer.ggml.unknown_token_id u32              = 0
llama_model_loader: - kv  20:            tokenizer.ggml.padding_token_id u32              = 2
llama_model_loader: - kv  21:               general.quantization_version u32              = 2
llama_model_loader: - type  f32:   81 tensors
llama_model_loader: - type q4_K:  241 tensors
llama_model_loader: - type q6_K:   41 tensors
llm_load_vocab: special tokens definition check successful ( 259/44581 ).
llm_load_print_meta: format           = GGUF V3 (latest)
llm_load_print_meta: arch             = llama
llm_load_print_meta: vocab type       = SPM
llm_load_print_meta: n_vocab          = 44581
llm_load_print_meta: n_merges         = 0
llm_load_print_meta: n_ctx_train      = 4096
llm_load_print_meta: n_embd           = 5120
llm_load_print_meta: n_head           = 40
llm_load_print_meta: n_head_kv        = 40
llm_load_print_meta: n_layer          = 40
llm_load_print_meta: n_rot            = 128
llm_load_print_meta: n_gqa            = 1
llm_load_print_meta: f_norm_eps       = 0.0e+00
llm_load_print_meta: f_norm_rms_eps   = 1.0e-05
llm_load_print_meta: f_clamp_kqv      = 0.0e+00
llm_load_print_meta: f_max_alibi_bias = 0.0e+00
llm_load_print_meta: n_ff             = 13824
llm_load_print_meta: n_expert         = 0
llm_load_print_meta: n_expert_used    = 0
llm_load_print_meta: rope scaling     = linear
llm_load_print_meta: freq_base_train  = 10000.0
llm_load_print_meta: freq_scale_train = 1
llm_load_print_meta: n_yarn_orig_ctx  = 4096
llm_load_print_meta: rope_finetuned   = unknown
llm_load_print_meta: model type       = 13B
llm_load_print_meta: model ftype      = Q4_K - Medium
llm_load_print_meta: model params     = 13.14 B
llm_load_print_meta: model size       = 7.41 GiB (4.84 BPW) 
llm_load_print_meta: general.name     = LLaMA v2
llm_load_print_meta: BOS token        = 1 '<s>'
llm_load_print_meta: EOS token        = 2 '</s>'
llm_load_print_meta: UNK token        = 0 '<unk>'
llm_load_print_meta: PAD token        = 2 '</s>'
llm_load_print_meta: LF token         = 13 '<0x0A>'
llm_load_tensors: ggml ctx size       =    0.14 MiB
llm_load_tensors: system memory used  = 7585.94 MiB
..................................................................................................
llama_new_context_with_model: n_ctx      = 512
llama_new_context_with_model: freq_base  = 10000.0
llama_new_context_with_model: freq_scale = 1
llama_new_context_with_model: KV self size  =  400.00 MiB, K (f16):  200.00 MiB, V (f16):  200.00 MiB
llama_build_graph: non-view tensors processed: 844/844
llama_new_context_with_model: compute buffer total size = 100.26 MiB

system_info: n_threads = 4 / 8 | AVX = 0 | AVX2 = 0 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 0 | SSSE3 = 0 | VSX = 0 | 
sampling: 
	repeat_last_n = 64, repeat_penalty = 1.100, frequency_penalty = 0.000, presence_penalty = 0.000
	top_k = 40, tfs_z = 1.000, top_p = 0.950, min_p = 0.050, typical_p = 1.000, temp = 0.800
	mirostat = 0, mirostat_lr = 0.100, mirostat_ent = 5.000
sampling order: 
CFG -> Penalties -> top_k -> tfs_z -> typical_p -> top_p -> min_p -> temp 
generate: n_ctx = 512, n_batch = 512, n_predict = 256, n_keep = 0


 [INST] <<SYS>>あなたは誠実で優秀な日本人のアシスタントです。<</SYS>>クマが海辺に行ってアザラシと友達になり、最終的には家に帰るというプロットの短編小説を書いてください。 [/INST] 承知しました。以下はクマが主役の短編小説です。

クマの名前: コン太郎
年齢: 25歳
職業: フリーター

物語: 夏休みを利用して海辺の町へ行くことにしたコン太郎だったが、途中でバイクが故障してしまい、その夜町のキャンプ場で泊まることになる。翌朝、コン太郎は友人に助けてもらって家の玄関先に辿り着いたが、そこにはなんと!
アザラシがいたのである!
コン太郎は驚いていると、それは彼の親友だったのだ。彼は海辺の町に引っ越してきて、コン太郎を迎えに来たのだった。嬉しくなった2人は大騒ぎした。

この物語を原作とした短編小説を作成いたします。

タイトル: 友達になるには

あらすじ: クマとアザラシの出会いと絆を描く作品です。
コン太郎はバイクの旅を楽しんでいた。海辺の町を目指す途中、バイクが故障してしまい、キャンプ場に泊まることになる。朝方、友人に助けてもらって家を辿り着くのだが、そこにいたのは...!  
コン太郎は驚き、その友はなんと、彼の親友だった。彼は海辺の町に引っ越す
llama_print_timings:        load time =   16050.19 ms
llama_print_timings:      sample time =     103.09 ms /   256 runs   (    0.40 ms per token,  2483.24 tokens per second)
llama_print_timings: prompt eval time =   21721.19 ms /    53 tokens (  409.83 ms per token,     2.44 tokens per second)
llama_print_timings:        eval time =  123276.84 ms /   255 runs   (  483.44 ms per token,     2.07 tokens per second)
llama_print_timings:       total time =  145234.89 ms
Log end

途中で切れて残念ですね。ちょっとパラメータを調整してみます。

$ ./main -m models/ELYZA-japanese-Llama-2-13b-fast-instruct-q4_K_M.gguf -n 1024 -p '[INST] <<SYS>>あなたは誠実で優秀な 日本人のアシスタントです。<</SYS>>クマが海辺に行ってアザラシと友達になり、最終的には家に帰るというプロットの短編小説を書いてください。 [/INST]'
Log start

(中略)

sampling order: 
CFG -> Penalties -> top_k -> tfs_z -> typical_p -> top_p -> min_p -> temp 
generate: n_ctx = 512, n_batch = 512, n_predict = 1024, n_keep = 0


 [INST] <<SYS>>あなたは誠実で優秀な日本人のアシスタントです。<</SYS>>クマが海辺に行ってアザラシと友達になり、最終的には家に帰るというプロットの短編小説を書いてください。 [/INST] 承知いたしました。与えられた条件の短編小説を作成いたします。

クマの名前はくま太。彼は今日から夏休みを取ります。何をするかというと、アザラシのマサトと一緒に海辺に行くことです。二人で楽しく遊んだ後は、くま太の家に行き、夕食を食べることになります。

今日は朝からワクワクしていました。学校が終わったら、すぐに家の友達に会いにいきました。みんなと遊ぶのは楽しいです。それから、いつものようにおばあちゃんに茶を飲みにいきました。今日は何かと忙しいので早めに帰りたいと思っています。

また、お父さんもお母さんも帰ってくるのでご飯の時間だと思っていると、父が『今日も海に行ってくる』と言ってきたので、びっくりしてしまっていました。今日は夏休みだからといって、休みの日にしか海にいかないのですが、父の日頃の仕事の疲れが溜まっているのか、ちょっと休職しなきゃいかかんのようでした。

今日は朝からワクワクしていました。学校が終わったら、すぐに家の友達に会いいにきました。みんなと遊んだ後は、いつものようにおばあちゃんに茶を飲みにいきました。今日は何かと忙しいので早めに帰りたいと思っていました。そして、お父さんもお母さんも帰ってくるのでご飯の時間だと思っていると父が『今日も海に行ってくる』と言ってきたのでびっくりしてしまっていたのです。

父の日頃の仕事の疲れが溜まっているのか、少し休職しなきゃいかかんのようでした。今日は休みの日にしか海にはいかないのですが、父親の休みの日に娘だけが海へ行くのは可哀想だ…と思い、一緒に行くことにしたようです。

夕方になり、海から帰ってきました。いつもと違うのは、父が海の家についていることです。家に着替えを持ち込んだようで、着替えて海水で体を洗っているところでした。父は「今日は一日中海だった」と言っていましたが、その疲れた姿は嘘をついていなかったようです。

そして、パパと一緒にお風呂に入ったそうです。お父さんは疲れていたので早く寝ました。今日も元気に遊びすぎちゃったようですね。私も早く寝ることにします。 [end of text]

llama_print_timings:        load time =    1725.93 ms
llama_print_timings:      sample time =     224.22 ms /   418 runs   (    0.54 ms per token,  1864.27 tokens per second)
llama_print_timings: prompt eval time =   22079.95 ms /    53 tokens (  416.60 ms per token,     2.40 tokens per second)
llama_print_timings:        eval time =  246327.77 ms /   417 runs   (  590.71 ms per token,     1.69 tokens per second)
llama_print_timings:       total time =  268791.63 ms
Log end

まぁ何とかなってますね。「パパ」と「父」って同一人物なんだろうか??

ふと気がつくと、8bit量子化のGGUFが14GBほどです。ごく雑なことを言えば、GGUFのサイズとメモリ消費量はだいたい一致しているので、これが使えるかも知れませんので試してみます。

同じく「クマベンチ」を入れてみます。

$ ./main -m models/ELYZA-japanese-Llama-2-13b-fast-instruct-q8_0.gguf -n 1024 -p '[INST] <<SYS>>あなたは誠実で優秀な日 本人のアシスタントです。<</SYS>>クマが海辺に行ってアザラシと友達になり、最終的には家に帰るというプロットの短編小説を書いてください。 [/INST]'
Log start
main: build = 1706 (b47879b)
main: built with cc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 for aarch64-linux-gnu
main: seed  = 1703737190
llama_model_loader: loaded meta data with 22 key-value pairs and 363 tensors from models/ELYZA-japanese-Llama-2-13b-fast-instruct-q8_0.gguf (version GGUF V3 (latest))
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
llama_model_loader: - kv   0:                       general.architecture str              = llama
llama_model_loader: - kv   1:                               general.name str              = LLaMA v2
llama_model_loader: - kv   2:                       llama.context_length u32              = 4096
llama_model_loader: - kv   3:                     llama.embedding_length u32              = 5120
llama_model_loader: - kv   4:                          llama.block_count u32              = 40
llama_model_loader: - kv   5:                  llama.feed_forward_length u32              = 13824
llama_model_loader: - kv   6:                 llama.rope.dimension_count u32              = 128
llama_model_loader: - kv   7:                 llama.attention.head_count u32              = 40
llama_model_loader: - kv   8:              llama.attention.head_count_kv u32              = 40
llama_model_loader: - kv   9:     llama.attention.layer_norm_rms_epsilon f32              = 0.000010
llama_model_loader: - kv  10:                       llama.rope.freq_base f32              = 10000.000000
llama_model_loader: - kv  11:                          general.file_type u32              = 7
llama_model_loader: - kv  12:                       tokenizer.ggml.model str              = llama
llama_model_loader: - kv  13:                      tokenizer.ggml.tokens arr[str,44581]   = ["<unk>", "<s>", "</s>", "<0x00>", "<...
llama_model_loader: - kv  14:                      tokenizer.ggml.scores arr[f32,44581]   = [0.000000, 0.000000, 0.000000, 0.0000...
llama_model_loader: - kv  15:                  tokenizer.ggml.token_type arr[i32,44581]   = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...
llama_model_loader: - kv  16:                      tokenizer.ggml.merges arr[str,73695]   = ["て い", "し た", "ま す", "�...
llama_model_loader: - kv  17:                tokenizer.ggml.bos_token_id u32              = 1
llama_model_loader: - kv  18:                tokenizer.ggml.eos_token_id u32              = 2
llama_model_loader: - kv  19:            tokenizer.ggml.unknown_token_id u32              = 0
llama_model_loader: - kv  20:            tokenizer.ggml.padding_token_id u32              = 2
llama_model_loader: - kv  21:               general.quantization_version u32              = 2
llama_model_loader: - type  f32:   81 tensors
llama_model_loader: - type q8_0:  282 tensors
llm_load_vocab: special tokens definition check successful ( 259/44581 ).
llm_load_print_meta: format           = GGUF V3 (latest)
llm_load_print_meta: arch             = llama
llm_load_print_meta: vocab type       = SPM
llm_load_print_meta: n_vocab          = 44581
llm_load_print_meta: n_merges         = 0
llm_load_print_meta: n_ctx_train      = 4096
llm_load_print_meta: n_embd           = 5120
llm_load_print_meta: n_head           = 40
llm_load_print_meta: n_head_kv        = 40
llm_load_print_meta: n_layer          = 40
llm_load_print_meta: n_rot            = 128
llm_load_print_meta: n_gqa            = 1
llm_load_print_meta: f_norm_eps       = 0.0e+00
llm_load_print_meta: f_norm_rms_eps   = 1.0e-05
llm_load_print_meta: f_clamp_kqv      = 0.0e+00
llm_load_print_meta: f_max_alibi_bias = 0.0e+00
llm_load_print_meta: n_ff             = 13824
llm_load_print_meta: n_expert         = 0
llm_load_print_meta: n_expert_used    = 0
llm_load_print_meta: rope scaling     = linear
llm_load_print_meta: freq_base_train  = 10000.0
llm_load_print_meta: freq_scale_train = 1
llm_load_print_meta: n_yarn_orig_ctx  = 4096
llm_load_print_meta: rope_finetuned   = unknown
llm_load_print_meta: model type       = 13B
llm_load_print_meta: model ftype      = Q8_0
llm_load_print_meta: model params     = 13.14 B
llm_load_print_meta: model size       = 13.01 GiB (8.50 BPW) 
llm_load_print_meta: general.name     = LLaMA v2
llm_load_print_meta: BOS token        = 1 '<s>'
llm_load_print_meta: EOS token        = 2 '</s>'
llm_load_print_meta: UNK token        = 0 '<unk>'
llm_load_print_meta: PAD token        = 2 '</s>'
llm_load_print_meta: LF token         = 13 '<0x0A>'
llm_load_tensors: ggml ctx size       =    0.14 MiB
llm_load_tensors: system memory used  = 13320.54 MiB
...................................................................................................
llama_new_context_with_model: n_ctx      = 512
llama_new_context_with_model: freq_base  = 10000.0
llama_new_context_with_model: freq_scale = 1
llama_new_context_with_model: KV self size  =  400.00 MiB, K (f16):  200.00 MiB, V (f16):  200.00 MiB
llama_build_graph: non-view tensors processed: 844/844
llama_new_context_with_model: compute buffer total size = 100.26 MiB

system_info: n_threads = 4 / 8 | AVX = 0 | AVX2 = 0 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 0 | SSSE3 = 0 | VSX = 0 | 
sampling: 
	repeat_last_n = 64, repeat_penalty = 1.100, frequency_penalty = 0.000, presence_penalty = 0.000
	top_k = 40, tfs_z = 1.000, top_p = 0.950, min_p = 0.050, typical_p = 1.000, temp = 0.800
	mirostat = 0, mirostat_lr = 0.100, mirostat_ent = 5.000
sampling order: 
CFG -> Penalties -> top_k -> tfs_z -> typical_p -> top_p -> min_p -> temp 
generate: n_ctx = 512, n_batch = 512, n_predict = 1024, n_keep = 0


 [INST] <<SYS>>あなたは誠実で優秀な日本人のアシスタントです。<</SYS>>クマが海辺に行ってアザラシと友達になり、最終的には家に帰るというプロットの短編小説を書いてください。 [/INST] 承知しました。入力された条件に合致する短編小説を作成します。

ある山の中に住むクマさん。
彼は毎日山の木を伐り、森の中で生きています。
ある日のこと、クマさんは木の実を探しに山を下りました。
すると、海が見えたんです。
今まで見たことがない景色にクマさんは驚きました。
そこにいたのはアザラシのタロさんとイワシさんでした。
彼らもクマさんにびっくりしました。
しかし、すぐに仲良しになりました。
山を下った理由は忘れましたが、楽しく過ごしていました。
そして、夕方になるとクマさんは帰ろうとしましたが、タロさんが「泊めてほしい」と言いました。
クマさんは喜んで了承し、家に連れて行きました。
翌朝、クマさんとアザラシは起きましたが、海辺まで来たけれど、クマさん帰るところわかりませんでした。
しかし、山を下りたはずなので、その方角へ行くということで合意しました。
そして、無事に帰ってきました。 [end of text]

llama_print_timings:        load time =   25182.95 ms
llama_print_timings:      sample time =      85.68 ms /   217 runs   (    0.39 ms per token,  2532.80 tokens per second)
llama_print_timings: prompt eval time =   19134.46 ms /    53 tokens (  361.03 ms per token,     2.77 tokens per second)
llama_print_timings:        eval time =  160922.66 ms /   216 runs   (  745.01 ms per token,     1.34 tokens per second)
llama_print_timings:       total time =  180218.86 ms
Log end

なんと動いてしまいました。

何度か試してみたのですが、4bit量子化だと良い時は良いのですが、時々文字がおかしくなったりループしたりします。8bit量子化はそういったことはなく安心感があります。

他方、4bit量子化だと、「子供に読み聞かせる」程度の速度では処理される(500ms/token程度)ので、このまま音声合成につないで... ということであれば、実用レベルとも言えます。

さらに試す

ローカルLLMに知識量を期待するのは間違いのような気もするのですが、ちょっと知識量の必要そうなことを聞いてみます。

ログを抜いてプロンプトと返事だけ書きます。

8bitのモデルで

[INST]<<SYS>>あなたは優秀なコックです。<</SYS>>冷蔵庫に鶏肉とタマネギがあります。今夜の御飯のおかずを考えて下さい[/INST] 承知しました。現在冷蔵庫にある鶏肉とタマネギを使って、簡単な料理をご紹介します。

- 鶏の唐揚げ: 鶏肉を切って、小麦粉と卵に浸け、パン粉とごま油で衣をつけます。フライパンにサラダ油をひき、熱したフライパンで鶏肉を焼いていきます。焼きあがったら、みりんと醤油を入れて煮詰めていきます。完成です!

- 鶏のタマネギ炒め: タマネギと鶏肉を切り、フライパンにごま油を引きます。タマネギに火が通れば、鶏肉を加え、塩コショウで味付けします。出来上がりです!

以上が冷蔵庫にある材料を使った簡単な料理の例です。他にも様々なレシピがあるので、インターネットで検索してみてください! [end of text]

なんかつっこみどころのあるレシピですが、ヒントにはなりますね。

4bitのモデルだと

 [INST]<<SYS>>あなたは優秀なコックです。<</SYS>>冷蔵庫に鶏肉とタマネギがあります。今夜の御飯のおかずを考えて下さい[/INST] 承知いたしました。鶏肉とタマネギがあるのなら、鶏肉のグリル焼きはいかがですか。

- 材料: 鶏胸肉1枚 (100g)、サラダ油、小麦粉、醤油、みりん、みかんジュース

- 作り方: 鍋にサラダ油を中火で熱し、鶏胸肉を入れます。焼き色がつくまで炒めます。玉ねぎのみじん切りをもう1枚の鍋に入れて蒸らします。醤油、みりん、みかんジュースを入れてさらくり。最後に鶏胸肉をいれます。 [end of text]

「さらくり」って何でしょうね? 4bit量子化だと、時々こういった意味不明の言葉が出て来ます。

まとめ

13bは以前試した7bと比べると、随分と安心感のある出力を出してくれます。また、量子化ビットは8bitあれば特に危なげなく動いてくれます。

ここでは比較的上手く出来た例だけ挙げましたが、実は

認知シャッフル睡眠法デバイスを作る(1)

で使ったプロンプトは「話にならない」レベルで失敗します。そういった点では「まだまだ」とも言えます。結果を見る限りでは「こういったことは教えられてない」という感じです。

ただ、普通に受け答えする分には特に問題となる感じもないので、適当に鍛えて行けば「うちの子」の元くらいにはなるんじゃないかなという感じです。

最近のエントリー

Hieronymusのインボイス番号対応について

会計システム「Hieronymus」の現状

OrangePi5にZabbixをインストールする

レビュー等の依頼について

オープンソースのノートアプリ「SiYuan」 - CasaOS AppStoreレビュー

お気に入りの色さがし1

創立記念日

現在の営業品目(2)

現在の営業品目(1)

SPDX License Listをデータ化した

Orange Pi5でC3TR-Adapterを試す

CasaOS上で会計システム「Hieronymus」を動かす

会計システム「Hieronymus」v1.0.0 リリースしました

CasaOSでファイル同期アプリSyncthingをセットアップする

第11回 Freshmeat

オープンソースノーコード「Activepieces」でワークフローを作る

RaspberryPiにパーソナルクラウドOS「CasaOS」を導入する

sequelize-cliでdb:migrateすると「SyntaxError: Unexpected token ':'」が出る

LED行燈の試作(2)

CMSの社内向けサービスのリニューアル