15年ぐらいのパソコンで生成AIは果たして動くのか?
おはようございます.15年ぐらいのパソコンで生成AIは果たして動くのか?試してみた結果、ギリ動くという事が分かったのだけど、全く持って使えないという事も判明しました.プロンプトを投げて、最初の一文字が返ってくるのに3分かかりその後1文字ずつ30秒毎に表示されていくのでレスポンスが全て完了するのに10分ぐらいは軽くかかります.
これでは使えないので現行のパソコン環境にモデルを落としてきて、プロンプトを投げた結果.1分ほどで全文のレスポンスが返ってきました、これなら使い物になるなと思う反面、仕事中に裏で動かすのは負荷的に如何なものかと思ったり…
生成AIモデルを使って何をしようとしているかと言えば前回記載した通り、自分が之まで書いてきた記事を要約して紹介文としてレスポンスで返してもらう、その紹介文を使用してXやその他のSNSにポストするような仕組みを作ろうとしています.
その前段階としてローカルパソコンで動作可能かどうかを先日の休みに試していました.因みに試したソースコードを貼っときますね.動かすには事前にCUDAを入っている事とモデルを落としてきている事などが必要です(Windowsの場合).
import sys
from llama_cpp import Llama
from jinja2 import Template
# Windowsターミナルで文字化け対策
sys.stdout.reconfigure(encoding="utf-8")
# モデルロード
model_path = "models/Meta-Llama-3-8B-Instruct.Q5_0.gguf"
llm = Llama(model_path=model_path, n_gpu_layers=-1, n_ctx=600)
# 対話ログ保存ファイル
log_file = "chat_history.txt"
# jinja2テンプレート
chat_template = """{% set rule = "ルール: 以下の会話では必ず日本語で回答してください。" %}
{{ bos_token + '<|start_header_id|>system<|end_header_id|> ' + rule + '<|eot_id|>' }}
{% for message in messages %}
{% set content = '<|start_header_id|>' + message['role'] + '<|end_header_id|> ' + message['content'] | trim + '<|eot_id|>' %}
{{ content }}
{% endfor %}
{% if add_generation_prompt %}
{{ '<|start_header_id|>assistant<|end_header_id|> ' }}
{% endif %}"""
print("=== 日本語対話モード ===")
print("終了するには exit と入力してください。\n")
messages = []
while True:
user_input = input("あなた: ")
if user_input.lower() == "exit":
print("対話終了")
break
# ユーザーの発言を messages に追加
messages.append({"role": "user", "content": user_input})
# プロンプト生成
template = Template(chat_template)
prompt = template.render(messages=messages, bos_token="<s>", add_generation_prompt=True)
# モデル呼び出し
output = llm(prompt, max_tokens=200)
text = output["choices"][0]["text"]
# バイト列ならUTF-8変換
if isinstance(text, bytes):
text = text.decode("utf-8", errors="replace")
print("アシスタント:", text)
# メッセージとして追加(次のやり取りでコンテキスト維持)
messages.append({"role": "assistant", "content": text})
# ログに保存
with open(log_file, "a", encoding="utf-8") as f:
f.write(f"ユーザー: {user_input}\n")
f.write(f"アシスタント: {text}\n\n")
明日へ続く