🏠️Top Page

🖊️おもしろき こともなき世をおもしろく 住みなすものは 心なりけり.

⏩️AIで今後どうなるだろうな.自然言語処理で指示出し出来てきた今日.

おはようございます.何だか梅雨明けした休日にGeminiCliでコードを生成しています.仕事ではまだ自分はChatに分からない事を質問するぐらいの事しかしていないのだけども絶対にCliなどで作業すると時間短縮になるのは間違いです(仕事でも導入しているのですが自分は使用していない).

休日に作業するときはコパイロットとGeminiを使用して開発しているのです、どちらも無料版なのだけど自分は無料板で事足りています.

因みにコパイロットとGemini、どちらが優秀かという問いに関しては今のところコパイロットの方が優秀なソースコードを書いてくれるというイメージが強いです.有料版ではカーソルやデビィンなどが優秀らしいけども余裕資金があんま無いので試していない.

お金に余裕があればいろいろと試したいことはあります.例えばグラボ(グラフィックボード)を取り替えて機械学習の学習をローカルで試してみたいなどがあります.

この頃思うのだけど、何かとこの業界は移り変わりが激しいのと新しい技術を学ぶときにたまに技術投資が必要になります.昔はオープンソース的な感じだったけどこのIT業界ビックテックはお金を取り出して来ています.

その中でMETA社?だけがオープンソースでいろいろと提供してくれていてとても有り難いです.それでもやっぱそれを動かす端末の推奨環境という物があるので古いPCだと動かなかったりします.

今後、Llm(大規模言語モデル)は容量が小さくなっていくということとローカル端末で動かすのが当たり前になる時代が来るそうです.

明日へ続く

⏩️GeminiCliを使ってみました、まぁまぁ使えるかもしれない.

おはようございます.GeminiCliを使ってみました、まぁまぁ使えるかもしれないというのが第一印象です、ただデザイン修正には使えそうにない.デザインを提示すればその通りになおしてくれると思うのだけどテキストだけの指示ではなかなか難しいと感じました.

ディレクトリ配下にあるソースコードを読ます場合は下記のようなプロンプトを一度打つとスムーズに機能追加してくれるので良いですよ.

コードベースを把握して

最初にこの言葉をGeminiに投げることでどんな機能のプログラムコードなのか把握します.これがないと駄目な訳でもないだけどもスムーズに指示出しが出来ます.

特定のコードに対して修正やらを書けたい場合は@(アットマーク)を入力するとソースコードの候補が表示されるので選択をしてプロンプトを指示を出すと良いです.

あとGeminiCliを終了する場合は下記のコマンドを打てば終了します.

/exit

!を入力しls -aなどと入力するとMacの場合は階層のファイル一覧が表示されます的なことも出来ます.

ともあれ、ジェミナイ(ジェミニ)は無料で使用できるトークンも他よりも比較的に多いので自分としてはかなり嬉しいです、休日の個人開発はこれで何とか頑張っていけそうです.

明日へ続く

⏩️よさこい祭り動画検索サイトに今ごろ本腰とテコ入れを行うことに.

おはようございます.よさこい祭り動画検索サイトに今ごろ本腰とテコ入れを行うことにして先日しごと終わってから対応を行っていました.自分には三本の柱があってその中の一本によさこい祭り動画検索サイトが存在します.

ただ、三本の柱で一番ぐらぐら揺れるよさこい祭り動画検索サイトを何とかアクセス数を増やしたいなと思いいろいろとアクセス数を増やす為の対策を現在試みています.

三本の柱で一番稼ぎが少ないので回転数を上げていろいろとアイデアを取り入れて改善していこうと思っています.

殆どの試みはSNSを使用したものになりますが、数撃ちゃ当たる的に対応を行い、また、よさこい祭り動画検索サイトのデザインも簡素化してなるべく表示を早く表示するように対応を行っています.

因みにEC管理サイトの構築はまだ表面上だけで進んでいませんが気長にお待ち下さい.収益化が出来そうなものから改善や何やらしているので後回しになっているだけです.

明日へ続く

⏩️映画、F1/エフワンを観てきました.オチは言わないけどわかると思う.ネタあり🍣

おはようございます.映画、F1/エフワンを観てきました.オチは言わないけどわかると思うブラビが出ている映画ってそうなるよね的な結末だった.ブラビファンには圧倒的に嬉しいストーリーになっていると思います.

ただ、映画をいっぱい観てきて思うのはまずまずな映画かなと思いました、フォーミュラーワンの迫力あるレースなどは伝わってきたのだけど、ストーリーがちょっと薄いかもしれないと思いました.3時間あって殆どがレース場面が多いので何回もレースを観せられるとちょっと退屈かもしれない.

全体的には良い展開です、ただ、この頃見かけない昔ながらのアメリカ映画の王道も観てきた自分はもう少しスパイスが欲しかったかも逆に言えば今の20代とかには新鮮に感じるストーリー展開なのかも.

最後にちょっと辛口ですが悪くない映画です!

明日へ続く

⏩️目が覚めてから大体1時間ぐらいPCを付けてぼーっとしている時間がある

おはようございます.昨日はデススト2の発売日でした、まだ購入はしていません.

さて自分には目が覚めてから大体1時間ぐらいPCを付けてぼーっとしている時間がある、だいぶ前からだけど目が覚めてはいるけど、脳が回転していない時間帯があってその時間帯に何かしても頭に入ってこないので、ブログを書いたりXを見たりして早朝を過ごしている.

一時間ぐらい経過すると犬の散歩に連れて行く、そこで寝ぼけている脳が通常モードに切り替わる感じです.朝活している訳でもないだけども朝にタスクを消化している感じですね.

本なんかは朝食後、目を通したりしています.

リモートワークなので通勤がないので、朝食後から仕事までの時間を使えるのはメリットですね.こういう時間の使い道をリモートワークではない人が出来るようになるまでには、あと10年以上掛かると思います.

10年も経過すると自動運転車が普及しているようになると思うのでそれまではリモートワークの特権かと思います.

因みに自分は4時起きが基本です、寝るのもその分早いのです、7時間は睡眠時間に当てています.こういうリズムになったのは結構、犬の散歩という事柄が大きく影響しています.

明日へ続く

⏩️それ、勝手な決めつけかもよ?だれかの正解にしばれない「解釈」の練習をパラめくして.

おはようございます.それ、勝手な決めつけかもよ?だれかの正解にしばれない「解釈」の練習をパラめくして、なるほどこの人と言わんとしている所に共感しました.

結構、名前や言葉で最初から先入観を持っている気がしていて、言葉(ニュアンス)を変えるだけで解釈(捉え方)は大きく変わるだなって思いました.コロナが深刻な時から時代が大きく変わってきているけども、どんな時代でも共通する話です.

この本を手にとってパラめくするだけでも、違った視線で物事を見えるようになると思います.特に凝り固まった考えになってきていたり、守り体制になってきている人にはこういう考え方もあるのかと思うだけで世の中変わってくると思います.

最後に冒頭に書かれていたニーチェの言葉を添えておきます.「事実というものは存在しない。存在するのは解釈だけである。」

明日へ続く

⏩️そう言えば昨日マイナンバーカードをiphoneに追加しましたが.

おはようございます.そう言えば昨日マイナンバーカードをiphoneに追加しました、追加方法などはこちらの記事には記載しませんがその代わりとして公式YOUTUBEの手順方法を貼っときますね.

ちょっと登録が面倒ですけど一度、追加することによりマイナポータルサイトに簡単にログイン出来るようになった所はとても良いなと感じました.

自分はたまに年金とかの確認や所得の額を見たりしているのでスマホで簡単にログイン出来るようになったのは結構大きいと思います.

また、これからスマホで出来ることが増えてくればマイナンバーカードの存在感は薄れていきそうな感じがしますが、個人経営の病院などでは恐らくマイナンバーカードや保険証がまだ必要な気がしています.

明日へ続く

⏩️金高堂の決済方法(支払い方法)がHPに記載されていないので困って調べました.

おはようございます.よく行く本屋さんに金高堂の山田店や朝倉店などがあるのだけども金高堂店のHPがシンプル過ぎてちょっと困っています.お店の地図や電話番号があるのは有り難いのだけども.決済方法が記載されていないのは、ちょっと困っています.

ニコニコ現金でお支払いが多いかとは思うものの、コロナ以降、高知県でも電子マネーなどで決済する方が増えてきている気がしています.

そんな中で一度、Xで決済方法を聞いた事があります、それ以降に決済方法が増えていたら申し訳ないけども金高堂へ行く皆さんがおそらく知りたい情報の上位にある決済方法は何があるかを記載します.

金高堂本店はお支払い方法はiD、各種💳️QUICPay、楽天Edy、dポイント、交通系ICカード、WAON、nanacoです、他の店舗もこちらは共通で使用可能かと思います.当然、現金決済はどの店舗でも出来ます.図書カードやクオカードは使用できます👍️.

調べていくと金高堂工科大学店はちょっと違うのか、こちらが最新の情報で各店舗、共通の話なのか微妙ですが情報を記載します.

ともあれ、金高堂さんがHPを更新して頂いて決済方法も記載していただければ有り難いなと思いました.それほど難しい話ではない気がしますが・・・.自分としての追加要望はpaypay決済を追加して頂きたいです、何せ日本国内でシェア率No1ですからね.お店側からすると決済手数料が気になるところなのかもですが・・・.

追伸:Xにお支払い方法が追加されたみたいです.Xをご参考に記事を再編集しています.

明日へ続く

⏩️負の連鎖ってあるだと思う.小さいことから大きな事まである世の中だけども.

おはようございます.負の連鎖ってあるだと思う.小さいことから大きな事まである世の中だけどもこれを断ち切るには仏教が良いじゃないかなって思っている.日本が戦後、復讐をしなかったのも仏教や宗教の根本的な考えが西洋文化とは違うからってのがあると思います.

負の連鎖、憎しみなどが生まれるのは仕方がない事だと思うだけども、それを許すというか消化させる力というかそういう物はなんか仏教が適している気がしていますとは言え、自分は仏教のことをよく知っている訳でもないだけども、何だろう日本人が持っている何か根底に根付いているものが戦後、大きな復讐もせずに今に至っているだと.

負の連鎖の渦中にいると思ったら足掻かずに、流れに身を任せるのも一つの手段かと思います、何が許せずにいるのかを心を沈めて考えることが大事になると思います.考えたり思い返して怒りや憎しみが沸々とわいてきた事が恐らく自身が許せずにいる事柄だと、それを許すというのは中々難しいことだけども、負の連鎖の中にいるともっと負が大きくなるので怒りや憎しみを手放すことが大事だと思います.

何故、負は巨大化していく戦争を見てわかると思うのだけども争えば闘うほど事態は悪くなり最終的に共倒れになります.すっと手放す事が出来れば良いのだけども、中々、難しい.

阿呆な権力者がはじめた事を止めるのは難しいという事を人は体験せずに理解する事ができる世の中になれば良いのにと思う今日このごろです.

明日へ続く

⏩️AIで記事を学習して新たな記事を生み出すにはお金が必要だと思っていたがそうでも.

おはようございます.AIで記事を学習して新たな記事を生み出すにはお金が必要だと思っていたがそうでもなくローカルPCでそこら辺に落ちているLlamaモデルを持ってきてチューニングすれば何とかなるじゃねぇという思いに至った.

実はあなたの手元にあるPCと、そこら中に「落ちている」オープンソースのAIモデル、特にLlama 3があれば、十分記事が生成できるんです。


ローカルAI記事生成は、もはや夢物語じゃない

「AIで記事生成」と聞くと、SFのような世界や、大企業だけが使える特権のように感じるかもしれません。しかし、今は違います。オープンソースの強力な言語モデル、特にMetaが公開したLlama 3の登場は、この常識を大きく覆しました。

Llama 3は、その性能の高さにもかかわらず、誰でも無料で利用できるという点が最大の魅力です。さらに、80億パラメータの8Bモデルであれば、最新のゲーミングPCとまではいかなくとも、ある程度の性能を持つPCであれば十分に動作します。これにより、高額なクラウドサービスを利用せずとも、自分のPCでAI記事生成の環境を構築することが現実的になりました。


なぜLlama 3があなたのPCと相性抜群なのか?

Llama 3がローカルPCでの記事生成に適している理由はいくつかあります。

  • 完全無料のオープンソース: 利用に費用がかからないため、予算を気にせずAIを試したり、本格的に導入したりできます。
  • 選べるモデルサイズ: Llama 3には様々なサイズのモデルがあり、PCのスペックに合わせて選べます。特に8Bモデルは、個人利用に最適なバランスを持っています。
  • 活発な開発者コミュニティ: 世界中の開発者がLlama 3を使った新しいツールや効率的なチューニング方法を日々共有しています。困ったときには助けを借りられる心強い味方です。
  • 「量子化」でさらに軽量に: モデルのサイズを大幅に小さくする「量子化」という技術を使えば、より少ないメモリでLlama 3を動かせるようになります。これにより、より多くのPCで利用の道が開けます。

あなたのPCを「記事生成マシン」に変える秘訣

もちろん、いきなりプロのライター並みの記事をAIに書かせるのは難しいかもしれません。しかし、ちょっとした工夫で「何とかなる」レベルの記事生成は十分に可能です。

  1. 少量のデータでファインチューニング: 大量の記事データは不要です。あなたが書きたい記事のテーマやスタイルに合った、質の良い記事を数十〜数百程度集めてLlama 3を学習(ファインチューニング)させれば、その分野に特化した記事生成能力が格段に向上します。
  2. プロンプト(指示文)の工夫: AIへの「指示の出し方」は非常に重要です。具体的で明確なプロンプトを与えることで、チューニングが完璧でなくても、驚くほど質の高い記事が生成できます。これはまるで、優秀なアシスタントに的確な指示を出すようなものです。
  3. 効率的な学習方法の活用: 「LoRA(Low-Rank Adaptation)」のような効率的なファインチューニング手法を使えば、少ないGPUメモリでも短時間でモデルを特定のタスクに最適化できます。

あなたの創造性が、今、AIで加速する

かつては一部の専門家や企業にしか手の届かなかったAIによる記事生成が、今やあなたのPCで実現できる時代になりました。これはまさにAI技術の「民主化」です。

とまぁそういう訳なので何とかしてみますが、ファインチューニングにどれぐらい時間がかかるのかが未知数だったりする.

ファインチューニングPythonコード

以下のPythonコードは、Llama 3モデルをロードし、提供されたテキスト記事でファインチューニング(LoRA使用)を実行し、結果を保存します。 上記の入力値は、このコードに自動的に反映されます。 このコードをPythonファイル(例: `finetune_llama.py`)として保存し、実行してください。

import os
import torch
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training, TaskType

# GPUの利用可能性を確認
print("GPUが利用可能か確認中...")
if not torch.cuda.is_available():
    print("GPUが見つかりません。Fine-tuningにはGPUが強く推奨されます。")
    # GPUがない場合は、ここでスクリプトを終了するか、CPUモードで続行するか選択できます。
    # exit("GPUがないため終了します。")
else:
    print(f"GPUが利用可能です: {torch.cuda.get_device_name(0)}")

# --- 1. モデルとトークナイザーのロード ---
# Llama 3モデルのパスを指定します。Hugging Faceのモデル名(例: "meta-llama/Llama-3-8B")
# またはローカルにダウンロードしたモデルのパスを指定してください。
MODEL_NAME = "meta-llama/Llama-3-8B" # ユーザーが入力したパスがここに挿入されます

print(f"モデルとトークナイザーをロード中: {MODEL_NAME}")

# 4bit量子化設定 (GPUメモリの節約に役立ちます)
# bnb_4bit_compute_dtypeは、Ampere以降のNVIDIA GPUに推奨されるbfloat16を使用しています。
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4", # NF4 (NormalFloat4) 量子化タイプ
    bnb_4bit_compute_dtype=torch.bfloat16 
)

# トークナイザーをロード
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, trust_remote_code=True)
# Llama 3はデフォルトでbos_tokenを付与しないことがあるため、明示的に追加。
# また、padding_side='right'はLlamaモデルに推奨される設定です。
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"

# モデルをロードし、量子化設定を適用し、自動的にGPUにマッピングします。
model = AutoModelForCausalLM.from_pretrained(
    MODEL_NAME,
    quantization_config=bnb_config,
    device_map="auto", # 利用可能なデバイス(GPU)に自動的にモデルを分散
    trust_remote_code=True # リモートコードの実行を許可
)
print("モデルロード完了。")

# k-bit学習用にモデルを準備 (PEFTライブラリのため)
# gradient_checkpointingを有効にすることで、メモリ使用量をさらに削減できます。
model.gradient_checkpointing_enable()
model = prepare_model_for_kbit_training(model)
print("k-bit学習用にモデルを準備しました。")

# --- 2. データセットの準備 ---
# あなたのテキスト記事ファイルが格納されているディレクトリを指定します。
# 例: 'your_article_data/' の中に 'article1.txt', 'article2.txt', ... と置かれている場合
DATA_DIR = "./your_article_data/" # ユーザーが入力したパスがここに挿入されます

print(f"データセットをロード中: {DATA_DIR}")

# 'text'形式でデータセットをロードします。指定されたディレクトリ内のすべての.txtファイルを読み込みます。
# 各ファイルが1つのエントリとして扱われます。
try:
    dataset = load_dataset('text', data_files={'train': os.path.join(DATA_DIR, '*.txt')})
    print(f"データセットのサンプル数: {len(dataset['train'])}")
except Exception as e:
    print(f"データセットのロード中にエラーが発生しました。ディレクトリとファイル形式を確認してください: {e}")
    exit("データセットロード失敗。")

# データセットをトークン化する関数
# 長い記事をモデルの最大入力長に分割します。
def tokenize_function(examples):
    # Llama 3の最大入力長は通常8192ですが、お使いのGPUのVRAMに合わせて調整してください。
    # ここでは一般的な値として2048を設定しています。
    max_length = 2048 
    # truncate=Trueで最大長を超えるテキストを切り捨てます。
    return tokenizer(examples["text"], truncation=True, max_length=max_length)

# データセットをトークン化します。
# num_procはCPUコア数に応じて並列処理を行い、処理を高速化します。
tokenized_dataset = dataset.map(
    tokenize_function,
    batched=True,
    num_proc=os.cpu_count(),
    remove_columns=["text"] # 元のテキスト列は学習に不要になるため削除します。
)
print("データセットのトークン化が完了しました。")

# --- 3. PEFT (LoRA) の設定 ---
# LoRA (Low-Rank Adaptation) は、元のモデルの重みをフリーズし、
# 小さなアダプター層を追加して学習させることで、効率的にファインチューニングを行います。
# これにより、GPUメモリの使用量を抑えつつ、高い性能を実現できます。
lora_config = LoraConfig(
    r=16, # LoRAのランク。値を大きくすると表現力が増すが、メモリ消費も増える。
    lora_alpha=32, # LoRAのスケーリング係数。rの2倍程度が推奨されることが多いです。
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], # LoRAを適用する層。Llamaモデルで一般的な層。
    bias="none", # バイアスを学習しない設定。
    lora_dropout=0.05, # ドロップアウト率。過学習を防ぐために設定します。
    task_type=TaskType.CAUSAL_LM, # タスクタイプを因果言語モデルに設定。
)

# モデルにLoRAアダプターを追加します。
model = get_peft_model(model, lora_config)
print("モデルにLoRAアダプターを適用しました。")
model.print_trainable_parameters() # 学習可能なパラメータ数を確認します。

# --- 4. 学習の実行 ---
# 学習済みモデルを保存するディレクトリ
OUTPUT_DIR = "./llama3_finetuned_model/" # ユーザーが入力したパスがここに挿入されます

# 学習の設定
training_args = TrainingArguments(
    output_dir=OUTPUT_DIR,
    num_train_epochs=3, # エポック数。データセットのサイズと希望する精度に応じて調整してください。
    per_device_train_batch_size=1, # GPUあたりのバッチサイズ。VRAMが少ない場合は1に設定。
    gradient_accumulation_steps=4, # 勾配を蓄積するステップ数。実質的なバッチサイズは per_device_train_batch_size * gradient_accumulation_steps になります。
    optim="paged_adamw_8bit", # 8bit AdamWオプティマイザを使用し、メモリ効率を向上させます。
    save_steps=500, # 500ステップごとにモデルを保存します。
    logging_steps=100, # 100ステップごとにログを出力します。
    learning_rate=2e-4, # 学習率。
    fp16=True, # 混合精度学習を有効化 (GPUが対応している場合)。VRAM削減と高速化に寄与します。
    max_steps=-1, # num_train_epochsに基づいて学習します。
    group_by_length=True, # 同じ長さのシーケンスをグループ化し、パディングを削減します。
    lr_scheduler_type="cosine", # 学習率スケジューラーのタイプ。
    warmup_ratio=0.03, # ウォームアップ比率。
    report_to="none", # レポート先を指定しない (wandbなどを使用しない場合)。
)

# トレーナーの初期化
# data_collatorは、モデルの入力形式に合わせてデータを整形します。
trainer = Trainer(
    model=model,
    train_dataset=tokenized_dataset["train"],
    args=training_args,
    data_collator=lambda data: {
        'input_ids': torch.stack([f['input_ids'] for f in data]),
        'attention_mask': torch.stack([f['attention_mask'] for f in data]),
        'labels': torch.stack([f['input_ids'] for f in data]), # 因果言語モデルでは、入力自体がラベルとなります。
    },
)

# 学習の開始
print("Fine-tuningを開始します...")
trainer.train()
print("Fine-tuningが完了しました。")

# --- 5. 学習済みモデルの保存 ---
# LoRAアダプターのみを保存します。これにより、ファイルサイズが小さく、効率的に管理できます。
trainer.save_model(OUTPUT_DIR)
print(f"学習済みLoRAアダプターが '{OUTPUT_DIR}' に保存されました。")

# 保存したアダプターを使って推論を行う方法の例 (コメントアウトされています):
# このコードは、ファインチューニング後にモデルをロードして推論を行うための参考例です。
# from peft import PeftModel
#
# # 元のモデルをロード (学習時と同じ量子化設定を使用します)
# base_model = AutoModelForCausalLM.from_pretrained(
#     MODEL_NAME,
#     quantization_config=bnb_config,
#     device_map="auto",
#     trust_remote_code=True
# )
#
# # 保存したLoRAアダプターを元のモデルに結合します。
# peft_model = PeftModel.from_pretrained(base_model, OUTPUT_DIR)
#
# # 推論モードに設定します。
# peft_model.eval()
#
# # テキスト生成の例
# prompt = "ローカルPCでのLlama 3ファインチューニングの利点とは"
# inputs = tokenizer(prompt, return_tensors="pt").to("cuda") # 入力をGPUに移動
#
# with torch.no_grad(): # 勾配計算を無効化し、メモリ使用量を削減
#     outputs = peft_model.generate(
#         **inputs,
#         max_new_tokens=200, # 生成する新しいトークンの最大数
#         do_sample=True, # サンプリングによる生成を有効化
#         top_p=0.9, # Nucleusサンプリングの閾値
#         temperature=0.7, # 生成の多様性を制御する温度
#         eos_token_id=tokenizer.eos_token_id # 終了トークンID
#     )
# print("\n--- 生成されたテキスト ---")
# print(tokenizer.decode(outputs[0], skip_special_tokens=True))

明日へ続く