
はじめに
Intel Core Ultra 200番台(第二世代)には 内蔵GPU(iGPU)としてArcグラフィックスが載っています。そのArcグラフィックスを使って中規模の言語モデルを動かしてみました。使用したPC
Copilot+PCに分類されるノートPCです。「THIRDWAVE F-14LN5LA メモリ32GB搭載」
Windows 11 Home Core Ultra 5 228V (Lunar Lake) Intel Arc 130V GPU 32GBメモリ
NPUも載っていますが今回はiGPUを使いました。
言語モデルを動かす
「llama.cpp Portable Zip」というのを使って 「gemma-3-12b-it-GGUF 」を動かしました。「llama-cpp-ipex-llm-2.3.0b20250605-win.zip」をこちらからダウンロードしました。使い方はこちら。「gemma-3-12b-it-GGUF 」はこちらからダウンロードしました。
このようなコマンドで実行しました。
llama-server -m ./models/ggml-org/gemma-3-12b-it-Q4_K_M.gguf -c 2048 -n 1024 -ngl 99
確かにiGPUが使われていそうです。
load_tensors: offloading 48 repeating layers to GPU load_tensors: offloading output layer to GPU load_tensors: offloaded 49/49 layers to GPU
Pythonスクリプト
import gradio as gr from openai import OpenAI # llama.cppのOpenAI互換APIサーバーに接続 client = OpenAI( base_url="http://localhost:8080/v1", # llama.cppサーバーのURL api_key="dummy" # llama.cppでは実際のAPIキーは不要 ) def translate_text(text, direction): """ テキストを翻訳する関数 direction: "en_to_jp" (英語→日本語) または "jp_to_en" (日本語→英語) """ if direction == "en_to_jp": system_content = "あなたは英語から日本語への翻訳に特化した優秀なAIアシスタントです。回答は翻訳文にとどめ、日本語に翻訳するだけです。" user_content = f"次の英語を日本語に翻訳して下さい。\n{text}" else: # jp_to_en system_content = "あなたは日本語から英語への翻訳に特化した優秀なAIアシスタントです。回答は翻訳文にとどめ、英語に翻訳するだけです。" user_content = f"次の日本語を英語に翻訳して下さい。\n{text}" prompt = [ { "role": "system", "content": system_content, }, { "role": "user", "content": user_content, } ] # llama.cppサーバーにリクエストを送信 stream = client.chat.completions.create( model="gemma-3-12b-it-Q4_K_M", messages=prompt, stream=True, max_tokens=1024, temperature=0.0 ) result = "" for chunk in stream: if chunk.choices[0].delta.content is not None: result += chunk.choices[0].delta.content yield result def translate_en_to_jp(text): """英語から日本語への翻訳""" yield from translate_text(text, "en_to_jp") def translate_jp_to_en(text): """日本語から英語への翻訳""" yield from translate_text(text, "jp_to_en") # Gradioインターフェースの構築(タブ形式) with gr.Blocks(title="双方向翻訳アプリ") as demo: gr.Markdown("# 双方向翻訳アプリ") gr.Markdown("英語⇄日本語の翻訳ができます。") with gr.Tab("英語 → 日本語"): with gr.Row(): en_input = gr.Textbox( lines=10, max_lines=40, label="英語", placeholder="英語のテキストを入力してください..." ) jp_output = gr.Textbox( lines=10, max_lines=40, show_copy_button=True, label="日本語" ) with gr.Row(): en_to_jp_btn = gr.Button("翻訳", variant="primary") en_clear_btn = gr.Button("クリア", variant="secondary") with gr.Tab("日本語 → 英語"): with gr.Row(): jp_input = gr.Textbox( lines=10, max_lines=40, label="日本語", placeholder="日本語のテキストを入力してください..." ) en_output = gr.Textbox( lines=10, max_lines=40, show_copy_button=True, label="英語" ) with gr.Row(): jp_to_en_btn = gr.Button("翻訳", variant="primary") jp_clear_btn = gr.Button("クリア", variant="secondary") # イベントハンドラーの設定 en_to_jp_btn.click( fn=translate_en_to_jp, inputs=en_input, outputs=jp_output ) jp_to_en_btn.click( fn=translate_jp_to_en, inputs=jp_input, outputs=en_output ) # クリアボタンの設定 en_clear_btn.click( fn=lambda: "", outputs=en_input ) jp_clear_btn.click( fn=lambda: "", outputs=jp_input ) # Enterキーでも翻訳できるように設定 en_input.submit( fn=translate_en_to_jp, inputs=en_input, outputs=jp_output ) jp_input.submit( fn=translate_jp_to_en, inputs=jp_input, outputs=en_output ) # アプリケーションの起動 if __name__ == "__main__": demo.launch()
実行速度
llama-bench -m ./models/ggml-org/gemma-3-12b-it-Q4_K_M.gguf
gemma3 12B Q4_K - Medium
6.79 GiB
11.77 B
SYCL
99
pp512
169.51 ± 9.89
gemma3 12B Q4_K - Medium
6.79 GiB
11.77 B
SYCL
99
tg128
6.00 ± 0.41
