NetBSD/amd64でllama.cppを使ってみる

はじめに

生成AIが私の知りたいことに答えてくれたことはないのだが、手元の端末のみで動くのであれば、遊ぶのには良いかもしれない。 pkgsrcには含まれていないが、pkgsrc-wipには、llama.cppが含まれている。 llama.cppのうち、C++で書かれた部分は正常にビルドでき、動くようである。 モデルのフォーマットを変換するためのPythonスクリプトは、 いろいろと現在のpkgsrcに含まれていないパッケージが必要であり動かない。 ただ、現在のllama.cppで扱うことのできるGGUF形式のモデルファイルをそのままダウンロードすることができるので、 使ってみるには、Pythonスクリプトは不要である。

どのモデルが動かせるか?

ChatGPTのようなチャットのできるモデルを使ってみたいと考えている。 動かそうとしているPCは、CPUとしてAMD Ryzen 7 5800Uを搭載した RAM 16GBのHP Envy 13である。

用意されているLLaMA 2のモデルでは、70B Q8_0のモデル(llama-2-70b-chat.Q8_0.gguf)が最大であるようだった。 これは、 https://huggingface.co/TheBloke/Llama-2-70B-Chat-GGUF によると、76GB程度のRAMが必要ということなので、到底利用することはできない。

13B Q8_0のモデル(llama-2-13b-chat.Q8_0.gguf)は、 https://huggingface.co/TheBloke/Llama-2-13B-chat-GGUF によると、16GB程度のRAMが必要とのことで、 試してみたが、スラッシングを起こして、動作が非常に緩慢であり実用できなかった。

と言うことで、 https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF にあるRAMを 7GB弱利用する7B Q4_K_Mのモデル(llama-2-7b-chat.Q4_K_M.gguf)を試してみると 実用的な速度で動作させることができた。 このモデルは「medium, balanced quality - recommended」とされている。

モデルを動かす準備をする

llama.cppをビルドするには、以下のようにすれば良い。

# cd /usr/pkgsrc/wip/llama.cpp
# make install

これで、/usr/pkg/bin/llama-cliというコマンドがインストールされる。

また、自分のホームディレクトリーに、llama.cpp用の作業用ディレクトリーを用意し、 その中に必要なものを置くようにする。

$ mkdir -p ~/llama.cpp/models
$ cd ~/llama.cpp/models
$ ftp https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q4_K_M.gguf

対話形式で利用したいが、最初に前提条件を毎回手入力するのは面倒である。 以下のような決まり文句を~/llama.cpp/prompt.txtとして用意する。

$ cat ~/llama.cpp/prompt.txt
You (Alice) are a helpful assistant. Please answer a human (User)'s questions.
User: Hello.
Alice:

この決まり文句を最初は以下のように書いていたのだが、なぜか全く反応が返って来なかった。

You (Alice) are a helpful assistant. Please answer a human (User)'s questions.
User: Hello. I am glad to see you.
Alice:

モデルを動かす

llama.cppの配布物に含まれているexamples/chat.shを参考に、 以下のように起動させた。

$ cd ~/llama.cpp
$ llama-cli -m ./models/llama-2-7b-chat.Q4_K_M.gguf -c 512 -b 1024 -n 256 --repeat_penalty 1.0 -t 8 --color -i -r "User:" --in-prefix " " -f prompt.txt
Log start
main: build = 0 (unknown)
main: built with gcc (nb2 20240221) 12.3.0 for x86_64--netbsd
main: seed  = 1718791141
llama_model_loader: loaded meta data with 19 key-value pairs and 291 tensors from ./models/llama-2-7b-chat.Q4_K_M.gguf (version GGUF V2)
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              = 4096
llama_model_loader: - kv   4:                          llama.block_count u32              = 32
llama_model_loader: - kv   5:                  llama.feed_forward_length u32              = 11008
llama_model_loader: - kv   6:                 llama.rope.dimension_count u32              = 128
llama_model_loader: - kv   7:                 llama.attention.head_count u32              = 32
llama_model_loader: - kv   8:              llama.attention.head_count_kv u32              = 32
llama_model_loader: - kv   9:     llama.attention.layer_norm_rms_epsilon f32              = 0.000001
llama_model_loader: - kv  10:                          general.file_type u32              = 15
llama_model_loader: - kv  11:                       tokenizer.ggml.model str              = llama
llama_model_loader: - kv  12:                      tokenizer.ggml.tokens arr[str,32000]   = ["<unk>", "<s>", "</s>", "<0x00>", "<...
llama_model_loader: - kv  13:                      tokenizer.ggml.scores arr[f32,32000]   = [0.000000, 0.000000, 0.000000, 0.0000...
llama_model_loader: - kv  14:                  tokenizer.ggml.token_type arr[i32,32000]   = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...
llama_model_loader: - kv  15:                tokenizer.ggml.bos_token_id u32              = 1
llama_model_loader: - kv  16:                tokenizer.ggml.eos_token_id u32              = 2
llama_model_loader: - kv  17:            tokenizer.ggml.unknown_token_id u32              = 0
llama_model_loader: - kv  18:               general.quantization_version u32              = 2
llama_model_loader: - type  f32:   65 tensors
llama_model_loader: - type q4_K:  193 tensors
llama_model_loader: - type q6_K:   33 tensors
llm_load_vocab: special tokens cache size = 259
llm_load_vocab: token to piece cache size = 0.1684 MB
llm_load_print_meta: format           = GGUF V2
llm_load_print_meta: arch             = llama
llm_load_print_meta: vocab type       = SPM
llm_load_print_meta: n_vocab          = 32000
llm_load_print_meta: n_merges         = 0
llm_load_print_meta: n_ctx_train      = 4096
llm_load_print_meta: n_embd           = 4096
llm_load_print_meta: n_head           = 32
llm_load_print_meta: n_head_kv        = 32
llm_load_print_meta: n_layer          = 32
llm_load_print_meta: n_rot            = 128
llm_load_print_meta: n_embd_head_k    = 128
llm_load_print_meta: n_embd_head_v    = 128
llm_load_print_meta: n_gqa            = 1
llm_load_print_meta: n_embd_k_gqa     = 4096
llm_load_print_meta: n_embd_v_gqa     = 4096
llm_load_print_meta: f_norm_eps       = 0.0e+00
llm_load_print_meta: f_norm_rms_eps   = 1.0e-06
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: f_logit_scale    = 0.0e+00
llm_load_print_meta: n_ff             = 11008
llm_load_print_meta: n_expert         = 0
llm_load_print_meta: n_expert_used    = 0
llm_load_print_meta: causal attn      = 1
llm_load_print_meta: pooling type     = 0
llm_load_print_meta: rope type        = 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_ctx_orig_yarn  = 4096
llm_load_print_meta: rope_finetuned   = unknown
llm_load_print_meta: ssm_d_conv       = 0
llm_load_print_meta: ssm_d_inner      = 0
llm_load_print_meta: ssm_d_state      = 0
llm_load_print_meta: ssm_dt_rank      = 0
llm_load_print_meta: model type       = 7B
llm_load_print_meta: model ftype      = Q4_K - Medium
llm_load_print_meta: model params     = 6.74 B
llm_load_print_meta: model size       = 3.80 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: LF token         = 13 '<0x0A>'
llm_load_tensors: ggml ctx size =    0.15 MiB
llm_load_tensors:        CPU buffer size =  3891.24 MiB
..................................................................................................
llama_new_context_with_model: n_ctx      = 512
llama_new_context_with_model: n_batch    = 512
llama_new_context_with_model: n_ubatch   = 512
llama_new_context_with_model: flash_attn = 0
llama_new_context_with_model: freq_base  = 10000.0
llama_new_context_with_model: freq_scale = 1
llama_kv_cache_init:        CPU KV buffer size =   256.00 MiB
llama_new_context_with_model: KV self size  =  256.00 MiB, K (f16):  128.00 MiB, V (f16):  128.00 MiB
llama_new_context_with_model:        CPU  output buffer size =     0.12 MiB
llama_new_context_with_model:        CPU compute buffer size =    70.50 MiB
llama_new_context_with_model: graph nodes  = 1030
llama_new_context_with_model: graph splits = 514

system_info: n_threads = 8 / 16 | AVX = 1 | AVX_VNNI = 0 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | AVX512_BF16 = 0 | FMA = 1 | NEON = 0 | SVE = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | MATMUL_INT8 = 0 | LLAMAFILE = 1 |
main: interactive mode on.
Reverse prompt: 'User:'
Input prefix: ' '
sampling:
        repeat_last_n = 64, repeat_penalty = 1.000, 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 -> temperature
generate: n_ctx = 512, n_batch = 1024, n_predict = 256, n_keep = 1


== Running in interactive mode. ==
 - Press Ctrl+C to interject at any time.
 - Press Return to return control to the AI.
 - To return control without starting a new line, end your input with '/'.
 - If you want to submit another line, end your input with '\'.

 You (Alice) are a helpful assistant. Please answer a human (User)'s questions.
User: Hello.
Alice: Hello! How can I assist you today? Is there anything you need help with?

ここで「 Hello! How can I assist you today? Is there anything you need help with?」の部分が、モデルの生成した部分である。 また、本来はここで"User: "と表示されるのを期待しているのだが、なかなか表示されない。 表示されることもある。 良く理由は分かっていない。 ただ、"User: "が表示されなくても、利用はできる。

指示をしてみると、それっぽい返答をしてくれる。

 Tell me the largest city in Asia.
Alice: The largest city in Asia is Tokyo, Japan. It has a population of over
38 million people and is known for its vibrant culture, cutting-edge technology,
and historic landmarks such as the Tokyo Tower and the Meiji Shrine. Would you
like to know anything else?

「Tell me the largest city in Asia.」の部分が私がキーボードから入力した部分である。

かりんとうの製造特許を探す

ALIC (独立行政法人 農畜産業振興機構)のウェブサイトには、いろいろおもしろい記事が掲載されているのだが、 そもそも、私はそれが検索で引っ掛かるような検索キーワードで検索することもないので、 自分で能動的に読みに行かないと、読む機会がなくなってしまう。

砂糖のついての記事を読んでいると、かりんとうについての記事が2つあった。 かりんとうと砂糖日本の味「かりんとう」である。 いずれにも、過去にかりんとうの製造方法についての特許があったことが記載されている。

かりんとうと砂糖には、以下のように記載されている。

昭和41年  農林省指令41A第2581号を以って公認組合として認可され、全国油菓工業組合として新発足する。
 某企業が、かりん糖の特許を出願したのを機に組合にその「かりん糖の製造特許権」が譲渡され、この権利を公平適切に運用することで各企業が組合に加入した。

日本の味「かりんとう」には、以下のように記載されている。

 当組合の組合員しか知らない、かりんとうのビックリする話があります。

 江戸の昔からある「かりんとう」に「製造特許」が存在していたということです。いきさつはいろいろあったと思いますが、戦後景気が回復し、いろいろなお菓子が作られるようになりました。当時下請けをしていたあるかりんとう業者が、親会社からの厳しい要求の対応として「穀物を練り発酵させて棒状に切り、油で揚げた物に砂糖をかけた菓子」の製造特許を申請したところ、昭和41年にその特許が認められたのです。「これは大変」と各メーカーが騒いだのですが、結局その特許権を組合に譲渡することで落ち着き、昭和55年に特許権が消滅するまで当組合が保持し、かりんとうメーカーは特許使用料を当組合に支払っていました。

これらを解釈すると、昭和41年(1966年)に特許が成立し、昭和55年(1980年)まで特許は有効であったということであろう。 日本の特許は出願から20年間保護されるのだったと思うので、出願は昭和35年(1960年)にされているはずである。 あるいは、20年間を満了せずに、年金を払わずに消滅したのかもしれない。

特許情報プラットフォームで全文検索してみたが、どうやら1970年くらいに出願された以降のものしか 全文検索はできないように見える。 また、出願日1960年に絞り込み、FIをA23に絞り込んで見て行っても、それらしい特許を見付けることはできなかった。

そこで、最近のかりんとうの製造方法についての特許から引用されているのではないかと考え探すと、おそらくこれではないかというものを見付けることができた。

それは、特許3873479「かりんとうの製造方法」において、 引用調査データとして引用されている「特公昭40-002849 (かりんとうの製造方法)」である。これは、特許0470216なはずなのだが、この特許の内容は特許情報プラットフォームには登録されていないようである。

しかし、この特許は昭和38年2月11日に出願されており、昭和41年に特許が成立していてもおかしくはないが、昭和55年に期間満了となったとは思えない。 経過情報も参照できないので、いつ特許0470216が成立したのか、失効したかも分からない。 出願人は荒井公平という人だが、どの企業がこの特許の背景にいるのかも分からなかった。この名前の方は、和菓子では有名な方のようだが、同一人物かも分からない。

ハトリ・マーシャル株式会社を探る (その後)

前回は、ハトリ・マーシャルが短資会社になったところまでを書いた。 今回は、その後の話題に触れたい。

短資会社となった後に、ハトリ・マーシャルが大きく活躍したような記事はあまり見付けることができなかった。 そもそも短資会社や外為ブローカーについての情報が少ないだけで、本当は違うのかもしれないが…。

以下では。トピックスとして何点か挙げておきたい。

ユーロ円・ドル円先物からの撤退

Japan Times 1992年10月15日 9面には、「Firms to pull out of futures market」という記事でユーロ円・ドル円先物からの撤退をするという記事が出ている。

ソフトウエア開発

求人情報にも、ソフトウエア開発の要員が挙げられていた。英文の求人広告にもData Processingのできる人を求めるという記載があった。 財界人 8(8)(312) 1995年7月刊 57ページには、コスマックというソフトウエア開発会社と共同で、「アプレシア」という金利スワップ・オプション取引支援ソフトウエアを PC用に開発したことが報じられている。 以前のものは、大型ワークステーションを使っていたと書かれており、求人広告にあったDEC VAXを指しているのかもしれない。

レポ取引への参入と停滞、再開

日経公社債情報1997年6月9日 5ページには、「債券レポ仲介業者 新規参入、手数料引き下げで攻撃」とう言う記事の中で、

これまでレポ仲介へ参入はしたものの開店休業状態だった外為ブローカーのハトリ・マーシャルも取引を本格化する構えだ。

と記載されている。

減資

1999年(平成11年)3月11日の官報には、資本金を3億円から1億6千5百万円に減資する公告が出ている。

さらにこの先に日短エクスコと合併し、ハトリ・マーシャルは消えてしまう。

ハトリ・マーシャル株式会社を探る(短資会社へ)

前回は、短資会社の変遷を書くだけになってしまったが、 今回は元々の目的であったハトリ・マーシャル株式会社について、触れたい。

羽鳥商会からハトリ・マーシャルへ

日本語版Wikipediaの短資会社の項には、以下のように書かれている、

1993年8月、外為ブローカーのハトリ・マーシャル(羽鳥商会と英MWマーシャル社の合弁会社。東京銀行が大株主)が、「7社目の短資会社」として、無担保コール(先日付取引)の仲介業務に参入し、短資協会にも準会員として加入した。約30年ぶりの新規参入だったが、同社は1999年3月、日短エクスコ(現在の日短キャピタルグループ)に買収された。

ハトリ・マーシャルと日短エクスコの合併の公告は、平成11年8月26日の官報に掲載されている。その中で、合併の日は、平成11年9月27日とされている。合併公告以前に合併しているとは考えにくいので、少なくとも日本語版Wikipediaの短資会社の項の日短エクスコとの合併の時期は間違いであると考えて良さそうである。

今度は、ハトリ・マーシャルがどうできたかを調べたい。 「相互銀行」1986年 36(5) 9ページには、福原 基夫 氏(トウキョウフォレックス株式会社 監査役)による「東京外為市場の現状と展望」という記事に、 ブローカーの国際化の略歴として、ハトリ・マーシャルの略歴が掲載されている。

②ハトリ・マーシャル(株)
昭和30年4月、羽鳥・中野商会として営業開始(32年8月、羽鳥商会と改称)。60年2月、M・W・マーシャル(本社ロンドン、56年6月南商店[30年4月営業開始]を買収して東京支店開設。60年2月廃業)と資本・業務提携の上、称号変更。

これを西暦に換算して並べると、以下のようになる。

1955年(昭和30年)4月
羽鳥・中野商会として営業開始。
1957年(昭和32年)8月
羽鳥商会と改称。
1985年(昭和60年)2月
M. W. Marshall社と資本・業務提携して、ハトリ・マーシャルと改称。

これの掲載された相互銀行誌は1986年のものなので、1993年の無担保コール翌日物の仲介業務への算入と日本語版Wikipediaに書かれている内容はまだ起きていない。 つまり外為ブローカーであった段階と考えられる。

ここでは、ハトリ・マーシャルは羽鳥商会が改称されたものとされていて、日本語版Wikipediaにあるような羽鳥商会とM. W. マーシャルの合弁会社として設立されたものではないように書かれている。 しかし、1985年(昭和60年)2月にハトリ・マーシャルができたというのは間違っていないかもしれない。昭和60年4月8日の官報で、羽鳥商会とM. W. マーシャル・アンド・カンパニーの代わりに、 ハトリ・マーシャルが貸金業法上の短資会社に指定されている。

ハトリ・マーシャルが「称号変更」したというのは、「外為相場とディーリング (総合金融取引シリーズ2) 山本 圭民 著 (東京銀行) 経済法令研究会 刊の61ページ目にも記載されている。 ただ、ここにも、東京銀行が出資しているという記述はないようである。

ハトリ・マーシャルが羽鳥商会が社名を変更した会社でなかった場合には、どうにも調べようがないような気がする。 羽鳥商会が解散したという公告は、官報には掲載されていないようである。また、現時点の国税庁法人番号掲載サイトにも 羽鳥商会という企業は掲載されていない。 もちろん、いずれも社名を羽鳥商会から変更しているとすれば、追うことはできない情報ではある。

ハトリ・マーシャル

私がアクセスできるデータベースで、最初にハトリ・マーシャルが現れたのは、Japan Times 1987年6月23日 14面の求人広告記事であった。 「HATORI-MARSHALL COMPNANY LIMITED」としての英文の求人広告である。 また、1988年8月1日の14面にも、「HAROTI-MARSHALL CO., LTD.」名義の英文の求人広告が掲載されている。

日本語の求人広告も、この後に2つ掲載されている。 1つは1989年7月10日の13面に掲載されてり、もう1つは、1991年7月22日の13面に掲載されている。 ここには会社概要として、共通して以下のように記載されている。

会社概要
日英合弁の国際金融業(株主:東京銀行・マーシャル社ロンドン)。東京と海外市場を結んで、内外一流銀行の外国為替(ドル・マルクなど)、外貨資金(ユーロダラーなど)取引の仲介(ブローキング)。

これにより、大株主かどうかははっきりしないが、東京銀行が株主であったことが分かる。 また、羽鳥商会がもし社名を変更してハトリ・マーシャルになっていなかったとしても、特筆すべき株主として存在はしていなかったのも分かる。 社名にハトリとありながら、特筆すべき株主でないということはあり得なさそうである。 これも、羽鳥商会がハトリ・マーシャルになったということの傍証になっているように思われる。

1989年7月10日の求人広告を掲載しておく。

短資会社へ

短資会社としてのハトリ・マーシャルは、官報にあるように羽鳥商会として昭和58年の時点で既に指定を受けていた。 つまり、貸金業法上の短資会社には、その指定制度の最初から羽鳥商会は存在していたということである。 証券取引法施行令での短資会社の指定は、昭和57年の時点でも短資会社6社のみである。

官報を検索してみても、羽鳥商会(株式会社羽鳥商会 東京都千代田区大手町二丁目六番二号)が登場するのは、1976年(昭和51年)2月12日、9月24日に小切手に関する公示催告が最初である。 1982年(昭和57年)7月3日には、定款変更をして株式の譲渡を制限できるようにした旨の公告が出ている。 しかし、いずれも、羽鳥商会の当時の事業を知る手掛りにはならなさそうである。

短資会社の主要な業務であるコール市場への参入は、Japan Times 1989年(平成元年)8月14日の9面に記事が「Hatori-Marshall ready to enter call-loadn field」として掲載されている。 短資協会が1962年に設立されて以来の新しい参入者であり、無担保コールローンから参入すると書かれている。

短資協会のウェブサイトの沿革には、ハトリ・マーシャルは1993年(平成5年)8月16日から1999年(平成11年)3月31日の間に 準会員であったと記載されているが、コール市場へ参入すると同時に短資協会へ加入した訳ではなかったというだけのことであろう。

長くなってしまったので、ハトリ・マーシャルになってからのその後は次回書きたい。

ハトリ・マーシャル株式会社を探る (短資会社の変遷)

短資会社の歴史に興味を持っているのだが、短資会社は上場していないし、業界団体である短資協会のウェブサイトは、robots.txtに

  User-agent: *
  Disallow:

と書かれているせいで、Google検索では短資協会は直接は現れない。Bingはそんなものは無視して検索対象にしているようだ。

短資会社の歴史については、日本語版Wikipediaの短資会社外為ブローカーの記事がやたらと詳しい。 それなりに参考文献も付けられているようであるから、それなりに信頼できそうな記事だが、肝心な短資会社や外為ブローカーの会社のプロファイルは良く分からない。 その中でも、ハトリ・マーシャル株式会社について、少し調べてみた。

短資会社は、現在では、貸金業法施行令(昭和五十八年政令第百八十一号)第一条の二(貸金業の範囲からの除外)第三号「主としてコール資金の貸付け又はその貸借の媒介を業として行う者で金融庁長官の指定するもの」および 金融商品取引法施行令(昭和四十年政令第三百二十一号)第一条の九(金融機関の範囲)第五号「主としてコール資金の貸付け又はその貸借の媒介を業として行う者のうち金融庁長官の指定するもの」で指定されている会社を指すようである。 金融商品取引法施行令で指定する会社は、金融庁告示第五十二号で公開されている。 つまり、上田八木短資株式会社、東京短資株式会社、セントラル短資株式会社の3社である。 貸金業法施行令の方は、官報から拾ってみる。

昭和58年10月31日の時点では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本割引短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • 株式会社羽鳥商会
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • エム・ダブリュー・マーシャル アンド カンパニー リミテッド
  • 日短エーピー株式会社

昭和60年4月8日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本割引短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エーピー株式会社

昭和60年9月30日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本割引短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エーピー株式会社
  • 株式会社メイタン・トラディション

昭和60年10月31日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本割引短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エーピー株式会社
  • 株式会社メイタン・トラディション
  • 上田ハーロー株式会社

昭和63年6月20日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エーピー株式会社
  • 株式会社メイタン・トラディション
  • 上田ハーロー株式会社

昭和63年10月28日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エーピー株式会社
  • 株式会社メイタン・トラディション
  • 上田ハーロー株式会社
  • 八木ユーロ株式会社

平成5年5月24日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エーピー株式会社
  • 株式会社メイタン・トラディション
  • 上田ハーロー株式会社
  • 八木ユーロ株式会社
  • 山根プレボン株式会社

平成8年5月2日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エクスコ株式会社
  • 株式会社メイタン・トラディション
  • 上田ハーロー株式会社
  • 八木ユーロ株式会社
  • 山根プレボン株式会社

平成12年3月31日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • 株式会社メイタン・トラディション
  • 山根プレボン株式会社
  • トウキョウフォレックス上田ハーロー株式会社
  • 日短八木ユーロ株式会社

平成13年4月2日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • セントラル短資株式会社
  • 八木短資株式会社
  • 株式会社メイタン・トラディション
  • 山根プレボン株式会社
  • トウキョウフォレックス上田ハーロー株式会社
  • 日短八木ユーロ株式会社

平成13年7月2日の改正では、

  • 上田八木短資株式会社
  • 東京短資株式会社
  • セントラル短資株式会社
  • 株式会社メイタン・トラディション
  • 山根プレボン株式会社
  • トウキョウフォレックス上田ハーロー株式会社
  • 日短八木ユーロ株式会社

平成14年1月15日の改正では、

  • 上田八木短資株式会社
  • 東京短資株式会社
  • セントラル短資株式会社
  • 株式会社メイタン・トラディション
  • 山根プレボン株式会社
  • トウキョウフォレックス上田ハーロー株式会社
  • 日短マネーマーケッツ株式会社

平成21年2月4日の改正では、

  • 上田八木短資株式会社
  • 東京短資株式会社
  • セントラル短資株式会社
  • 株式会社メイタン・トラディション
  • 山根タレットプレボン株式会社
  • トウキョウフォレックス上田ハーロー株式会社
  • 日短マネーマーケッツ株式会社

平成26年7月8日の改正では、

  • 上田八木短資株式会社
  • 東京短資株式会社
  • セントラル短資株式会社
  • 株式会社メイタン・トラディション
  • トウキョウフォレックス上田ハーロー株式会社
  • 日短マネーマーケッツ株式会社

令和元年10月1日の改正では、

  • 上田八木短資株式会社
  • 東京短資株式会社
  • セントラル短資株式会社
  • 株式会社トラディション日本
  • 上田東短フォレックス株式会社
  • 日短マネーマーケッツ株式会社

のように変遷しているようだ。 肝心のハトリ・マーシャル株式会社については、後日続きを書きたい。

第二地銀協ワイドサービス

ウェブ上には何でも情報があるのかなと思うこともあるのだが、私の知りたい情報はないことが多い。 Googleで結果が出ず、Bingは全く違うものを提示し、ChatGPTもGoogle Geminiも全く合っていることを言わないことが多い。 WWWが普及する前の情報というのは、こうも失なわれてしまうものなのだろう。

子供のころ、相互銀行であった第二地方銀行協会加盟行のATM(CD; キャッシュディスペンサーだったかもしれない)に行くと、「第二地銀協ワイドサービス」という表示がされていた。 おそらく、1995年から1998年くらいのことである。 だが今Googleで第二地銀協ワイドサービスと検索すると、 たった1件しか結果がない。しかも、2chのログであるようである。 第二地方銀行協会のウェブサイトを見ると、第二地銀協キャッシュサービス(SCS)とは書かれているが、 第二地銀協ワイドサービスとは書かれていない。

今は、第二地方銀行協会の機関誌である「リージョナルバンキング」誌は廃刊になってしまっているようである。 だが、リージョナルバンキング誌は、創刊から2000年までは国立国会図書館の個人向けデジタル化資料送信サービスで閲覧することができる。 閲覧できるリージョナルバンキング誌を見ても、SCSは「第二地銀協CD全国ネットサービス」(リージョナルバンキング 1989年 39(5) 72ページ)あるいは「第二地銀協キャッシュサービス」(リージョナルバンキング 1999年 49(3) 76ページ) という記述はあっても、「第二地銀協ワイドサービス」と言う単語を見付けることはできなかった。

別の方向で第二地銀協ワイドサービスについての広告を探してみると、「大蔵省職員録 平成7年版」の113ページ目に広告が掲載されていた。これも、国立国会図書館の個人向けデジタル化資料送信サービスで閲覧することができる。 確かに存在していたのを確認できた。 こんなロゴだったかは全く覚えていないが…。

pkgsrc/mail/dkimproxyを使ってみたが、受信時の動作は、現在の用途には合わないようだった

とある過去に利用者のいたドメインを所有しているのだが、相当に雑な運用だったようで、いまだにSPAM以外の電子メールが来るし、 そのドメインの存在しないアカウントを装った電子メールが多く送信されているようだった。 しばらく、キャッチオール設定をして受信してみて気付いたのである。

と言うことで、少なくともSPF、DKIM、DMARCを設定して、SPFで-all、DMARCでpct=100;p=reject;にすれば、ちゃんと運用しているメールサーバーでは このドメインを装った電子メールは受信しないでくれるはずである。

最初、あまり利用されている実績がないようだったので、折角だから使おうと言うことで、pkgsrc/mail/dkimproxyを利用してみた。 私はpkgsrc/mail/postfixを利用しているので、今回問題を解消できなかった受信時の検証については、基本的には、 公式ドキュメントであるSetting up the inbound proxy with Postfix のように設定し、私のように1台のサーバーで複数のドメインの電子メールを扱っている場合には、 DKIM/Domainkeys signing via DKIMproxyにあるように sender_mapを利用すれば良い。設定は分かりやすい。

しかし、dkimproxyの方法である、電子メールの受信前にdkimproxyの稼働するlocalhost:10025へ送って、Postfixのlocalhost:10026に送り返してもらうという運用は、 pkgsrc/mail/opendmarcでは、localhostから来た電子メールであると認識されてしまうのを止めることはできないようだった。

SPFの検証はpkgsrc/mail/py-policyd-spfで、DKIMの署名と検証はpkgsrc/mail/opendkimで、DMARCの検証はpkgsrc/mail/opendmarcで、という運用に落ち付いた。

NetBSD/amd64でllama.cppを使ってみる

はじめに 生成AIが私の知りたいことに答えてくれたことはないのだが、手元の端末のみで動くのであれば、遊ぶのには良いかもしれない。 pkgsrcには含まれていないが、pkgsrc-wipには、llama.cppが含まれている。 llama.cppのうち、C++で書かれた部分は正...