<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Python - Uranos8685のおもちゃ箱</title>
	<atom:link href="https://toybox.uranos8685.mydns.jp/category/python/feed/" rel="self" type="application/rss+xml" />
	<link>https://toybox.uranos8685.mydns.jp</link>
	<description>個人的な備忘録やゲームレビュー等のブログです</description>
	<lastBuildDate>Sun, 27 Sep 2026 16:01:00 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://toybox.uranos8685.mydns.jp/wp-content/uploads/2025/04/cropped-AE86-2-32x32.png</url>
	<title>Python - Uranos8685のおもちゃ箱</title>
	<link>https://toybox.uranos8685.mydns.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<atom:link rel='hub' href='https://toybox.uranos8685.mydns.jp/?pushpress=hub'/>
<site xmlns="com-wordpress:feed-additions:1">252152419</site>	<item>
		<title>Pythonプログラムの関数の関係性をLLMに説明させてみる</title>
		<link>https://toybox.uranos8685.mydns.jp/791/python%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%ae%e9%96%a2%e6%95%b0%e3%81%ae%e9%96%a2%e4%bf%82%e6%80%a7%e3%82%92llm%e3%81%ab%e8%aa%ac%e6%98%8e%e3%81%95%e3%81%9b%e3%81%a6%e3%81%bf%e3%82%8b/</link>
					<comments>https://toybox.uranos8685.mydns.jp/791/python%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%ae%e9%96%a2%e6%95%b0%e3%81%ae%e9%96%a2%e4%bf%82%e6%80%a7%e3%82%92llm%e3%81%ab%e8%aa%ac%e6%98%8e%e3%81%95%e3%81%9b%e3%81%a6%e3%81%bf%e3%82%8b/#respond</comments>
		
		<dc:creator><![CDATA[Uranos8685]]></dc:creator>
		<pubDate>Sat, 26 Sep 2026 21:08:37 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[生成AI]]></category>
		<guid isPermaLink="false">https://toybox.uranos8685.mydns.jp/?p=791</guid>

					<description><![CDATA[<p>はじめに 　Pythonで大規模なプログラム（複数のpyに分けるようなもの）を書いていると、全体像が分かりにくくなることがあり、LLMを使ってうまく説明させられないかと思ったのが始まり。 　ちなみに、開発を始める前にOl [&#8230;]</p>
<p>The post <a href="https://toybox.uranos8685.mydns.jp/791/python%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%ae%e9%96%a2%e6%95%b0%e3%81%ae%e9%96%a2%e4%bf%82%e6%80%a7%e3%82%92llm%e3%81%ab%e8%aa%ac%e6%98%8e%e3%81%95%e3%81%9b%e3%81%a6%e3%81%bf%e3%82%8b/">Pythonプログラムの関数の関係性をLLMに説明させてみる</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">はじめに</h2>



<p class="wp-block-paragraph">　Pythonで大規模なプログラム（複数のpyに分けるようなもの）を書いていると、全体像が分かりにくくなることがあり、LLMを使ってうまく説明させられないかと思ったのが始まり。</p>



<p class="wp-block-paragraph">　ちなみに、開発を始める前にOllamaに単純にpyファイルを投げて試したが、当然失敗したorz</p>



<h2 class="wp-block-heading">仕組み（ざっくり）</h2>



<h3 class="wp-block-heading">下準備（静的解析）</h3>



<p class="wp-block-paragraph">　pyファイルをそのままLLMに投げてもいい解説が生成できないため、まずはじめにastモジュールを使ってソースを構造木に変換する。<br>　で、各pyファイルの中から関数、クラス、メソッドを抽出し、呼び出しを行っているコードをコレクトする。</p>



<p class="wp-block-paragraph">　呼び出し先の解決をするが、単純に名前で一致させようとすると、別ファイルや関数内にネストされた同名のものがあった場合、誤ったマッチングが発生する。そのため、呼び出している名前がどのファイルのどの関数のものかをPythonの探し方に近い方法で探す必要があり、これがなかなか難しい。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>呼び出しの形</th><th>特定の方法</th></tr></thead><tbody><tr><td>helper()</td><td>自分の中で定義された関数 → 同じモジュールの定義 → import した名前　の順に探す</td></tr><tr><td>self.method() / cls.method()</td><td>自分が属するクラスのメソッドを探す。なければ親クラスを遡る</td></tr><tr><td>super().method()</td><td>親クラス側から探す</td></tr><tr><td>mod.func() / pkg.mod.Class.method()</td><td>importの対応表で正式な名前に直し、プロジェクト内の定義と照らし合わせる</td></tr><tr><td>パッケージのinit.py 経由で公開された名前</td><td>init.pyのimportをたどって本来の定義まで行く</td></tr><tr><td>プロジェクト内で見つからなかったもの</td><td>print や pd.DataFrameなどは「外部の呼び出し」として分離する</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">関係性をグラフ化</h3>



<p class="wp-block-paragraph">　静的解析で取得した関数の一覧と、呼び出しの関係性を、そのままnetworkxの有向グラフに投入する。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>g = nx.DiGraph()
g.add_node(&quot;code_atlas.llm:LLMClient.chat&quot;)              # 点を追加
g.add_edge(&quot;code_atlas.llm:LLMClient.test_connection&quot;,   # 矢印を追加
           &quot;code_atlas.llm:LLMClient.chat&quot;)</code></pre></div>



<p class="wp-block-paragraph">　関数が数百個あると、全部を表示しても線が絡まって読めなくなるため、「指定した中心の関数から N 歩以内だけ」に絞り込む。<br>　幅優先探索という方法で、池に石を投げて波紋が広がるように、中心から近い関数等を順に調べていきます。</p>



<p class="wp-block-paragraph">　できあがったネットワーク図をpyvisを使ってHTML化し、st.iframeに突っ込んで描画させる。</p>



<h3 class="wp-block-heading">LLMに解説させる</h3>



<p class="wp-block-paragraph">　ソースコードと一緒に静的解析の結果を渡して、どの関数で何を呼び出しているかをLLMに分からせることで、推測で解説させない。<br>　また、チャットによる質問部分では、ソースコード全体をプロンプト内に埋め込むことは出来ないため、質問に関連するソースコードのみ（呼び出し元・先含む）を渡す。基本的にRAGは意味的類似度検索（ベクトル）を使うが、質問文に出てくる関数、ファイル名を正規表現で抽出することで、誤ったマッチングを減らしている。</p>



<h2 class="wp-block-heading">スクリーンショット</h2>



<p class="wp-block-paragraph">　テストで使ったLLMはQwen3.5-9B</p>



<h3 class="wp-block-heading">概要説明</h3>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4.png"><img fetchpriority="high" decoding="async" width="2505" height="1219" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4.png" alt="" class="wp-image-793" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4.png 2505w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4-300x146.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4-767x373.png 767w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4-1024x498.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4-1536x747.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4-2048x997.png 2048w" sizes="(max-width: 2505px) 100vw, 2505px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5.png"><img decoding="async" width="2514" height="1219" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5.png" alt="" class="wp-image-794" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5.png 2514w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5-300x145.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5-767x372.png 767w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5-1536x745.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5-1024x497.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5-2048x993.png 2048w" sizes="(max-width: 2514px) 100vw, 2514px" /></a></figure>



<h3 class="wp-block-heading">関係図をネットワークマップで図示（pyvis）</h3>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6.png"><img decoding="async" width="2492" height="1179" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6.png" alt="" class="wp-image-795" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6.png 2492w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6-300x142.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6-767x363.png 767w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6-1536x727.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6-1024x484.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6-2048x969.png 2048w" sizes="(max-width: 2492px) 100vw, 2492px" /></a></figure>



<h3 class="wp-block-heading">各pyファイルの概要</h3>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7.png"><img loading="lazy" decoding="async" width="2130" height="1156" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7.png" alt="" class="wp-image-796" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7.png 2130w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7-300x163.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7-767x416.png 767w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7-1024x556.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7-1536x834.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7-2048x1111.png 2048w" sizes="(max-width: 2130px) 100vw, 2130px" /></a></figure>



<h3 class="wp-block-heading">各関数の概要</h3>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8.png"><img loading="lazy" decoding="async" width="2176" height="1195" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8.png" alt="" class="wp-image-797" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8.png 2176w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8-300x165.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8-767x421.png 767w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8-1024x562.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8-1536x844.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8-2048x1125.png 2048w" sizes="(max-width: 2176px) 100vw, 2176px" /></a></figure>



<h3 class="wp-block-heading">チャットでLLMに解説させる</h3>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9.png"><img loading="lazy" decoding="async" width="2177" height="725" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9.png" alt="" class="wp-image-799" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9.png 2177w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9-300x100.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9-1024x341.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9-766x255.png 766w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9-1536x512.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9-2048x682.png 2048w" sizes="(max-width: 2177px) 100vw, 2177px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10.png"><img loading="lazy" decoding="async" width="2176" height="717" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10.png" alt="" class="wp-image-800" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10.png 2176w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10-300x99.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10-1024x337.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10-768x253.png 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10-2048x675.png 2048w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10-1536x506.png 1536w" sizes="(max-width: 2176px) 100vw, 2176px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11.png"><img loading="lazy" decoding="async" width="2173" height="716" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11.png" alt="" class="wp-image-801" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11.png 2173w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11-768x253.png 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11-300x99.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11-1024x337.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11-1536x506.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11-2048x675.png 2048w" sizes="(max-width: 2173px) 100vw, 2173px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12.png"><img loading="lazy" decoding="async" width="2190" height="735" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12.png" alt="" class="wp-image-802" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12.png 2190w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12-766x257.png 766w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12-300x101.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12-1024x344.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12-2048x687.png 2048w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12-1536x516.png 1536w" sizes="(max-width: 2190px) 100vw, 2190px" /></a></figure>



<h2 class="wp-block-heading">生成結果のサンプル</h2>



<p class="wp-block-paragraph">　別のページで公開している、タイムスタンプ付き歌詞データ作成ツールを読み込ませてみた結果。ソースコードはわざと消してます。<br>　肌感としては結構いい感じ。ただ、MTPデバイスのファイル読み取りについて、少し前にテストしてみたものの上手くいかず、MTP連携周りのボタンを消してアプリでは実行されないようにしていますが、使われていない機能であることを認識できていないようす。この辺りが限界かも🦆。<br>　まぁ、自分が使う分には充分かな。</p>



<div class="wp-block-file"><a id="wp-block-file--media-a265b8d9-f523-4ec1-bff4-d076004d04eb" href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/LRC_MAKER_Uranos8685_atlas.html">LRC_MAKER_Uranos8685_atlas.html</a><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/LRC_MAKER_Uranos8685_atlas.html" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-a265b8d9-f523-4ec1-bff4-d076004d04eb">ダウンロード</a></div>



<p class="wp-block-paragraph">　テストがパーペキじゃないのと、自分が欲しかったので作ったものなので、ソースコードはそのうち気が向いたら公開する…かも？</p><p>The post <a href="https://toybox.uranos8685.mydns.jp/791/python%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%ae%e9%96%a2%e6%95%b0%e3%81%ae%e9%96%a2%e4%bf%82%e6%80%a7%e3%82%92llm%e3%81%ab%e8%aa%ac%e6%98%8e%e3%81%95%e3%81%9b%e3%81%a6%e3%81%bf%e3%82%8b/">Pythonプログラムの関数の関係性をLLMに説明させてみる</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://toybox.uranos8685.mydns.jp/791/python%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%ae%e9%96%a2%e6%95%b0%e3%81%ae%e9%96%a2%e4%bf%82%e6%80%a7%e3%82%92llm%e3%81%ab%e8%aa%ac%e6%98%8e%e3%81%95%e3%81%9b%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">791</post-id>	</item>
		<item>
		<title>VSCodeでGitコミットメッセージの生成をLLMにさせる拡張機能（Commit Maker）</title>
		<link>https://toybox.uranos8685.mydns.jp/784/vscode%e3%81%a7git%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%81%ae%e7%94%9f%e6%88%90%e3%82%92llm%e3%81%ab%e3%81%95%e3%81%9b%e3%82%8b%e6%8b%a1%e5%bc%b5/</link>
					<comments>https://toybox.uranos8685.mydns.jp/784/vscode%e3%81%a7git%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%81%ae%e7%94%9f%e6%88%90%e3%82%92llm%e3%81%ab%e3%81%95%e3%81%9b%e3%82%8b%e6%8b%a1%e5%bc%b5/#respond</comments>
		
		<dc:creator><![CDATA[Uranos8685]]></dc:creator>
		<pubDate>Sat, 26 Sep 2026 19:53:27 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[生成AI]]></category>
		<guid isPermaLink="false">https://toybox.uranos8685.mydns.jp/?p=784</guid>

					<description><![CDATA[<p>はじめに 　VSCodeのソース管理タブで、GitHubへコミットする際にGitHub Copilotを使ってコミットメッセージの生成が可能です。 　ただ、コミットメッセージの生成にもトークンコストが発生するため、無課金 [&#8230;]</p>
<p>The post <a href="https://toybox.uranos8685.mydns.jp/784/vscode%e3%81%a7git%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%81%ae%e7%94%9f%e6%88%90%e3%82%92llm%e3%81%ab%e3%81%95%e3%81%9b%e3%82%8b%e6%8b%a1%e5%bc%b5/">VSCodeでGitコミットメッセージの生成をLLMにさせる拡張機能（Commit Maker）</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">はじめに</h2>



<p class="wp-block-paragraph">　VSCodeのソース管理タブで、GitHubへコミットする際にGitHub Copilotを使ってコミットメッセージの生成が可能です。<br></p>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image.png"><img loading="lazy" decoding="async" width="384" height="175" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image.png" alt="" class="wp-image-786" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image.png 384w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-300x137.png 300w" sizes="(max-width: 384px) 100vw, 384px" /></a></figure>



<p class="wp-block-paragraph">　ただ、コミットメッセージの生成にもトークンコストが発生するため、無課金だと使っているうちにリミットに達してしまうことがままあったため、ローカルLLMにコミットメッセージをさせる拡張機能がないか探していたところ、Commit Makerという拡張機能が良さげだったので紹介。</p>



<h2 class="wp-block-heading">Commit Makerについて</h2>


<a rel="noopener" href="https://marketplace.visualstudio.com/items?itemName=Hiromitsu.commit-maker" title="Commit Maker – コミットメーカー - Visual Studio Marketplace" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/b71a4f9526fe00022dcb4df27c28195a.default" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Commit Maker – コミットメーカー &#8211; Visual Studio Marketplace</div><div class="blogcard-snippet external-blogcard-snippet">Extension for Visual Studio Code &#8211; Git差分からコミットメッセージをAI生成。OpenAI GPT-6 Lunaを初期選択。BYOK、Codex、ローカルGGUFモデルに対応。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://marketplace.visualstudio.com/items?itemName=Hiromitsu.commit-maker" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">marketplace.visualstudio.com</div></div></div></div></a>


<p class="wp-block-paragraph">　インストールはマケプレからVSCodeにインスコするだけ。<br>　サイドバーのタブに、Commit Makerのアイコンが追加されるので、ここから設定が可能。<br>　ClaudeやCodexなどのAPIキーを設定することも出来るが、ローカルLLMもここでGGUFファイルをダウンロードすることで利用可能（外部でDL済みの任意のGGUFを指定することは出来なさそう）。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-large"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-1.png"><img loading="lazy" decoding="async" width="312" height="1024" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-1-312x1024.png" alt="" class="wp-image-787" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-1-312x1024.png 312w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-1-91x300.png 91w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-1.png 344w" sizes="(max-width: 312px) 100vw, 312px" /></a></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-2.png"><img loading="lazy" decoding="async" width="267" height="293" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-2.png" alt="" class="wp-image-788"/></a></figure>
</div>
</div>



<p class="wp-block-paragraph">　生成した結果。生成の精度は、まぁまぁといった感じ。小さいプロジェクトならいいが、複数のpyファイルをまたぐような大規模プロジェクトだと、変更箇所しか読まないのか的外れな生成をすることがある。<br>　あと、GGUF形式のLLMをGPU推論できる環境でも、CPU推論でのみ動作するよう。一応、公式のGitHubのReadmeではGPUも使えそうなことが書いてあるが、設定方法の記載は見つけられず、よく分からん。まあ、CPU推論でも20秒程度で生成できていたので、まあいいかな。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="346" height="308" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-3.png" alt="" class="wp-image-789" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-3.png 346w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-3-300x267.png 300w" sizes="(max-width: 346px) 100vw, 346px" /></figure>


<a rel="noopener" href="https://github.com/Hiromitsu-A-T/commit-maker/tree/main" title="GitHub - Hiromitsu-A-T/commit-maker: GUIでプロンプト設定可能、自分のAPIキーを使ってサブスク不要のAIコミット生成ツール / GUI-configurable, no-subscription AI commit generator using your own API key." class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/0ee9cb7fa83c77e5e768379c041b5a7e.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub &#8211; Hiromitsu-A-T/commit-maker: GUIでプロンプト設定可能、自分のAPIキーを使ってサブスク不要のAIコミット生成ツール / GUI-configurable, no-subscription AI commit generator using your own API key.</div><div class="blogcard-snippet external-blogcard-snippet">GUIでプロンプト設定可能、自分のAPIキーを使ってサブスク不要のAIコミット生成ツール / GUI-configurable, no-subscription AI commit generator using your own API &#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/Hiromitsu-A-T/commit-maker" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a><p>The post <a href="https://toybox.uranos8685.mydns.jp/784/vscode%e3%81%a7git%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%81%ae%e7%94%9f%e6%88%90%e3%82%92llm%e3%81%ab%e3%81%95%e3%81%9b%e3%82%8b%e6%8b%a1%e5%bc%b5/">VSCodeでGitコミットメッセージの生成をLLMにさせる拡張機能（Commit Maker）</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://toybox.uranos8685.mydns.jp/784/vscode%e3%81%a7git%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%81%ae%e7%94%9f%e6%88%90%e3%82%92llm%e3%81%ab%e3%81%95%e3%81%9b%e3%82%8b%e6%8b%a1%e5%bc%b5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">784</post-id>	</item>
		<item>
		<title>【PII】Presidioを使ってみる</title>
		<link>https://toybox.uranos8685.mydns.jp/726/%e3%80%90pii%e3%80%91presidio%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b/</link>
					<comments>https://toybox.uranos8685.mydns.jp/726/%e3%80%90pii%e3%80%91presidio%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b/#respond</comments>
		
		<dc:creator><![CDATA[Uranos8685]]></dc:creator>
		<pubDate>Mon, 31 Aug 2026 12:06:03 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://toybox.uranos8685.mydns.jp/?p=726</guid>

					<description><![CDATA[<p>仮想環境の作成 仮想環境作成 　公式サイトによると、対応しているPythonのバージョンは3.10～3.13とのこと。　Anacondaで以下のコマンドで仮想環境を新規作成した。 pip install presidio [&#8230;]</p>
<p>The post <a href="https://toybox.uranos8685.mydns.jp/726/%e3%80%90pii%e3%80%91presidio%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b/">【PII】Presidioを使ってみる</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></description>
										<content:encoded><![CDATA[<a rel="noopener" href="https://github.com/data-privacy-stack/presidio" title="GitHub - data-privacy-stack/presidio: An open-source framework for detecting, redacting, masking, and anonymizing sensitive data (PII) across text, images, and structured data. Supports NLP, pattern matching, and customizable pipelines." class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/2f9ab95d8d4e114dce61656f2462c98e.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub &#8211; data-privacy-stack/presidio: An open-source framework for detecting, redacting, masking, and anonymizing sensitive data (PII) across text, images, and structured data. Supports NLP, pattern matching, and customizable pipelines.</div><div class="blogcard-snippet external-blogcard-snippet">An open-source framework for detecting, redacting, masking, and anonymizing sensitive data (PII) across text, images, an&#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/data-privacy-stack/presidio" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>

<a rel="noopener" href="https://presidio.dataprivacystack.org" title="Index - Presidio" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fpresidio.dataprivacystack.org?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Index &#8211; Presidio</div><div class="blogcard-snippet external-blogcard-snippet">PII anonymization for text, images, and structured data.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://presidio.dataprivacystack.org" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">presidio.dataprivacystack.org</div></div></div></div></a>


<h2 class="wp-block-heading">仮想環境の作成</h2>



<h3 class="wp-block-heading">仮想環境作成</h3>


<a rel="noopener" href="https://presidio.dataprivacystack.org/installation/#__tabbed_1_2" title="Installing Presidio - Presidio" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fpresidio.dataprivacystack.org%2Finstallation%2F%23__tabbed_1_2?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Installing Presidio &#8211; Presidio</div><div class="blogcard-snippet external-blogcard-snippet">PII anonymization for text, images, and structured data.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://presidio.dataprivacystack.org/installation/#__tabbed_1_2" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">presidio.dataprivacystack.org</div></div></div></div></a>


<p class="wp-block-paragraph">　公式サイトによると、対応しているPythonのバージョンは3.10～3.13とのこと。<br>　Anacondaで以下のコマンドで仮想環境を新規作成した。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>conda create -n presidio_20260831 python==3.13</code></pre></div>



<h3 class="wp-block-heading">pip install presidio_analyzer[transformers]</h3>



<p class="wp-block-paragraph">　仮想環境をアクティベートして、以下のコマンドでPresidioをpip installする。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>pip install &quot;presidio_analyzer[transformers]&quot;</code></pre></div>



<p class="wp-block-paragraph">↓実行結果</p>



<div data-wp-context="{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }" data-wp-interactive="core/accordion" role="group" class="wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow">
<div data-wp-class--is-open="state.isOpen" data-wp-context="{ &quot;id&quot;: &quot;accordion-item-1&quot;, &quot;openByDefault&quot;: false }" data-wp-init="callbacks.initAccordionItems" data-wp-on-window--hashchange="callbacks.hashChange" class="wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow">
<h4 class="wp-block-accordion-heading has-icon has-icon-right"><button aria-expanded="false" aria-controls="accordion-item-1-panel" data-wp-bind--aria-expanded="state.isOpen" data-wp-on--click="actions.toggle" id="accordion-item-1" type="button" class="wp-block-accordion-heading__toggle"><span class="wp-block-accordion-heading__toggle-title">実行結果</span><span class="wp-block-accordion-heading__toggle-icon" aria-hidden="true">+</span></button></h4>



<div aria-labelledby="accordion-item-1" data-wp-bind--hidden="state.isHidden" data-wp-on--beforematch="actions.handleBeforeMatch" id="accordion-item-1-panel" role="region" class="wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow">
<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>Collecting presidio_analyzer[transformers]
  Downloading presidio_analyzer-2.2.364-py3-none-any.whl.metadata (6.7 kB)
Collecting accelerate&lt;2.0.0,&gt;=0.20.0 (from presidio_analyzer[transformers])
  Using cached accelerate-1.14.0-py3-none-any.whl.metadata (19 kB)
Collecting click&lt;9.0.0,&gt;=8.1.0 (from presidio_analyzer[transformers])
  Downloading click-8.5.0-py3-none-any.whl.metadata (2.6 kB)
Collecting huggingface_hub&lt;2.0.0,&gt;=0.20.0 (from presidio_analyzer[transformers])
  Downloading huggingface_hub-1.29.0-py3-none-any.whl.metadata (16 kB)
Collecting numpy&lt;2.5.0,&gt;=1.19.0 (from presidio_analyzer[transformers])
  Using cached numpy-2.4.6-cp313-cp313-win_amd64.whl.metadata (6.6 kB)
Collecting phonenumbers&lt;10.0.0,&gt;=9.0.28 (from presidio_analyzer[transformers])
  Downloading phonenumbers-9.0.38-py2.py3-none-any.whl.metadata (10 kB)
Collecting pydantic&lt;3.0.0,&gt;=2.12.5 (from presidio_analyzer[transformers])
  Downloading pydantic-2.13.5-py3-none-any.whl.metadata (110 kB)
Collecting pyyaml&lt;7.0.0,&gt;=6.0.3 (from presidio_analyzer[transformers])
  Using cached pyyaml-6.0.3-cp313-cp313-win_amd64.whl.metadata (2.4 kB)
Collecting regex&gt;=2023.0.0 (from presidio_analyzer[transformers])
  Downloading regex-2026.8.31-cp313-cp313-win_amd64.whl.metadata (41 kB)
Collecting spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4 (from presidio_analyzer[transformers])
  Downloading spacy-3.8.16-cp313-cp313-win_amd64.whl.metadata (28 kB)
Collecting spacy_huggingface_pipelines&lt;1.0.0,&gt;=0.0.4 (from presidio_analyzer[transformers])
  Downloading spacy_huggingface_pipelines-0.0.4-py2.py3-none-any.whl.metadata (10.0 kB)
Collecting tldextract&lt;6.0.0,&gt;=5.3.1 (from presidio_analyzer[transformers])
  Downloading tldextract-5.3.2-py3-none-any.whl.metadata (7.9 kB)
Collecting transformers&lt;6.0.0,&gt;=4.0.0 (from presidio_analyzer[transformers])
  Downloading transformers-5.16.1-py3-none-any.whl.metadata (32 kB)
Requirement already satisfied: packaging&gt;=20.0 in C:\ProgramData\anaconda3\envs\presidio_20260831\Lib\site-packages (from accelerate&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers]) (26.3)
Collecting psutil (from accelerate&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached psutil-7.2.2-cp37-abi3-win_amd64.whl.metadata (22 kB)
Collecting torch&gt;=2.0.0 (from accelerate&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Downloading torch-2.13.0-cp313-cp313-win_amd64.whl.metadata (39 kB)
Collecting safetensors&gt;=0.4.3 (from accelerate&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached safetensors-0.8.0-cp310-abi3-win_amd64.whl.metadata (4.2 kB)
Collecting filelock&gt;=3.10.0 (from huggingface_hub&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Downloading filelock-3.32.4-py3-none-any.whl.metadata (2.0 kB)
Collecting fsspec&gt;=2023.5.0 (from huggingface_hub&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Downloading fsspec-2026.7.0-py3-none-any.whl.metadata (10 kB)
Collecting hf-xet&lt;2.0.0,&gt;=1.5.2 (from huggingface_hub&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Downloading hf_xet-1.6.0-cp38-abi3-win_amd64.whl.metadata (4.9 kB)
Collecting httpx&lt;1,&gt;=0.23.0 (from huggingface_hub&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB)
Collecting tqdm&gt;=4.42.1 (from huggingface_hub&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached tqdm-4.70.0-py3-none-any.whl.metadata (57 kB)
Collecting typing-extensions&gt;=4.1.0 (from huggingface_hub&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB)
Collecting anyio (from httpx&lt;1,&gt;=0.23.0-&gt;huggingface_hub&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached anyio-4.14.2-py3-none-any.whl.metadata (4.6 kB)
Collecting certifi (from httpx&lt;1,&gt;=0.23.0-&gt;huggingface_hub&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached certifi-2026.7.22-py3-none-any.whl.metadata (2.5 kB)
Collecting httpcore==1.* (from httpx&lt;1,&gt;=0.23.0-&gt;huggingface_hub&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached httpcore-1.0.9-py3-none-any.whl.metadata (21 kB)
Collecting idna (from httpx&lt;1,&gt;=0.23.0-&gt;huggingface_hub&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Downloading idna-3.19-py3-none-any.whl.metadata (9.2 kB)
Collecting h11&gt;=0.16 (from httpcore==1.*-&gt;httpx&lt;1,&gt;=0.23.0-&gt;huggingface_hub&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached h11-0.16.0-py3-none-any.whl.metadata (8.3 kB)
Collecting annotated-types&gt;=0.6.0 (from pydantic&lt;3.0.0,&gt;=2.12.5-&gt;presidio_analyzer[transformers])
  Using cached annotated_types-0.8.0-py3-none-any.whl.metadata (15 kB)
Collecting pydantic-core==2.46.5 (from pydantic&lt;3.0.0,&gt;=2.12.5-&gt;presidio_analyzer[transformers])
  Downloading pydantic_core-2.46.5-cp313-cp313-win_amd64.whl.metadata (6.7 kB)
Collecting typing-inspection&gt;=0.4.2 (from pydantic&lt;3.0.0,&gt;=2.12.5-&gt;presidio_analyzer[transformers])
  Downloading typing_inspection-0.4.4-py3-none-any.whl.metadata (2.6 kB)
Collecting spacy-legacy&lt;3.1.0,&gt;=3.0.11 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading spacy_legacy-3.0.12-py2.py3-none-any.whl.metadata (2.8 kB)
Collecting spacy-loggers&lt;2.0.0,&gt;=1.0.0 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading spacy_loggers-1.0.5-py3-none-any.whl.metadata (23 kB)
Collecting murmurhash&lt;1.1.0,&gt;=0.28.0 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading murmurhash-1.0.15-cp313-cp313-win_amd64.whl.metadata (2.3 kB)
Collecting cymem&lt;2.1.0,&gt;=2.0.2 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading cymem-2.0.13-cp313-cp313-win_amd64.whl.metadata (9.9 kB)
Collecting preshed&lt;3.1.0,&gt;=3.0.2 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading preshed-3.0.13-cp313-cp313-win_amd64.whl.metadata (5.4 kB)
Collecting thinc&lt;8.4.0,&gt;=8.3.12 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading thinc-8.3.13-cp313-cp313-win_amd64.whl.metadata (15 kB)
Collecting wasabi&lt;1.2.0,&gt;=0.9.1 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading wasabi-1.1.3-py3-none-any.whl.metadata (28 kB)
Collecting srsly&lt;3.0.0,&gt;=2.5.3 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading srsly-2.5.3-cp313-cp313-win_amd64.whl.metadata (20 kB)
Collecting catalogue&lt;2.1.0,&gt;=2.0.6 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading catalogue-2.0.10-py3-none-any.whl.metadata (14 kB)
Collecting weasel&lt;2.0.0,&gt;=1.0.0 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading weasel-1.0.0-py3-none-any.whl.metadata (4.6 kB)
Collecting confection&lt;2.0.0,&gt;=1.3.2 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading confection-1.3.3-py3-none-any.whl.metadata (19 kB)
Collecting typer&lt;1.0.0,&gt;=0.3.0 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading typer-0.27.2-py3-none-any.whl.metadata (16 kB)
Collecting requests&lt;3.0.0,&gt;=2.13.0 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Using cached requests-2.34.2-py3-none-any.whl.metadata (4.8 kB)
Collecting jinja2 (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Using cached jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)
Requirement already satisfied: setuptools in C:\ProgramData\anaconda3\envs\presidio_20260831\Lib\site-packages (from spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers]) (83.0.0)
Collecting charset_normalizer&lt;4,&gt;=2 (from requests&lt;3.0.0,&gt;=2.13.0-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading charset_normalizer-3.5.1-cp313-cp313-win_amd64.whl.metadata (46 kB)
Collecting urllib3&lt;3,&gt;=1.26 (from requests&lt;3.0.0,&gt;=2.13.0-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Using cached urllib3-2.7.0-py3-none-any.whl.metadata (6.9 kB)
Collecting transformers&lt;6.0.0,&gt;=4.0.0 (from presidio_analyzer[transformers])
  Using cached transformers-4.57.6-py3-none-any.whl.metadata (43 kB)
Collecting blis&lt;1.4.0,&gt;=1.3.0 (from thinc&lt;8.4.0,&gt;=8.3.12-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading blis-1.3.3-cp313-cp313-win_amd64.whl.metadata (7.7 kB)
Collecting requests-file&gt;=1.4 (from tldextract&lt;6.0.0,&gt;=5.3.1-&gt;presidio_analyzer[transformers])
  Downloading requests_file-3.0.1-py2.py3-none-any.whl.metadata (1.7 kB)
Collecting colorama (from tqdm&gt;=4.42.1-&gt;huggingface_hub&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)
Collecting huggingface_hub&lt;2.0.0,&gt;=0.20.0 (from presidio_analyzer[transformers])
  Using cached huggingface_hub-0.36.2-py3-none-any.whl.metadata (15 kB)
Collecting tokenizers&lt;=0.23.0,&gt;=0.22.0 (from transformers&lt;6.0.0,&gt;=4.0.0-&gt;presidio_analyzer[transformers])
  Using cached tokenizers-0.22.2-cp39-abi3-win_amd64.whl.metadata (7.4 kB)
Collecting shellingham&gt;=1.3.0 (from typer&lt;1.0.0,&gt;=0.3.0-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Using cached shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)
Collecting rich&gt;=13.8.0 (from typer&lt;1.0.0,&gt;=0.3.0-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Using cached rich-15.0.0-py3-none-any.whl.metadata (18 kB)
Collecting annotated-doc&gt;=0.0.2 (from typer&lt;1.0.0,&gt;=0.3.0-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading annotated_doc-0.0.5-py3-none-any.whl.metadata (6.5 kB)
Collecting cloudpathlib&gt;=0.7.0 (from weasel&lt;2.0.0,&gt;=1.0.0-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading cloudpathlib-0.25.0-py3-none-any.whl.metadata (16 kB)
Collecting smart-open&gt;=5.2.1 (from weasel&lt;2.0.0,&gt;=1.0.0-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading smart_open-8.0.1-py3-none-any.whl.metadata (24 kB)
Collecting markdown-it-py&gt;=2.2.0 (from rich&gt;=13.8.0-&gt;typer&lt;1.0.0,&gt;=0.3.0-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Using cached markdown_it_py-4.2.0-py3-none-any.whl.metadata (7.4 kB)
Collecting pygments&lt;3.0.0,&gt;=2.13.0 (from rich&gt;=13.8.0-&gt;typer&lt;1.0.0,&gt;=0.3.0-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading pygments-2.21.0-py3-none-any.whl.metadata (2.5 kB)
Collecting mdurl~=0.1 (from markdown-it-py&gt;=2.2.0-&gt;rich&gt;=13.8.0-&gt;typer&lt;1.0.0,&gt;=0.3.0-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Using cached mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)
Collecting wrapt (from smart-open&gt;=5.2.1-&gt;weasel&lt;2.0.0,&gt;=1.0.0-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Downloading wrapt-2.4.0-cp313-cp313-win_amd64.whl.metadata (7.6 kB)
Collecting sympy&gt;=1.13.3 (from torch&gt;=2.0.0-&gt;accelerate&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached sympy-1.14.0-py3-none-any.whl.metadata (12 kB)
Collecting networkx&gt;=2.5.1 (from torch&gt;=2.0.0-&gt;accelerate&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached networkx-3.6.1-py3-none-any.whl.metadata (6.8 kB)
Collecting mpmath&lt;1.4,&gt;=1.1.0 (from sympy&gt;=1.13.3-&gt;torch&gt;=2.0.0-&gt;accelerate&lt;2.0.0,&gt;=0.20.0-&gt;presidio_analyzer[transformers])
  Using cached mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)
Collecting MarkupSafe&gt;=2.0 (from jinja2-&gt;spacy!=3.7.0,&lt;4.0.0,&gt;=3.4.4-&gt;presidio_analyzer[transformers])
  Using cached markupsafe-3.0.3-cp313-cp313-win_amd64.whl.metadata (2.8 kB)
Downloading presidio_analyzer-2.2.364-py3-none-any.whl (266 kB)
Using cached accelerate-1.14.0-py3-none-any.whl (389 kB)
Downloading click-8.5.0-py3-none-any.whl (125 kB)
Using cached httpx-0.28.1-py3-none-any.whl (73 kB)
Using cached httpcore-1.0.9-py3-none-any.whl (78 kB)
Using cached numpy-2.4.6-cp313-cp313-win_amd64.whl (12.3 MB)
Downloading phonenumbers-9.0.38-py2.py3-none-any.whl (2.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.6/2.6 MB 9.4 MB/s  0:00:00
Downloading pydantic-2.13.5-py3-none-any.whl (472 kB)
Downloading pydantic_core-2.46.5-cp313-cp313-win_amd64.whl (2.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 9.9 MB/s  0:00:00
Using cached pyyaml-6.0.3-cp313-cp313-win_amd64.whl (154 kB)
Downloading spacy-3.8.16-cp313-cp313-win_amd64.whl (15.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.2/15.2 MB 10.2 MB/s  0:00:01
Downloading catalogue-2.0.10-py3-none-any.whl (17 kB)
Downloading confection-1.3.3-py3-none-any.whl (35 kB)
Downloading cymem-2.0.13-cp313-cp313-win_amd64.whl (40 kB)
Downloading murmurhash-1.0.15-cp313-cp313-win_amd64.whl (25 kB)
Downloading preshed-3.0.13-cp313-cp313-win_amd64.whl (122 kB)
Using cached requests-2.34.2-py3-none-any.whl (73 kB)
Downloading charset_normalizer-3.5.1-cp313-cp313-win_amd64.whl (199 kB)
Downloading idna-3.19-py3-none-any.whl (68 kB)
Downloading spacy_huggingface_pipelines-0.0.4-py2.py3-none-any.whl (11 kB)
Downloading spacy_legacy-3.0.12-py2.py3-none-any.whl (29 kB)
Downloading spacy_loggers-1.0.5-py3-none-any.whl (22 kB)
Downloading srsly-2.5.3-cp313-cp313-win_amd64.whl (650 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 650.8/650.8 kB 8.0 MB/s  0:00:00
Downloading thinc-8.3.13-cp313-cp313-win_amd64.whl (1.7 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 9.7 MB/s  0:00:00
Downloading blis-1.3.3-cp313-cp313-win_amd64.whl (6.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 10.0 MB/s  0:00:00
Downloading tldextract-5.3.2-py3-none-any.whl (106 kB)
Using cached tqdm-4.70.0-py3-none-any.whl (80 kB)
Using cached transformers-4.57.6-py3-none-any.whl (12.0 MB)
Using cached huggingface_hub-0.36.2-py3-none-any.whl (566 kB)
Using cached tokenizers-0.22.2-cp39-abi3-win_amd64.whl (2.7 MB)
Downloading typer-0.27.2-py3-none-any.whl (123 kB)
Using cached urllib3-2.7.0-py3-none-any.whl (131 kB)
Downloading wasabi-1.1.3-py3-none-any.whl (27 kB)
Downloading weasel-1.0.0-py3-none-any.whl (50 kB)
Downloading annotated_doc-0.0.5-py3-none-any.whl (5.3 kB)
Using cached annotated_types-0.8.0-py3-none-any.whl (13 kB)
Using cached certifi-2026.7.22-py3-none-any.whl (136 kB)
Downloading cloudpathlib-0.25.0-py3-none-any.whl (66 kB)
Using cached colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Downloading filelock-3.32.4-py3-none-any.whl (99 kB)
Downloading fsspec-2026.7.0-py3-none-any.whl (206 kB)
Using cached h11-0.16.0-py3-none-any.whl (37 kB)
Downloading regex-2026.8.31-cp313-cp313-win_amd64.whl (277 kB)
Downloading requests_file-3.0.1-py2.py3-none-any.whl (4.5 kB)
Using cached rich-15.0.0-py3-none-any.whl (310 kB)
Downloading pygments-2.21.0-py3-none-any.whl (1.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 9.7 MB/s  0:00:00
Using cached markdown_it_py-4.2.0-py3-none-any.whl (91 kB)
Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Using cached safetensors-0.8.0-cp310-abi3-win_amd64.whl (355 kB)
Using cached shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)
Downloading smart_open-8.0.1-py3-none-any.whl (73 kB)
Downloading torch-2.13.0-cp313-cp313-win_amd64.whl (122.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 122.1/122.1 MB 10.2 MB/s  0:00:12
Using cached networkx-3.6.1-py3-none-any.whl (2.1 MB)
Using cached sympy-1.14.0-py3-none-any.whl (6.3 MB)
Using cached mpmath-1.3.0-py3-none-any.whl (536 kB)
Using cached typing_extensions-4.16.0-py3-none-any.whl (45 kB)
Downloading typing_inspection-0.4.4-py3-none-any.whl (14 kB)
Using cached anyio-4.14.2-py3-none-any.whl (125 kB)
Using cached jinja2-3.1.6-py3-none-any.whl (134 kB)
Using cached markupsafe-3.0.3-cp313-cp313-win_amd64.whl (15 kB)
Using cached psutil-7.2.2-cp37-abi3-win_amd64.whl (137 kB)
Downloading wrapt-2.4.0-cp313-cp313-win_amd64.whl (96 kB)
Installing collected packages: mpmath, wrapt, urllib3, typing-extensions, sympy, spacy-loggers, spacy-legacy, shellingham, safetensors, regex, pyyaml, pygments, psutil, phonenumbers, numpy, networkx, murmurhash, mdurl, MarkupSafe, idna, h11, fsspec, filelock, cymem, confection, colorama, cloudpathlib, click, charset_normalizer, certifi, catalogue, annotated-types, annotated-doc, wasabi, typing-inspection, tqdm, srsly, smart-open, requests, pydantic-core, preshed, markdown-it-py, jinja2, httpcore, blis, anyio, torch, rich, requests-file, pydantic, huggingface_hub, httpx, typer, tokenizers, tldextract, thinc, accelerate, weasel, transformers, spacy, spacy_huggingface_pipelines, presidio_analyzer
ERROR: pip&#39;s dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
cyclopts 4.16.1 requires attrs&gt;=23.1.0, which is not installed.
jsonschema-path 0.5.0 requires attrs&gt;=22.2.0, which is not installed.
jsonschema-path 0.5.0 requires referencing&lt;0.38.0, which is not installed.
langchain-core 1.6.1 requires jsonpatch&lt;2.0.0,&gt;=1.33.0, which is not installed.
langchain-core 1.6.1 requires tenacity!=8.4.0,&lt;10.0.0,&gt;=8.1.0, which is not installed.
langsmith 0.11.2 requires distro&gt;=1.7.0, which is not installed.
langsmith 0.11.2 requires requests-toolbelt&gt;=1.0.0, which is not installed.
langsmith 0.11.2 requires sniffio&gt;=1.1, which is not installed.
langsmith 0.11.2 requires zstandard&gt;=0.23.0, which is not installed.
typing-inspect 0.9.0 requires mypy-extensions&gt;=0.3.0, which is not installed.
Successfully installed MarkupSafe-3.0.3 accelerate-1.14.0 annotated-doc-0.0.5 annotated-types-0.8.0 anyio-4.14.2 blis-1.3.3 catalogue-2.0.10 certifi-2026.7.22 charset_normalizer-3.5.1 click-8.5.0 cloudpathlib-0.25.0 colorama-0.4.6 confection-1.3.3 cymem-2.0.13 filelock-3.32.4 fsspec-2026.7.0 h11-0.16.0 httpcore-1.0.9 httpx-0.28.1 huggingface_hub-0.36.2 idna-3.19 jinja2-3.1.6 markdown-it-py-4.2.0 mdurl-0.1.2 mpmath-1.3.0 murmurhash-1.0.15 networkx-3.6.1 numpy-2.4.6 phonenumbers-9.0.38 preshed-3.0.13 presidio_analyzer-2.2.364 psutil-7.2.2 pydantic-2.13.5 pydantic-core-2.46.5 pygments-2.21.0 pyyaml-6.0.3 regex-2026.8.31 requests-2.34.2 requests-file-3.0.1 rich-15.0.0 safetensors-0.8.0 shellingham-1.5.4 smart-open-8.0.1 spacy-3.8.16 spacy-legacy-3.0.12 spacy-loggers-1.0.5 spacy_huggingface_pipelines-0.0.4 srsly-2.5.3 sympy-1.14.0 thinc-8.3.13 tldextract-5.3.2 tokenizers-0.22.2 torch-2.13.0 tqdm-4.70.0 transformers-4.57.6 typer-0.27.2 typing-extensions-4.16.0 typing-inspection-0.4.4 urllib3-2.7.0 wasabi-1.1.3 weasel-1.0.0 wrapt-2.4.0</code></pre></div>
</div>
</div>
</div>



<p class="wp-block-paragraph">　エラーを見ると、パッケージ(<code>cyclopts</code>、<code>jsonschema-path</code>、<code>langchain-core</code>、<code>langsmith</code>、<code>typing-inspect</code>)が、それぞれ必要とする依存パッケージ(<code>attrs</code>、<code>tenacity</code>、<code>sniffio</code>など)を持っていないというエラーなので、追加でpip install。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>pip install attrs tenacity sniffio requests-toolbelt distro zstandard jsonpatch mypy-extensions --upgrade</code></pre></div>



<p class="wp-block-paragraph">↓実行結果</p>



<div data-wp-context="{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }" data-wp-interactive="core/accordion" role="group" class="wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow">
<div data-wp-class--is-open="state.isOpen" data-wp-context="{ &quot;id&quot;: &quot;accordion-item-2&quot;, &quot;openByDefault&quot;: false }" data-wp-init="callbacks.initAccordionItems" data-wp-on-window--hashchange="callbacks.hashChange" class="wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow">
<h4 class="wp-block-accordion-heading has-icon has-icon-right"><button aria-expanded="false" aria-controls="accordion-item-2-panel" data-wp-bind--aria-expanded="state.isOpen" data-wp-on--click="actions.toggle" id="accordion-item-2" type="button" class="wp-block-accordion-heading__toggle"><span class="wp-block-accordion-heading__toggle-title">実行結果</span><span class="wp-block-accordion-heading__toggle-icon" aria-hidden="true">+</span></button></h4>



<div aria-labelledby="accordion-item-2" data-wp-bind--hidden="state.isHidden" data-wp-on--beforematch="actions.handleBeforeMatch" id="accordion-item-2-panel" role="region" class="wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow">
<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>Collecting attrs
  Using cached attrs-26.1.0-py3-none-any.whl.metadata (8.8 kB)
Collecting tenacity
  Using cached tenacity-9.1.4-py3-none-any.whl.metadata (1.2 kB)
Collecting sniffio
  Using cached sniffio-1.3.1-py3-none-any.whl.metadata (3.9 kB)
Collecting requests-toolbelt
  Using cached requests_toolbelt-1.0.0-py2.py3-none-any.whl.metadata (14 kB)
Collecting distro
  Using cached distro-1.9.0-py3-none-any.whl.metadata (6.8 kB)
Collecting zstandard
  Using cached zstandard-0.25.0-cp313-cp313-win_amd64.whl.metadata (3.3 kB)
Collecting jsonpatch
  Using cached jsonpatch-1.33-py2.py3-none-any.whl.metadata (3.0 kB)
Collecting mypy-extensions
  Using cached mypy_extensions-1.1.0-py3-none-any.whl.metadata (1.1 kB)
Requirement already satisfied: requests&lt;3.0.0,&gt;=2.0.1 in C:\ProgramData\anaconda3\envs\presidio_20260831\Lib\site-packages (from requests-toolbelt) (2.34.2)
Requirement already satisfied: charset_normalizer&lt;4,&gt;=2 in C:\ProgramData\anaconda3\envs\presidio_20260831\Lib\site-packages (from requests&lt;3.0.0,&gt;=2.0.1-&gt;requests-toolbelt) (3.5.1)
Requirement already satisfied: idna&lt;4,&gt;=2.5 in C:\ProgramData\anaconda3\envs\presidio_20260831\Lib\site-packages (from requests&lt;3.0.0,&gt;=2.0.1-&gt;requests-toolbelt) (3.19)
Requirement already satisfied: urllib3&lt;3,&gt;=1.26 in C:\ProgramData\anaconda3\envs\presidio_20260831\Lib\site-packages (from requests&lt;3.0.0,&gt;=2.0.1-&gt;requests-toolbelt) (2.7.0)
Requirement already satisfied: certifi&gt;=2023.5.7 in C:\ProgramData\anaconda3\envs\presidio_20260831\Lib\site-packages (from requests&lt;3.0.0,&gt;=2.0.1-&gt;requests-toolbelt) (2026.7.22)
Collecting jsonpointer&gt;=1.9 (from jsonpatch)
  Using cached jsonpointer-3.1.1-py3-none-any.whl.metadata (2.4 kB)
Using cached attrs-26.1.0-py3-none-any.whl (67 kB)
Using cached tenacity-9.1.4-py3-none-any.whl (28 kB)
Using cached sniffio-1.3.1-py3-none-any.whl (10 kB)
Using cached requests_toolbelt-1.0.0-py2.py3-none-any.whl (54 kB)
Using cached distro-1.9.0-py3-none-any.whl (20 kB)
Using cached zstandard-0.25.0-cp313-cp313-win_amd64.whl (506 kB)
Using cached jsonpatch-1.33-py2.py3-none-any.whl (12 kB)
Using cached mypy_extensions-1.1.0-py3-none-any.whl (5.0 kB)
Using cached jsonpointer-3.1.1-py3-none-any.whl (7.7 kB)
Installing collected packages: zstandard, tenacity, sniffio, mypy-extensions, jsonpointer, distro, attrs, requests-toolbelt, jsonpatch
ERROR: pip&#39;s dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
jsonschema-path 0.5.0 requires referencing&lt;0.38.0, which is not installed.
Successfully installed attrs-26.1.0 distro-1.9.0 jsonpatch-1.33 jsonpointer-3.1.1 mypy-extensions-1.1.0 requests-toolbelt-1.0.0 sniffio-1.3.1 tenacity-9.1.4 zstandard-0.25.0</code></pre></div>
</div>
</div>
</div>



<p class="wp-block-paragraph">　まだエラーが出たので、更にpip install。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>pip install  cryptography  marshmallow==3.26.2 referencing</code></pre></div>



<p class="wp-block-paragraph">　これで、pip checkが通った。</p>



<h3 class="wp-block-heading">pip install presidio_anonymizer</h3>



<p class="wp-block-paragraph"> 次に、公式サイトの案内どおりにpresidio_anonymizerを入れる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>pip install presidio_anonymizer</code></pre></div>



<p class="wp-block-paragraph">　これはそのままpip checkが通った。</p>



<h3 class="wp-block-heading">python -m spacy download en_core_web_sm</h3>



<p class="wp-block-paragraph">　spaCyの言語モデルをダウンロードする。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>python -m spacy download en_core_web_sm</code></pre></div>



<p class="wp-block-paragraph">　言語モデルは仮想環境のsite-packages内に配置される。</p>



<h3 class="wp-block-heading">（任意）pip install presidio_image_redactor</h3>



<p class="wp-block-paragraph">　画像から個人情報を削除する場合に必要となるパッケージをインストールする。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>pip install presidio_image_redactor</code></pre></div>



<p class="wp-block-paragraph">　tesseract OCRもインストールしておく。これがないと動かん。</p>


<a rel="noopener" href="https://github.com/tesseract-ocr/tesseract" title="GitHub - tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/1ef3d9212eaa7796cbe29d82c30bc03d.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub &#8211; tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)</div><div class="blogcard-snippet external-blogcard-snippet">Tesseract Open Source OCR Engine (main repository) &#8211; tesseract-ocr/tesseract</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/tesseract-ocr/tesseract" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>


<p class="wp-block-paragraph">↓インストーラーはここ</p>


<a rel="noopener" href="https://github.com/UB-Mannheim/tesseract/wiki" title="Home" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/cef01b2ff7f4fd07ebcaf2b1307c79ea.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Home</div><div class="blogcard-snippet external-blogcard-snippet">Tesseract Open Source OCR Engine (main repository) &#8211; UB-Mannheim/tesseract</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/UB-Mannheim/tesseract/wiki/Home" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>


<p class="wp-block-paragraph">　インストール途中に追加スクリプトを選べる。日本語を追加しておくと吉。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-3.png"><img loading="lazy" decoding="async" width="499" height="388" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-3.png" alt="" class="wp-image-737" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-3.png 499w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-3-300x233.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></a></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-4.png"><img loading="lazy" decoding="async" width="499" height="388" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-4.png" alt="" class="wp-image-738" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-4.png 499w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-4-300x233.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></a></figure>
</div>
</div>



<p class="wp-block-paragraph">　インストールされたフォルダ（デフォはC:\Program Files\Tesseract-OCR）をPATHを通しておくといい。<br>　ただし、下のほうの実行コードのようにインストールパスを指定してあげれば、PATHを通さなくても問題なく動く。</p>



<h3 class="wp-block-heading">（任意）JupterLabなどのインストール</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>pip install jupyterlab ipywidgets</code></pre></div>



<h3 class="wp-block-heading">requirements.txt</h3>



<p class="wp-block-paragraph">　仮想環境のrequirements.txt</p>



<div class="wp-block-file"><a id="wp-block-file--media-9dd8af17-afaa-4630-99bf-c3fbb2181c71" href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/requirements_presidio_20260831.txt">requirements_presidio_20260831.txt</a><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/requirements_presidio_20260831.txt" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-9dd8af17-afaa-4630-99bf-c3fbb2181c71">ダウンロード</a></div>



<h2 class="wp-block-heading">使ってみる</h2>



<h3 class="wp-block-heading">テキスト</h3>



<p class="wp-block-paragraph">　実行方法はspaCyモデルを使う方法と、Transformersを使う方法がある。前者だと、ユーザーフォルダ\.cache\huggingface\hub\models&#8211;dslim&#8211;bert-base-NERにモデルをダウンロードされる。</p>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-1.png"><img loading="lazy" decoding="async" width="616" height="118" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-1.png" alt="" class="wp-image-730" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-1.png 616w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-1-300x57.png 300w" sizes="(max-width: 616px) 100vw, 616px" /></a></figure>



<p class="wp-block-paragraph">　cacheフォルダにダウンロードされるとCドライブを圧迫されるので、今回は別ドライブに事前にダウンロードしたモデルをTransformersで動かす方法を使う。</p>



<p class="wp-block-paragraph">　テスト用の文章として、では夢の国在住の田中君を使う。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>text = &quot;私は田中太郎。住所は279-0031 千葉県浦安市舞浜１−１。電話番号は03-999-9999。マイナンバーは123456789012。&quot;</code></pre></div>



<h4 class="wp-block-heading">公式ドキュメントどおりに動かす</h4>



<p class="wp-block-paragraph">　必要に応じて、以下のモデルを任意の場所にダウンロードしておく。</p>


<a rel="noopener" href="https://huggingface.co/dslim/bert-base-NER/tree/main" title="dslim/bert-base-NER at main" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/d8bbc8d752e0454977585073ab17110e.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">dslim/bert-base-NER at main</div><div class="blogcard-snippet external-blogcard-snippet">We???re on a journey to advance and democratize artificial intelligence through open source and open science.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://huggingface.co/dslim/bert-base-NER/tree/main" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">huggingface.co</div></div></div></div></a>


<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>from presidio_analyzer import AnalyzerEngine
from presidio_analyzer.nlp_engine import TransformersNlpEngine
from presidio_anonymizer import AnonymizerEngine

model_config = [{&quot;lang_code&quot;: &quot;en&quot;, &quot;model_name&quot;: {
    &quot;spacy&quot;: &quot;en_core_web_sm&quot;,  # use a small spaCy model for lemmas, tokens etc.
    &quot;transformers&quot;: r&quot;H:\BERT_Models\dslim\bert-base-NER&quot;
    }
}]

nlp_engine = TransformersNlpEngine(models=model_config)
analyzer = AnalyzerEngine(nlp_engine=nlp_engine)

results = analyzer.analyze(text=text, language=&#39;en&#39;)
print(results)

anonymizer = AnonymizerEngine()
anonymized_text = anonymizer.anonymize(text=text, analyzer_results=results)

print(anonymized_text)</code></pre></div>



<p class="wp-block-paragraph">↓実行結果</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>Some weights of the model checkpoint at H:\BERT_Models\dslim\bert-base-NER were not used when initializing BertForTokenClassification: [&#39;bert.pooler.dense.bias&#39;, &#39;bert.pooler.dense.weight&#39;]
- This IS expected if you are initializing BertForTokenClassification from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).
- This IS NOT expected if you are initializing BertForTokenClassification from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).
Device set to use cpu
[type: PHONE_NUMBER, start: 36, end: 47, score: 0.4]
text: 私は田中太郎。住所は279-0031 千葉県浦安市舞浜１−１。電話番号は&lt;PHONE_NUMBER&gt;。マイナンバーは123456789012。
items:
[
    {&#39;start&#39;: 36, &#39;end&#39;: 50, &#39;entity_type&#39;: &#39;PHONE_NUMBER&#39;, &#39;text&#39;: &#39;&lt;PHONE_NUMBER&gt;&#39;, &#39;operator&#39;: &#39;replace&#39;}
]</code></pre></div>



<p class="wp-block-paragraph">　電話番号はマスクされたが、他はダメ。</p>



<h4 class="wp-block-heading">NERモデルを日本語対応のものに変更してみる</h4>


<a rel="noopener" href="https://huggingface.co/tsmatz/xlm-roberta-ner-japanese/tree/main" title="tsmatz/xlm-roberta-ner-japanese at main" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/21d5a97e3e1c79b7b2a07c6dc97096ba.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">tsmatz/xlm-roberta-ner-japanese at main</div><div class="blogcard-snippet external-blogcard-snippet">We’re on a journey to advance and democratize artificial intelligence through open source and open science.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://huggingface.co/tsmatz/xlm-roberta-ner-japanese/tree/main" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">huggingface.co</div></div></div></div></a>


<p class="wp-block-paragraph">　日本語トークナイザをダウンロードしておく。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>python -m spacy download ja_core_news_sm</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>model_config = [{&quot;lang_code&quot;: &quot;ja&quot;, &quot;model_name&quot;: {
    &quot;spacy&quot;: &quot;ja_core_news_sm&quot;,
    &quot;transformers&quot;: r&quot;H:\BERT_Models\tsmatz\xlm-roberta-ner-japanese&quot;
    }
}]

nlp_engine = TransformersNlpEngine(models=model_config)
analyzer = AnalyzerEngine(nlp_engine=nlp_engine)

results = analyzer.analyze(text=text, language=&#39;ja&#39;)
print(results)

anonymizer = AnonymizerEngine()
anonymized_text = anonymizer.anonymize(text=text, analyzer_results=results)

print(anonymized_text)</code></pre></div>



<p class="wp-block-paragraph">↓実行結果</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>Device set to use cpu
[type: LOCATION, start: 19, end: 21, score: 0.9985260963439941]
text: 私は田中太郎。住所は279-0031 &lt;LOCATION&gt;県浦安市舞浜１−１。電話番号は03-999-9999。マイナンバーは123456789012。
items:
[
    {&#39;start&#39;: 19, &#39;end&#39;: 29, &#39;entity_type&#39;: &#39;LOCATION&#39;, &#39;text&#39;: &#39;&lt;LOCATION&gt;&#39;, &#39;operator&#39;: &#39;replace&#39;}
]

c:\ProgramData\anaconda3\envs\presidio_20260831\Lib\site-packages\transformers\pipelines\token_classification.py:490: UserWarning: Tokenizer does not support real words, using fallback heuristic
  warnings.warn(</code></pre></div>



<p class="wp-block-paragraph">　千葉はマスクされたが、他がダメ。</p>



<h4 class="wp-block-heading">ginzaを使ってみる</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>pip install -U ginza ja_ginza</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import spacy
import ginza

# GiNZAのcompound_splitterはsplit_mode未指定だとエラーになるため、
# spacy.load を一時的にラップしてconfigを注入する
_original_spacy_load = spacy.load

def _patched_spacy_load(name, *args, **kwargs):
    if name == &quot;ja_ginza&quot; and &quot;config&quot; not in kwargs:
        kwargs[&quot;config&quot;] = {&quot;components&quot;: {&quot;compound_splitter&quot;: {&quot;split_mode&quot;: &quot;A&quot;}}}
    return _original_spacy_load(name, *args, **kwargs)

spacy.load = _patched_spacy_load


from presidio_analyzer import AnalyzerEngine
from presidio_analyzer.nlp_engine import TransformersNlpEngine
from presidio_anonymizer import AnonymizerEngine

model_config = [{&quot;lang_code&quot;: &quot;ja&quot;, &quot;model_name&quot;: {
    &quot;spacy&quot;: &quot;ja_ginza&quot;,  # ← ja_core_news_sm から変更
    &quot;transformers&quot;: r&quot;H:\BERT_Models\tsmatz\xlm-roberta-ner-japanese&quot;
    }
}]

nlp_engine = TransformersNlpEngine(models=model_config)
analyzer = AnalyzerEngine(nlp_engine=nlp_engine)

results = analyzer.analyze(text=text, language=&#39;ja&#39;)
print(results)

anonymizer = AnonymizerEngine()
anonymized_text = anonymizer.anonymize(text=text, analyzer_results=results)

print(anonymized_text)</code></pre></div>



<p class="wp-block-paragraph">↓実行結果</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>Device set to use cpu
[type: LOCATION, start: 19, end: 27, score: 0.9985260963439941]
text: 私は田中太郎。住所は279-0031 &lt;LOCATION&gt;１−１。電話番号は03-999-9999。マイナンバーは123456789012。
items:
[
    {&#39;start&#39;: 19, &#39;end&#39;: 29, &#39;entity_type&#39;: &#39;LOCATION&#39;, &#39;text&#39;: &#39;&lt;LOCATION&gt;&#39;, &#39;operator&#39;: &#39;replace&#39;}
]

c:\ProgramData\anaconda3\envs\presidio_20260831\Lib\site-packages\transformers\pipelines\token_classification.py:490: UserWarning: Tokenizer does not support real words, using fallback heuristic
  warnings.warn(</code></pre></div>



<h4 class="wp-block-heading">カスタムレコグナイザーでなんとかする</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import spacy
import ginza

if not getattr(spacy.load, &quot;_ja_ginza_patched&quot;, False):
    _original_spacy_load = spacy.load

    def _make_patched_load(original_load):
        def _patched(name, *args, **kwargs):
            if name == &quot;ja_ginza&quot;:
                # &quot;disable&quot; は生成はするが実行しないだけなので、
                # compound_splitter の split_mode 検証エラーを避けられない。
                # &quot;exclude&quot; ならコンポーネント自体を生成しないため、この問題を回避できる。
                exclude = list(kwargs.get(&quot;exclude&quot;, []))
                for comp in (&quot;compound_splitter&quot;, &quot;bunsetu_recognizer&quot;):
                    if comp not in exclude:
                        exclude.append(comp)
                kwargs[&quot;exclude&quot;] = exclude
                kwargs.pop(&quot;config&quot;, None)
            return original_load(name, *args, **kwargs)
        _patched._ja_ginza_patched = True
        return _patched

    spacy.load = _make_patched_load(_original_spacy_load)

from presidio_analyzer import AnalyzerEngine, Pattern, PatternRecognizer, RecognizerRegistry
from presidio_analyzer.nlp_engine import TransformersNlpEngine, NerModelConfiguration
from presidio_anonymizer import AnonymizerEngine


# ============================================================
# NLPエンジン設定(GiNZA + xlm-roberta-ner-japanese)
# ============================================================
model_config = [{&quot;lang_code&quot;: &quot;ja&quot;, &quot;model_name&quot;: {
    &quot;spacy&quot;: &quot;ja_ginza&quot;,
    &quot;transformers&quot;: r&quot;H:\BERT_Models\tsmatz\xlm-roberta-ner-japanese&quot;
    }
}]

ner_model_configuration = NerModelConfiguration(
    model_to_presidio_entity_mapping={
        &quot;PER&quot;: &quot;PERSON&quot;,
        &quot;PERSON&quot;: &quot;PERSON&quot;,
        &quot;LOC&quot;: &quot;LOCATION&quot;,
        &quot;GPE&quot;: &quot;LOCATION&quot;,
        &quot;ORG&quot;: &quot;ORGANIZATION&quot;,
        &quot;DAT&quot;: &quot;DATE_TIME&quot;,
        &quot;DATE&quot;: &quot;DATE_TIME&quot;,
        &quot;TIM&quot;: &quot;DATE_TIME&quot;,
        &quot;TIME&quot;: &quot;DATE_TIME&quot;,
        &quot;MONEY&quot;: &quot;MONEY&quot;,
        &quot;PERCENT&quot;: &quot;PERCENT&quot;,
    },
    low_confidence_score_multiplier=0.4,
    low_score_entity_names=[&quot;ORGANIZATION&quot;],
    alignment_mode=&quot;expand&quot;,
    aggregation_strategy=&quot;simple&quot;,  # 日本語(スペース無し)では&quot;average&quot;等だと、空白ベースのフォールバック判定が誤動作するため&quot;simple&quot;を使う
)

nlp_engine = TransformersNlpEngine(
    models=model_config,
    ner_model_configuration=ner_model_configuration,
)
nlp_engine.load()


# ============================================================
# カスタムレコグナイザー: 郵便番号・マイナンバー
# ============================================================
postal_recognizer = PatternRecognizer(
    supported_entity=&quot;JP_POSTAL_CODE&quot;,
    patterns=[Pattern(name=&quot;jp_postal_code&quot;, regex=r&quot;\b\d{3}-\d{4}\b&quot;, score=0.85)],
    context=[&quot;郵便番号&quot;, &quot;〒&quot;],
    supported_language=&quot;ja&quot;,
)

my_number_recognizer = PatternRecognizer(
    supported_entity=&quot;JP_MY_NUMBER&quot;,
    patterns=[Pattern(name=&quot;jp_my_number&quot;, regex=r&quot;(?&lt;!\d)\d{12}(?!\d)&quot;, score=0.3)],
    context=[&quot;マイナンバー&quot;, &quot;個人番号&quot;],
    supported_language=&quot;ja&quot;,
)


# ============================================================
# レジストリ構築(既定 + カスタムを統合)
# ============================================================
registry = RecognizerRegistry(supported_languages=[&quot;ja&quot;])
registry.load_predefined_recognizers(nlp_engine=nlp_engine, languages=[&quot;ja&quot;])
registry.add_recognizer(postal_recognizer)
registry.add_recognizer(my_number_recognizer)

analyzer = AnalyzerEngine(
    nlp_engine=nlp_engine,
    registry=registry,
    supported_languages=[&quot;ja&quot;],
)


# ============================================================
# 実行
# ============================================================
results = analyzer.analyze(text=text, language=&#39;ja&#39;)
print(results)

anonymizer = AnonymizerEngine()
anonymized_text = anonymizer.anonymize(text=text, analyzer_results=results)

print(anonymized_text)</code></pre></div>



<p class="wp-block-paragraph">↓実行結果</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>Device set to use cpu
[type: PERSON, start: 2, end: 6, score: 0.999563992023468, type: LOCATION, start: 10, end: 30, score: 0.998464047908783, type: JP_POSTAL_CODE, start: 39, end: 47, score: 0.85, type: JP_MY_NUMBER, start: 55, end: 67, score: 0.6499999999999999, type: PHONE_NUMBER, start: 36, end: 47, score: 0.4]
text: 私は&lt;PERSON&gt;。住所は&lt;LOCATION&gt;。電話番号は&lt;PHONE_NUMBER&gt;。マイナンバーは&lt;JP_MY_NUMBER&gt;。
items:
[
    {&#39;start&#39;: 52, &#39;end&#39;: 66, &#39;entity_type&#39;: &#39;JP_MY_NUMBER&#39;, &#39;text&#39;: &#39;&lt;JP_MY_NUMBER&gt;&#39;, &#39;operator&#39;: &#39;replace&#39;},
    {&#39;start&#39;: 30, &#39;end&#39;: 44, &#39;entity_type&#39;: &#39;PHONE_NUMBER&#39;, &#39;text&#39;: &#39;&lt;PHONE_NUMBER&gt;&#39;, &#39;operator&#39;: &#39;replace&#39;},
    {&#39;start&#39;: 14, &#39;end&#39;: 24, &#39;entity_type&#39;: &#39;LOCATION&#39;, &#39;text&#39;: &#39;&lt;LOCATION&gt;&#39;, &#39;operator&#39;: &#39;replace&#39;},
    {&#39;start&#39;: 2, &#39;end&#39;: 10, &#39;entity_type&#39;: &#39;PERSON&#39;, &#39;text&#39;: &#39;&lt;PERSON&gt;&#39;, &#39;operator&#39;: &#39;replace&#39;}
]</code></pre></div>



<h3 class="wp-block-heading">画像</h3>



<p class="wp-block-paragraph">　テストに使った画像。</p>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/pii_test_document.png"><img loading="lazy" decoding="async" width="607" height="380" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/pii_test_document.png" alt="" class="wp-image-739" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/pii_test_document.png 607w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/pii_test_document-300x188.png 300w" sizes="(max-width: 607px) 100vw, 607px" /></a></figure>



<h4 class="wp-block-heading">サンプルコードのまま</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>import pytesseract
from presidio_image_redactor import ImageRedactorEngine
from PIL import Image

pytesseract.pytesseract.tesseract_cmd = r&quot;C:\Program Files\Tesseract-OCR\tesseract.exe&quot;

image = Image.open(r&quot;D:\Workspace\Python\Presidio\pii_test_document.png&quot;)

redactor = ImageRedactorEngine()
redacted_image = redactor.redact(image=image, ocr_kwargs={&quot;lang&quot;: &quot;jpn&quot;})

# オリジナル表示
display(image)
display(redacted_image)</code></pre></div>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-5.png"><img loading="lazy" decoding="async" width="603" height="373" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-5.png" alt="" class="wp-image-740" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-5.png 603w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-5-300x186.png 300w" sizes="(max-width: 603px) 100vw, 603px" /></a></figure>



<h4 class="wp-block-heading">カスタムレコグナイザーあり</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import spacy
import ginza

if not getattr(spacy.load, &quot;_ja_ginza_patched&quot;, False):
    _original_spacy_load = spacy.load

    def _make_patched_load(original_load):
        def _patched(name, *args, **kwargs):
            if name == &quot;ja_ginza&quot;:
                exclude = list(kwargs.get(&quot;exclude&quot;, []))
                for comp in (&quot;compound_splitter&quot;, &quot;bunsetu_recognizer&quot;):
                    if comp not in exclude:
                        exclude.append(comp)
                kwargs[&quot;exclude&quot;] = exclude
                kwargs.pop(&quot;config&quot;, None)
            return original_load(name, *args, **kwargs)
        _patched._ja_ginza_patched = True
        return _patched

    spacy.load = _make_patched_load(_original_spacy_load)


from presidio_analyzer import AnalyzerEngine, Pattern, PatternRecognizer, RecognizerRegistry
from presidio_analyzer.nlp_engine import TransformersNlpEngine, NerModelConfiguration
from presidio_image_redactor import ImageRedactorEngine, ImageAnalyzerEngine
import pytesseract
from PIL import Image

pytesseract.pytesseract.tesseract_cmd = r&quot;C:\Program Files\Tesseract-OCR\tesseract.exe&quot;


# ============================================================
# 日本語NLPエンジン(GiNZA + xlm-roberta-ner-japanese)
# ============================================================
model_config = [{&quot;lang_code&quot;: &quot;ja&quot;, &quot;model_name&quot;: {
    &quot;spacy&quot;: &quot;ja_ginza&quot;,
    &quot;transformers&quot;: r&quot;H:\BERT_Models\tsmatz\xlm-roberta-ner-japanese&quot;
    }
}]

ner_model_configuration = NerModelConfiguration(
    model_to_presidio_entity_mapping={
        &quot;PER&quot;: &quot;PERSON&quot;, &quot;PERSON&quot;: &quot;PERSON&quot;,
        &quot;LOC&quot;: &quot;LOCATION&quot;, &quot;GPE&quot;: &quot;LOCATION&quot;,
        &quot;ORG&quot;: &quot;ORGANIZATION&quot;,
        &quot;DAT&quot;: &quot;DATE_TIME&quot;, &quot;DATE&quot;: &quot;DATE_TIME&quot;,
        &quot;TIM&quot;: &quot;DATE_TIME&quot;, &quot;TIME&quot;: &quot;DATE_TIME&quot;,
        &quot;MONEY&quot;: &quot;MONEY&quot;, &quot;PERCENT&quot;: &quot;PERCENT&quot;,
    },
    low_confidence_score_multiplier=0.4,
    low_score_entity_names=[&quot;ORGANIZATION&quot;],
    alignment_mode=&quot;expand&quot;,
    aggregation_strategy=&quot;simple&quot;,
)

nlp_engine = TransformersNlpEngine(models=model_config, ner_model_configuration=ner_model_configuration)
nlp_engine.load()


# ============================================================
# カスタムレコグナイザー(郵便番号・マイナンバー)
# ============================================================
postal_recognizer = PatternRecognizer(
    supported_entity=&quot;JP_POSTAL_CODE&quot;,
    patterns=[Pattern(name=&quot;jp_postal_code&quot;, regex=r&quot;\b\d{3}-\d{4}\b&quot;, score=0.85)],
    context=[&quot;郵便番号&quot;, &quot;〒&quot;],
    supported_language=&quot;ja&quot;,
)
my_number_recognizer = PatternRecognizer(
    supported_entity=&quot;JP_MY_NUMBER&quot;,
    patterns=[Pattern(name=&quot;jp_my_number&quot;, regex=r&quot;(?&lt;!\d)\d{12}(?!\d)&quot;, score=0.3)],
    context=[&quot;マイナンバー&quot;, &quot;個人番号&quot;],
    supported_language=&quot;ja&quot;,
)

registry = RecognizerRegistry(supported_languages=[&quot;ja&quot;])
registry.load_predefined_recognizers(nlp_engine=nlp_engine, languages=[&quot;ja&quot;])
registry.add_recognizer(postal_recognizer)
registry.add_recognizer(my_number_recognizer)

analyzer = AnalyzerEngine(nlp_engine=nlp_engine, registry=registry, supported_languages=[&quot;ja&quot;])


# ============================================================
# 画像レダクター: 日本語analyzerを明示的に組み込む
# ============================================================
image_analyzer_engine = ImageAnalyzerEngine(analyzer_engine=analyzer)
redactor = ImageRedactorEngine(image_analyzer_engine=image_analyzer_engine)

image = Image.open(r&quot;D:\Workspace\Python\Presidio\pii_test_document.png&quot;)

redacted_image = redactor.redact(
    image=image,
    ocr_kwargs={&quot;lang&quot;: &quot;jpn&quot;},
    language=&quot;ja&quot;,
)

redacted_image</code></pre></div>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-6.png"><img loading="lazy" decoding="async" width="602" height="376" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-6.png" alt="" class="wp-image-741" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-6.png 602w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/image-6-300x187.png 300w" sizes="(max-width: 602px) 100vw, 602px" /></a></figure>



<p class="wp-block-paragraph">　「田」が貫通しているが、これが限界かなぁ。<br>　以上！</p>



<h2 class="wp-block-heading">実行したipynb</h2>



<div class="wp-block-file"><a id="wp-block-file--media-f411ee17-6899-42bc-98d3-207f89dde37c" href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/Presidio_検証.ipynb">Presidio_検証.ipynb</a><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/08/Presidio_検証.ipynb" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-f411ee17-6899-42bc-98d3-207f89dde37c">ダウンロード</a></div>



<p class="wp-block-paragraph"></p><p>The post <a href="https://toybox.uranos8685.mydns.jp/726/%e3%80%90pii%e3%80%91presidio%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b/">【PII】Presidioを使ってみる</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://toybox.uranos8685.mydns.jp/726/%e3%80%90pii%e3%80%91presidio%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">726</post-id>	</item>
		<item>
		<title>Safetensors形式のモデルをLiteRT-LM形式に変換してみる</title>
		<link>https://toybox.uranos8685.mydns.jp/625/litert-lm%e7%94%a8%e3%81%absafetensors%e5%bd%a2%e5%bc%8f%e3%81%ae%e3%83%a2%e3%83%87%e3%83%ab%e3%82%92%e5%a4%89%e6%8f%9b%e3%81%99%e3%82%8b/</link>
					<comments>https://toybox.uranos8685.mydns.jp/625/litert-lm%e7%94%a8%e3%81%absafetensors%e5%bd%a2%e5%bc%8f%e3%81%ae%e3%83%a2%e3%83%87%e3%83%ab%e3%82%92%e5%a4%89%e6%8f%9b%e3%81%99%e3%82%8b/#respond</comments>
		
		<dc:creator><![CDATA[Uranos8685]]></dc:creator>
		<pubDate>Sun, 19 Jul 2026 03:59:40 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://toybox.uranos8685.mydns.jp/?p=625</guid>

					<description><![CDATA[<p>WSL2のセットアップ 　Windowsの機能の有効化または無効化で、「Linux用Windowsサブシステム」と「Windowsサンドボックス」を有効化し、再起動する。 　管理者権限でPowerShellを立ち上げ、以 [&#8230;]</p>
<p>The post <a href="https://toybox.uranos8685.mydns.jp/625/litert-lm%e7%94%a8%e3%81%absafetensors%e5%bd%a2%e5%bc%8f%e3%81%ae%e3%83%a2%e3%83%87%e3%83%ab%e3%82%92%e5%a4%89%e6%8f%9b%e3%81%99%e3%82%8b/">Safetensors形式のモデルをLiteRT-LM形式に変換してみる</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">WSL2のセットアップ</h2>



<p class="wp-block-paragraph">　Windowsの機能の有効化または無効化で、「Linux用Windowsサブシステム」と「Windowsサンドボックス」を有効化し、再起動する。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-12.png"><img loading="lazy" decoding="async" width="415" height="368" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-12.png" alt="" class="wp-image-652" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-12.png 415w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-12-300x266.png 300w" sizes="(max-width: 415px) 100vw, 415px" /></a></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-13.png"><img loading="lazy" decoding="async" width="415" height="368" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-13.png" alt="" class="wp-image-653" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-13.png 415w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-13-300x266.png 300w" sizes="(max-width: 415px) 100vw, 415px" /></a></figure>
</div>
</div>



<p class="wp-block-paragraph">　管理者権限でPowerShellを立ち上げ、以下のコマンドを実行する。Ubuntuがインストールされるので再度再起動する。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>wsl --install</code></pre></div>



<p class="wp-block-paragraph">　スタートメニューに「Ubuntu」が追加されているので、これをクリックするとUbuntuが立ち上がるとともにターミナルが表示される。</p>



<h2 class="wp-block-heading">WSL2の環境構築</h2>



<h3 class="wp-block-heading">必要なツールをインストール</h3>



<p class="wp-block-paragraph">　以下のコマンドを実行する。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>sudo apt install git git-lfs python3-pip python3-venv</code></pre></div>



<p class="wp-block-paragraph">　python &#8211;versionと叩いてpythonが入っていることを確認する。入っていなければ以下のコマンドでインストールする。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>sudo apt install python3.12</code></pre></div>



<p class="wp-block-paragraph">　Python環境構築用にuvをインストール</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>python3 -m pip install --user -U uv
uv --version</code></pre></div>



<p class="wp-block-paragraph">　uvのバージョンが表示されなければPATHが通っていないので、設定してあげる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>echo &#39;export PATH=&quot;$HOME/.local/bin:$PATH&quot;&#39; &gt;&gt; ~/.bashrc
source ~/.bashrc</code></pre></div>



<p class="wp-block-paragraph">　作業ディレクトリを作成する。今回はユーザーフォルダ直下に「litert-conversion」という名前のディレクトリを作成。<br>　そして、作成したフォルダへ移動する。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>mkdir -p ~/litert-conversion
cd ~/litert-conversion</code></pre></div>



<p class="wp-block-paragraph">　仮想環境を作成する。なお、Python3.14を使うとtorchaoでtyping.Unionエラーが出るそうなのでPython3.12を使うことを推奨（1敗）。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>python3.12 -m venv litert-lm-20260719</code></pre></div>


<a rel="noopener" href="https://github.com/pytorch/ao/issues/3619?utm_source=chatgpt.com" title="fail to import torchao.quantization.pt2e · Issue #3619 · pytorch/ao" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/3fcb23057f7a9482bb68ca22ce21a320.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">fail to import torchao.quantization.pt2e · Issue #3619 · pytorch/ao</div><div class="blogcard-snippet external-blogcard-snippet">import torch,torchao import torchao.quantization.pt2e There is following issue: Traceback (most recent call last): File &#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/pytorch/ao/issues/3619" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>


<p class="wp-block-paragraph">　仮想環境の立ち上げは以下のコマンドで行う。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>source litert-lm-20260719/bin/activate</code></pre></div>



<p class="wp-block-paragraph">　立ち上がったら、以下のコマンドを実行してlitert-torch-nightlyをインストールする。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>python -m pip install --upgrade pip
python -m pip install uv
uv tool install --python 3.12 litert-torch-nightly</code></pre></div>



<p class="wp-block-paragraph">　uv tool listと入力・実行した際に以下のようになっていればOK。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="775" height="58" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-1.jpg" alt="" class="wp-image-627" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-1.jpg 775w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-1-300x22.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-1-768x57.jpg 768w" sizes="(max-width: 775px) 100vw, 775px" /></figure>



<p class="wp-block-paragraph">　litert-torchが立ち上がるか、以下のコマンドで確認する。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>litert-torch --help</code></pre></div>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-2.jpg"><img loading="lazy" decoding="async" width="565" height="419" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-2.jpg" alt="" class="wp-image-629" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-2.jpg 565w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-2-300x222.jpg 300w" sizes="(max-width: 565px) 100vw, 565px" /></a><figcaption class="wp-element-caption">こんな感じで表示されればOK。「q」と入力することで元の画面に戻れる。</figcaption></figure>



<h3 class="wp-block-heading">変換対象のモデルを配置</h3>



<p class="wp-block-paragraph">　変換するモデルが未ダウンロードであれば、huggingface-hubをpipしてダウンロードしてもよいが、今回はモデルは既にWindows側でダウンロード済みのため、それをLinux環境にコピーして使う。<br>　エクスプローラーで以下の赤枠を選択すると、Linux側のファイルを参照できる。</p>



<p class="wp-block-paragraph">　今回は、作成した作業ディレクトリと同じ階層にモデルを配置した。使うモデルはQwen2.5 Coder-7B Instruct。</p>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-3-1.jpg"><img loading="lazy" decoding="async" width="978" height="517" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-3-1.jpg" alt="" class="wp-image-670" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-3-1.jpg 978w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-3-1-300x159.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-3-1-768x406.jpg 768w" sizes="(max-width: 978px) 100vw, 978px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-4.jpg"><img loading="lazy" decoding="async" width="978" height="517" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-4.jpg" alt="" class="wp-image-633" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-4.jpg 978w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-4-300x159.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-4-768x406.jpg 768w" sizes="(max-width: 978px) 100vw, 978px" /></a><figcaption class="wp-element-caption">変換対象のモデルファイルを格納したディレクトリ</figcaption></figure>



<p class="wp-block-paragraph">　作業ディレクトリに変換したモデルを出力するためのoutputフォルダを作成する。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>mkdir -p ~/litert-conversion/output</code></pre></div>



<h2 class="wp-block-heading">モデルを変換</h2>



<p class="wp-block-paragraph">　&#8211;quantization_recipeで量子化の形式を選択できるとのこと。今回は「dynamic_wi4_afp32」を選択。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>litert-torch export_hf --model=&quot;$HOME/Qwen2.5-Coder-7B-Instruct&quot; --output_dir=&quot;$HOME/litert-conversion/output&quot; --externalize_embedder --quantization_recipe=dynamic_wi4_afp32</code></pre></div>



<p class="wp-block-paragraph">　実行中のログは以下のとおり。変換には7分半ほどかかった。</p>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-5.jpg"><img loading="lazy" decoding="async" width="2560" height="1392" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-5.jpg" alt="" class="wp-image-639" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-5.jpg 2560w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-5-300x163.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-5-1024x557.jpg 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-5-768x418.jpg 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-5-1536x835.jpg 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-5-2048x1114.jpg 2048w" sizes="(max-width: 2560px) 100vw, 2560px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-6.jpg"><img loading="lazy" decoding="async" width="1280" height="1308" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-6.jpg" alt="" class="wp-image-640" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-6.jpg 1280w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-6-294x300.jpg 294w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-6-1002x1024.jpg 1002w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-6-768x785.jpg 768w" sizes="(max-width: 1280px) 100vw, 1280px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-7.jpg"><img loading="lazy" decoding="async" width="1280" height="1392" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-7.jpg" alt="" class="wp-image-641" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-7.jpg 1280w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-7-276x300.jpg 276w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-7-942x1024.jpg 942w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-7-768x835.jpg 768w" sizes="(max-width: 1280px) 100vw, 1280px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-8-1.jpg"><img loading="lazy" decoding="async" width="1277" height="732" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-8-1.jpg" alt="" class="wp-image-658" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-8-1.jpg 1277w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-8-1-300x172.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-8-1-1024x587.jpg 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-8-1-768x440.jpg 768w" sizes="(max-width: 1277px) 100vw, 1277px" /></a></figure>



<p class="wp-block-paragraph">　ちなみに、今回の変換に当たってメモリの割り当ては以下のようにした。RAM70GB、スワップ25GBでもメモリ不足になり、最終的にRAM70GB、スワップ50GBでようやく成功した…。</p>



<figure class="wp-block-image size-large"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-9.png"><img loading="lazy" decoding="async" width="1024" height="631" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-9-1024x631.png" alt="" class="wp-image-643" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-9-1024x631.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-9-300x185.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-9-768x474.png 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-9.png 1286w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-7.png"><img loading="lazy" decoding="async" width="828" height="735" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-7.png" alt="" class="wp-image-637" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-7.png 828w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-7-300x266.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-7-768x682.png 768w" sizes="(max-width: 828px) 100vw, 828px" /></a></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-8.png"><img loading="lazy" decoding="async" width="828" height="735" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-8.png" alt="" class="wp-image-638" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-8.png 828w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-8-300x266.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-8-768x682.png 768w" sizes="(max-width: 828px) 100vw, 828px" /></a></figure>
</div>
</div>



<p class="wp-block-paragraph">　生成されたモデルファイルは以下のとおり。元々は14GB強のモデルが4GB弱になった。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-10.jpg"><img loading="lazy" decoding="async" width="978" height="517" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-10.jpg" alt="" class="wp-image-672" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-10.jpg 978w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-10-300x159.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-10-768x406.jpg 768w" sizes="(max-width: 978px) 100vw, 978px" /></a></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-9.jpg"><img loading="lazy" decoding="async" width="978" height="517" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-9.jpg" alt="" class="wp-image-645" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-9.jpg 978w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-9-300x159.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-9-768x406.jpg 768w" sizes="(max-width: 978px) 100vw, 978px" /></a></figure>
</div>
</div>



<h2 class="wp-block-heading">変換したモデルを実行してみる（CPU推論）</h2>



<p class="wp-block-paragraph">　モデルをWindows側にコピーして、以下のコードで実行してみる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import os
import psutil
import time
import litert_lm

process = psutil.Process(os.getpid())
mem_before = process.memory_info().rss / 1024**2  # MB

model_path = r&quot;H:\LLM_Models\litert-lm\qwen2.5-coder-7b-it-dynamic_wi4_afp32\qwen2.5-coder-7b-it-dynamic_wi4_afp32.litertlm&quot;

PROMPT = (
    &quot;transformersとFAISSとstreamlitを使った、&quot;
    &quot;QAチャットボットをPythonで構築して。&quot;
)


process = psutil.Process(os.getpid())
mem_before = process.memory_info().rss / 1024**2
start = time.perf_counter()

with litert_lm.Engine(
    str(model_path),
    backend=litert_lm.Backend.CPU(),
) as engine:

    with engine.create_conversation() as conversation:
        response = conversation.send_message(PROMPT)

        answer = response[&quot;content&quot;][0][&quot;text&quot;]

        mem_during = process.memory_info().rss / 1024**2

end = time.perf_counter()

mem_after = process.memory_info().rss / 1024**2

print(answer)

print(&quot;=&quot; * 60)
print(f&quot;実行前メモリ使用量       : {mem_before:.2f} MB&quot;)
print(f&quot;モデル使用中メモリ使用量 : {mem_during:.2f} MB&quot;)
print(f&quot;解放後メモリ使用量       : {mem_after:.2f} MB&quot;)
print(f&quot;モデル使用中の増加量     : {mem_during - mem_before:.2f} MB&quot;)
print(f&quot;実行時間                 : {end - start:.3f} 秒&quot;)</code></pre></div>



<p class="wp-block-paragraph">　出力結果はいい感じ。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box block-box sticky st-blue">
<p class="wp-block-paragraph">もちろんです。以下は、transformersとFAISSとstreamlitを使用して質問応答チャットボットを構築するためのPythonコードの基本的な例です。</p>



<p class="wp-block-paragraph">まず、必要なライブラリをインストールします。<br><br>pip install transformers faiss-cpu streamlit</p>



<p class="wp-block-paragraph">次に、以下のコードを実行します。</p>



<p class="wp-block-paragraph">import streamlit as st<br>from transformers import pipeline<br>import faiss<br>import numpy as np<br><br># transformersのpipelineを使用して、質問応答モデルをロードします。<br>qa = pipeline(&#8220;question-answering&#8221;)<br><br># ここでは、事前に学習済みのモデルを使用しますが、必要に応じて独自のモデルを読み込むこともできます。<br>model_name = &#8220;bert-base-japanese&#8221;<br><br># データセットをロードします。ここでは、事前に学習済みのモデルを使用しますが、必要に応じて独自のデータセットを使用することもできます。<br># dataset = load_dataset(&#8220;squad_japanese&#8221;)<br><br># データをベクトル化します。<br># sentences = dataset[&#8220;train&#8221;][&#8220;context&#8221;] + dataset[&#8220;train&#8221;][&#8220;question&#8221;]<br># inputs = qa.tokenizer(sentences, return_tensors=&#8221;pt&#8221;, truncation=True, padding=True)<br># with torch.no_grad():<br>#     embeddings = model(**inputs).last_hidden_state<br><br># ベクトルを保存します。<br># np.save(&#8220;embeddings.npy&#8221;, embeddings)<br><br># 事前に学習済みのベクトルを読み込みます。<br>embeddings = np.load(&#8220;embeddings.npy&#8221;)<br><br># FAISSでインデックスを作成します。<br>index = faiss.IndexFlatL2(embeddings.shape[1])<br>index.add(embeddings)<br><br># Streamlitのアプリケーションを作成します。<br>st.title(&#8220;質問応答チャットボット&#8221;)<br><br># ユーザーからの入力を取得します。<br>query = st.text_input(&#8220;質問を入力してください:&#8221;)<br><br># 入力された質問をベクトル化します。<br>inputs = qa.tokenizer([query], return_tensors=&#8221;pt&#8221;, truncation=True, padding=True)<br>with torch.no_grad():<br>    query_embedding = model(**inputs).last_hidden_state<br><br># 最も近いベクトルを検索します。<br>D, I = index.search(query_embedding, 1)<br><br># 最も近いベクトルに対応する回答を取得します。<br>answer = qa(question=query, context=dataset[&#8220;train&#8221;][&#8220;context&#8221;][I[0][0]])[&#8220;answer&#8221;]<br><br># 回答を表示します。<br>st.write(answer)</p>



<p class="wp-block-paragraph">このコードは、質問応答モデルを使用してユーザーからの質問を処理し、最も近いベクトルに対応する回答を返すシンプルなチャットボットを実装しています。ただし、このコードは非常に単純なものです。実際のアプリケーションでは、データの事前処理、モデルの調整、ユーザーインターフェースの改善など、多くの要素を考慮する必要があります。</p>



<p class="wp-block-paragraph">実行前メモリ使用量 : 646.44 MB<br>モデル使用中メモリ使用量 : 4143.16 MB<br>解放後メモリ使用量 : 101.20 MB<br>モデル使用中の増加量 : 3496.73 MB<br>実行時間 : 87.121 秒</p>
</div>



<p class="wp-block-paragraph">↓生成テストの実行結果をHTML出力したもの</p>



<div class="wp-block-file"><a id="wp-block-file--media-68256f6a-6f35-449a-90c3-c3e6ab072235" href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-test.html">litert-lm-test</a><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/litert-lm-test.html" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-68256f6a-6f35-449a-90c3-c3e6ab072235">ダウンロード</a></div>



<h2 class="wp-block-heading">今回作成したモデルのHuggingFaceリポジトリ</h2>



<p class="wp-block-paragraph"><a href="https://huggingface.co/Uranos8685/qwen2.5-coder-7b-it-dynamic_wi4_afp32">Uranos8685/qwen2.5-coder-7b-it-dynamic_wi4_afp32 · Hugging Face</a></p><p>The post <a href="https://toybox.uranos8685.mydns.jp/625/litert-lm%e7%94%a8%e3%81%absafetensors%e5%bd%a2%e5%bc%8f%e3%81%ae%e3%83%a2%e3%83%87%e3%83%ab%e3%82%92%e5%a4%89%e6%8f%9b%e3%81%99%e3%82%8b/">Safetensors形式のモデルをLiteRT-LM形式に変換してみる</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://toybox.uranos8685.mydns.jp/625/litert-lm%e7%94%a8%e3%81%absafetensors%e5%bd%a2%e5%bc%8f%e3%81%ae%e3%83%a2%e3%83%87%e3%83%ab%e3%82%92%e5%a4%89%e6%8f%9b%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">625</post-id>	</item>
		<item>
		<title>Python＋OpenVINOでSafetensors形式のモデルを実行してみる</title>
		<link>https://toybox.uranos8685.mydns.jp/596/python%ef%bc%8bopenvino%e3%81%a7llm%e3%82%92%e5%ae%9f%e8%a1%8c%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f/</link>
					<comments>https://toybox.uranos8685.mydns.jp/596/python%ef%bc%8bopenvino%e3%81%a7llm%e3%82%92%e5%ae%9f%e8%a1%8c%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f/#respond</comments>
		
		<dc:creator><![CDATA[Uranos8685]]></dc:creator>
		<pubDate>Fri, 17 Jul 2026 13:12:28 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://toybox.uranos8685.mydns.jp/?p=596</guid>

					<description><![CDATA[<p>実行環境 　備忘録。2026年7月時点のWindows Updateは全て適用した状態のPC。　OpenVINOのSystem Requirementsでは、Intel CPUとARM Chipsetのみのサポートとなっ [&#8230;]</p>
<p>The post <a href="https://toybox.uranos8685.mydns.jp/596/python%ef%bc%8bopenvino%e3%81%a7llm%e3%82%92%e5%ae%9f%e8%a1%8c%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f/">Python＋OpenVINOでSafetensors形式のモデルを実行してみる</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">実行環境</h2>



<p class="wp-block-paragraph">　備忘録。2026年7月時点のWindows Updateは全て適用した状態のPC。<br />　OpenVINOのSystem Requirementsでは、Intel CPUとARM Chipsetのみのサポートとなっているが一応AMD CPUもイケるらしい。</p>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/実行環境.jpg"><img loading="lazy" decoding="async" width="1024" height="953" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/実行環境.jpg" alt="" class="wp-image-692" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/実行環境.jpg 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/実行環境-300x279.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/実行環境-768x715.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a rel="noopener" href="https://docs.openvino.ai/2026/about-openvino/release-notes-openvino/system-requirements.html" title="System Requirements &#8212; OpenVINO??&#65378;  documentation" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.openvino.ai%2F2026%2Fabout-openvino%2Frelease-notes-openvino%2Fsystem-requirements.html?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">System Requirements &#8212; OpenVINO??&#65378;  documentation</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.openvino.ai/2026/about-openvino/release-notes-openvino/system-requirements.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.openvino.ai</div></div></div></div></a></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-embed is-type-wp-embed is-provider-hatena-blog wp-block-embed-hatena-blog"><div class="wp-block-embed__wrapper">

<a rel="noopener" href="https://tadaoyamaoka.hatenablog.com/entry/2023/02/04/182216" title="Whisperモデルの軽量化 - TadaoYamaokaの開発日記" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/4189c9f62914ed16ad3de677931f3e44.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Whisperモデルの軽量化 - TadaoYamaokaの開発日記</div><div class="blogcard-snippet external-blogcard-snippet">ONNXにしたWhisperのモデルの推論を速くするために、以下の方法を試した。 OpenVINOで推論 FP16化 INT8量子化 Whisperのモデルはbaseを使用している。 OpenVINOで推論 OpenVINOは、intelの...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://tadaoyamaoka.hatenablog.com/entry/2023/02/04/182216" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">tadaoyamaoka.hatenablog.com</div></div></div></div></a>
</div></figure>
</div>
</div>



<h2 class="wp-block-heading">環境構築</h2>



<p class="wp-block-paragraph">　上記System Requirementsにて、Pythonは3.10-3.14が要件とのこと。<br />　AnacondaにてPython 3.14のまっさらな環境を作成した。<br /><br />　公式ドキュメントによると「OpenVINOランタイムは、動作に特定のC++ライブラリを必要とします」とのことで、以下の開発環境を推奨していた。今回はCmakeとIntelHD Graphicsドライバーのみ未インストールの環境で実行した。</p>



<ul class="wp-block-list">
<li><a href="https://visualstudio.microsoft.com/downloads/">Microsoft Visual Studio 2019以降</a></li>



<li><a href="https://cmake.org/download/">CMake</a>&nbsp;3.16以降</li>



<li><a href="https://www.python.org/downloads/">Python</a>&nbsp;3.10～3.14</li>



<li><a href="https://downloadcenter.intel.com/product/80939/Graphics-Drivers"></a>GPU 上での推論には<a href="https://downloadcenter.intel.com/product/80939/Graphics-Drivers">Intel® HD Graphics ドライバーが必要です</a></li>
</ul>



<p class="wp-block-paragraph">　Visual Studioでインストールしているコンポーネントは次のとおり。</p>



<figure class="wp-block-image size-large"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-11.png"><img loading="lazy" decoding="async" width="1024" height="576" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-11-1024x576.png" alt="" class="wp-image-684" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-11-1024x576.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-11-300x169.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-11-768x432.png 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-11-240x135.png 240w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-11-320x180.png 320w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-11-640x360.png 640w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-11.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">　作成したPython環境には、下表のライブラリをpip installした。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-center" data-align="center"><strong>ライブラリ名</strong></th><th class="has-text-align-center" data-align="center"><strong>pip コマンド</strong></th></tr></thead><tbody><tr><td class="has-text-align-center" data-align="center">OpenVINO GenAI</td><td class="has-text-align-center" data-align="center">pip install openvino-genai</td></tr><tr><td class="has-text-align-center" data-align="center">Optimum Intel</td><td class="has-text-align-center" data-align="center">pip install optimum[openvino,nncf]</td></tr><tr><td class="has-text-align-center" data-align="center">Jupyter Lab</td><td class="has-text-align-center" data-align="center">pip install jupyterlab</td></tr><tr><td class="has-text-align-center" data-align="center">ipywidgets</td><td class="has-text-align-center" data-align="center">pip install ipywidgets</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">　pip installするライブラリの参考にしたドキュメントはこちら。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a rel="noopener" href="https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html?PACKAGE=OPENVINO_GENAI&#038;VERSION=v_2026_2_1&#038;OP_SYSTEM=WINDOWS&#038;DISTRIBUTION=PIP" title="Download the Intel Distribution of OpenVINO Toolkit" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/67fb93e1ed1890797d1934cb1ac44761.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Download the Intel Distribution of OpenVINO Toolkit</div><div class="blogcard-snippet external-blogcard-snippet">Select your operating system, distribution channel and then download your customized installation of openVINO.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.intel.com</div></div></div></div></a></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a rel="noopener" href="https://docs.openvino.ai/2026/openvino-workflow-generative/inference-with-optimum-intel.html" title="Inference with Optimum Intel &#8212; OpenVINO???  documentation" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.openvino.ai%2F2026%2Fopenvino-workflow-generative%2Finference-with-optimum-intel.html?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Inference with Optimum Intel &#8212; OpenVINO???  documentation</div><div class="blogcard-snippet external-blogcard-snippet">Learn how to use the native OpenVINO package to execute LLM models.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.openvino.ai/2026/openvino-workflow-generative/inference-with-optimum-intel.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.openvino.ai</div></div></div></div></a></div>
</div>



<p class="wp-block-paragraph">　構築後の仮想環境のライブラリは以下のとおり。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box block-box sticky st-yellow">

<p class="wp-block-paragraph">annotated-doc==0.0.4<br>anyio==4.14.2<br>argon2-cffi==25.1.0<br>argon2-cffi-bindings==25.1.0<br>arrow==1.4.0<br>asttokens==3.0.2<br>async-lru==2.3.0<br>attrs==26.1.0<br>babel==2.18.0<br>beautifulsoup4==4.15.0<br>bleach==6.4.0<br>certifi==2026.6.17<br>cffi==2.1.0<br>charset-normalizer==3.4.9<br>click==8.4.2<br>colorama==0.4.6<br>comm==0.2.3<br>debugpy==1.8.21<br>decorator==5.3.1<br>defusedxml==0.7.1<br>executing==2.2.1<br>fastjsonschema==2.21.2<br>filelock==3.30.2<br>fqdn==1.5.1<br>fsspec==2026.6.0<br>h11==0.16.0<br>hf-xet==1.5.2<br>httpcore==1.0.9<br>httpx==0.28.1<br>huggingface_hub==1.24.0<br>idna==3.18<br>ipykernel==7.3.0<br>ipython==9.15.0<br>ipython_pygments_lexers==1.1.1<br>ipywidgets==8.1.8<br>isoduration==20.11.0<br>jedi==0.20.0<br>Jinja2==3.1.6<br>joblib==1.5.3<br>json5==0.15.0<br>jsonpointer==3.1.1<br>jsonschema==4.26.0<br>jsonschema-specifications==2025.9.1<br>jupyter-events==0.12.1<br>jupyter-lsp==2.3.1<br>jupyter_builder==1.1.0<br>jupyter_client==8.9.1<br>jupyter_core==5.9.1<br>jupyter_server==2.20.0<br>jupyter_server_terminals==0.5.4<br>jupyterlab==4.6.1<br>jupyterlab_pygments==0.3.0<br>jupyterlab_server==2.28.0<br>jupyterlab_widgets==3.0.16<br>lark==1.3.1<br>markdown-it-py==4.2.0<br>MarkupSafe==3.0.3<br>matplotlib-inline==0.2.2<br>mdurl==0.1.2<br>mistune==3.3.3<br>mpmath==1.3.0<br>narwhals==2.24.0<br>nbclient==0.11.0<br>nbconvert==7.17.1<br>nbformat==5.10.4<br>nest-asyncio2==1.7.2<br>networkx==3.4.2<br>ninja==1.13.0<br>nncf==3.2.0<br>notebook_shim==0.2.4<br>numpy==2.4.6<br>openvino==2026.2.1<br>openvino-genai==2026.2.1.0<br>openvino-telemetry==2025.2.0<br>openvino-tokenizers==2026.2.1.0<br>optimum==2.2.0<br>optimum-intel==2.0.0<br>packaging==26.2<br>pandocfilters==1.5.1<br>parso==0.8.7<br>platformdirs==4.10.0<br>prometheus_client==0.25.0<br>prompt_toolkit==3.0.52<br>psutil==7.2.2<br>pure_eval==0.2.3<br>pycparser==3.0<br>pydot==3.0.4<br>Pygments==2.20.0<br>pyparsing==3.3.2<br>python-dateutil==2.9.0.post0<br>python-json-logger==4.1.0<br>pywinpty==3.0.5<br>PyYAML==6.0.3<br>pyzmq==27.1.0<br>referencing==0.37.0<br>regex==2026.7.10<br>requests==2.34.2<br>rfc3339-validator==0.1.4<br>rfc3986-validator==0.1.1<br>rfc3987-syntax==1.1.0<br>rich==15.0.0<br>rpds-py==2026.6.3<br>safetensors==0.7.0<br>scikit-learn==1.9.0<br>scipy==1.18.0<br>Send2Trash==2.1.0<br>setuptools==83.0.0<br>shellingham==1.5.4<br>six==1.17.0<br>soupsieve==2.8.4<br>stack-data==0.6.3<br>sympy==1.14.0<br>tabulate==0.10.0<br>terminado==0.18.1<br>threadpoolctl==3.6.0<br>tinycss2==1.5.1<br>tokenizers==0.22.2<br>torch==2.13.0<br>tornado==6.5.7<br>tqdm==4.68.4<br>traitlets==5.15.1<br>transformers==5.0.0<br>typer==0.27.0<br>typer-slim==0.24.0<br>typing_extensions==4.16.0<br>tzdata==2026.3<br>uri-template==1.3.0<br>urllib3==2.7.0<br>wcwidth==0.8.2<br>webcolors==25.10.0<br>webencodings==0.5.1<br>websocket-client==1.9.0<br>widgetsnbextension==4.0.15</p>

</div>



<p class="wp-block-paragraph">↓今回作った環境のRequirements.txt</p>



<div class="wp-block-file"><a id="wp-block-file--media-7e37b3fe-e4cb-4191-988e-48d6cd302d81" href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino_env_requirements.txt">openvino_env_requirements</a><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino_env_requirements.txt" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-7e37b3fe-e4cb-4191-988e-48d6cd302d81">ダウンロード</a></div>



<p class="wp-block-paragraph">　ちなみに、optinumをpip installするとこれらのライブラリが一気にインストールされた。<br />「Successfully installed annotated-doc-0.0.4 click-8.4.2 filelock-3.30.2 fsspec-2026.6.0 hf-xet-1.5.2 huggingface_hub-1.24.0 joblib-1.5.3 markdown-it-py-4.2.0 mdurl-0.1.2 mpmath-1.3.0 narwhals-2.24.0 networkx-3.4.2 ninja-1.13.0 nncf-3.2.0 optimum-2.2.0 optimum-intel-2.0.0 pydot-3.0.4 pyparsing-3.3.2 regex-2026.7.10 rich-15.0.0 safetensors-0.7.0 scikit-learn-1.9.0 scipy-1.18.0 setuptools-83.0.0 shellingham-1.5.4 sympy-1.14.0 tabulate-0.10.0 threadpoolctl-3.6.0 tokenizers-0.22.2 torch-2.13.0 tqdm-4.68.4 transformers-5.0.0 typer-0.27.0 typer-slim-0.24.0」</p>



<h2 class="wp-block-heading">Transformersモデルの実行（CPU推論）</h2>



<h3 class="wp-block-heading">8ビット量子化での推論</h3>



<p class="wp-block-paragraph">　以下のリンクを参考にモデルを実行してみる。</p>


<a rel="noopener" href="https://huggingface.co/docs/optimum-intel/openvino/inference" title="Inference · Hugging Face" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/969de81f5bb7a2e0b6268c166e0cb34c.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Inference · Hugging Face</div><div class="blogcard-snippet external-blogcard-snippet">We’re on a journey to advance and democratize artificial intelligence through open source and open science.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://huggingface.co/docs/optimum-intel/openvino/inference" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">huggingface.co</div></div></div></div></a>


<p class="wp-block-paragraph">　実行可能なモデルは以下のものらしい。</p>


<a rel="noopener" href="https://huggingface.co/docs/optimum-intel/openvino/models" title="Supported models · Hugging Face" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/b698f2522fa0d6e01f157c95ca960af8.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Supported models · Hugging Face</div><div class="blogcard-snippet external-blogcard-snippet">We’re on a journey to advance and democratize artificial intelligence through open source and open science.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://huggingface.co/docs/optimum-intel/openvino/models" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">huggingface.co</div></div></div></div></a>


<p class="wp-block-paragraph">　今回はDL済みだったQwen2.5 Coder7B itを使う。</p>


<a rel="noopener" href="https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct" title="Qwen/Qwen2.5-Coder-7B-Instruct · Hugging Face" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/94e6bf51fe9688c7ce8e505b9d9116de.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Qwen/Qwen2.5-Coder-7B-Instruct · Hugging Face</div><div class="blogcard-snippet external-blogcard-snippet">We’re on a journey to advance and democratize artificial intelligence through open source and open science.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">huggingface.co</div></div></div></div></a>


<p class="wp-block-paragraph">　実行したコードは以下のとおり。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import os
import psutil
import time
from optimum.intel import OVModelForCausalLM
from transformers import AutoProcessor
process = psutil.Process(os.getpid())
mem_before = process.memory_info().rss / 1024**2  # MB
start = time.time()
model_path = r&quot;H:\LLM_Models\safetensor\Qwen\Qwen2.5-Coder-7B-Instruct&quot;
processor = AutoProcessor.from_pretrained(model_path)
model = OVModelForCausalLM.from_pretrained(model_path)
messages = [
    {&quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;あなたは有能なAIアシスタントです。&quot;},
    {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;面白いジョークを話して。またどこが面白いかも解説してください。&quot;},
]
inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    return_dict=True,
    return_tensors=&quot;pt&quot;,
    add_generation_prompt=True,
    enable_thinking=False
).to(model.device)
input_len = inputs[&quot;input_ids&quot;].shape[-1]
# Generate output
outputs = model.generate(**inputs, max_new_tokens=1024)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
mem_after = process.memory_info().rss / 1024**2  # MB
end = time.time()
print(response)
print(&quot;=&quot; * 60)
print(f&quot;実行前メモリ使用量: {mem_before:.2f} MB&quot;)
print(f&quot;実行後メモリ使用量: {mem_after:.2f} MB&quot;)
print(f&quot;実行時間: {end - start:.3f}&quot;)
# OpenVINO IR形式を保存
# 次回以降model_pathに保存済みのOpenVINO IR形式へのpathを渡せば変換が省略される。
open_vino_save_path = r&quot;H:\LLM_Models\open_vino\Qwen\Qwen2.5-Coder-7B-Instruct&quot;
model.save_pretrained(open_vino_save_path)
processor.save_pretrained(open_vino_save_path)</code></pre></div>



<p class="wp-block-paragraph">　出力された情報は以下のとおり。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box block-box sticky st-blue">

<p class="wp-block-paragraph">No OpenVINO files were found for H:\LLM_Models\safetensor\Qwen\Qwen2.5-Coder-7B-Instruct, setting <code>export=True</code> to convert the model to the OpenVINO IR. Don&#8217;t forget to save the resulting model with <code>.save_pretrained()</code><br><code>torch_dtype</code> is deprecated! Use <code>dtype</code> instead!<br><br><code>loss_type=None</code> was set in the config but it is unrecognized. Using the default loss: <code>ForCausalLMLoss</code>.<br>c:\ProgramData\anaconda3\envs\openvino_20260717\Lib\site-packages\transformers\cache_utils.py:132: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can&#8217;t record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!<br>if not self.is_initialized or self.keys.numel() == 0:<br>c:\ProgramData\anaconda3\envs\openvino_20260717\Lib\site-packages\transformers\masking_utils.py:171: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can&#8217;t record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!<br>if (padding_length := kv_length + kv_offset &#8211; attention_mask.shape[-1]) &gt; 0:<br>c:\ProgramData\anaconda3\envs\openvino_20260717\Lib\site-packages\optimum\exporters\openvino\patching_utils.py:247: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.<br>torch.tensor(0.0, device=mask.device, dtype=dtype),<br>c:\ProgramData\anaconda3\envs\openvino_20260717\Lib\site-packages\optimum\exporters\openvino\patching_utils.py:248: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.<br>torch.tensor(torch.finfo(torch.float16).min, device=mask.device, dtype=dtype),<br>c:\ProgramData\anaconda3\envs\openvino_20260717\Lib\site-packages\transformers\integrations\sdpa_attention.py:77: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can&#8217;t record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!<br>is_causal = query.shape[2] &gt; 1 and attention_mask is None and is_causal<br>INFO:nncf:Statistics of the bitwidth distribution:<br>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+<br>| Weight compression mode | % all parameters (layers) | % ratio-defining parameters (layers) |<br>+===========================+=============================+========================================+<br>| int8_asym, per-channel | 100% (198 / 198) | 100% (198 / 198) |<br>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+<br></p>


<p class="wp-block-paragraph">もちろんです、以下にジョークを聞かせていただきます。</p>


<p class="wp-block-paragraph">「なぜパン屋さんには猫がいないのですか？」</p>


<p class="wp-block-paragraph">答え：猫はパンを作ります。</p>


<p class="wp-block-paragraph">このジョークの面白さは、「猫」と「パン」という単語の類似性を利用しています。一般的には猫とパンは関係がないように思われますが、ジョークではその関連性を利用して笑いを生み出しています。これは言葉遊びや双关語を用いて表現したものです。&lt;|im_end|&gt;</p>


<p class="wp-block-paragraph">実行前メモリ使用量: 484.25 MB<br>実行後メモリ使用量: 14306.33 MB<br>差引メモリ使用量: 13822.08 MB<br>実行時間: 83.053 秒</p>

</div>



<p class="wp-block-paragraph">　モデルファイルのサイズ比較は以下のとおり。ちなみに、変換時にはピークで20GB弱メモリを消費した。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-2.jpg"><img loading="lazy" decoding="async" width="978" height="517" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-2.jpg" alt="" class="wp-image-607" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-2.jpg 978w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-2-300x159.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-2-768x406.jpg 768w" sizes="(max-width: 978px) 100vw, 978px" /></a><figcaption class="wp-element-caption">変換前のtransformers形式</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-1-1.jpg"><img loading="lazy" decoding="async" width="978" height="517" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-1-1.jpg" alt="" class="wp-image-608" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-1-1.jpg 978w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-1-1-300x159.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-1-1-768x406.jpg 768w" sizes="(max-width: 978px) 100vw, 978px" /></a><figcaption class="wp-element-caption">OpenVINO IR形式に変換後</figcaption></figure>
</div>
</div>



<p class="wp-block-paragraph">　小さくなった理由としては、以下のリンク先の「If quantization_config is not provided, model will be exported in 8 bits by default when it has more than 1 billion parameters. You can disable it with&nbsp;<code>load_in_8bit=False</code>.」という記載から、1Billionを超えるパラメータ数のモデルは、特に指定しないと8ビット量子化されているためと思われ。</p>


<a rel="noopener" href="https://huggingface.co/docs/optimum-intel/openvino/optimization#4-bit" title="Optimization · Hugging Face" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/bb4090679d8c4d5f5a697da0a49a45a5.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Optimization · Hugging Face</div><div class="blogcard-snippet external-blogcard-snippet">We’re on a journey to advance and democratize artificial intelligence through open source and open science.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://huggingface.co/docs/optimum-intel/openvino/optimization" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">huggingface.co</div></div></div></div></a>


<p class="wp-block-paragraph">　続いて、先ほど保存したOpenVINO IR形式のQwen2.5 Coderを読み込んで実行してみる。コードは一緒で、読み込み先のモデルパスのみ異なる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>process = psutil.Process(os.getpid())
mem_before = process.memory_info().rss / 1024**2  # MB
start = time.time()
processor = AutoProcessor.from_pretrained(open_vino_save_path)
model = OVModelForCausalLM.from_pretrained(open_vino_save_path)
messages = [
    {&quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;あなたは有能なAIアシスタントです。&quot;},
    {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;面白いジョークを話して。またどこが面白いかも解説してください。&quot;},
]
inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    return_dict=True,
    return_tensors=&quot;pt&quot;,
    add_generation_prompt=True,
    enable_thinking=False
).to(model.device)
input_len = inputs[&quot;input_ids&quot;].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=1024)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
mem_after = process.memory_info().rss / 1024**2  # MB
end = time.time()
print(response)
print(&quot;=&quot; * 60)
print(f&quot;実行前メモリ使用量: {mem_before:.2f} MB&quot;)
print(f&quot;実行後メモリ使用量: {mem_after:.2f} MB&quot;)
print(f&quot;実行時間: {end - start:.3f} 秒&quot;)</code></pre></div>



<div class="wp-block-cocoon-blocks-sticky-box blank-box block-box sticky st-blue">

<p class="wp-block-paragraph">もちろんです、以下に面白いジョークをお伝えします。</p>


<p class="wp-block-paragraph">ジョーク：「ある日、誰かが友人と話していたら、「最近、自分の人生の目標について考えているんだけど、何が一番大切なのか教えてね。」友人は答えを尋ねる。「それは何ですか？」「何でもいいんだよ。」友人は驚いて、「本当に何でもいいんだよ？」と反問した。答え者は笑って言った、「もちろんだよ。」」</p>


<p class="wp-block-paragraph">このジョークが面白い理由は以下の通りです：</p>


<ol class="wp-block-list">

<li>答え者の回答が単純で直感的で、予想外でした。</li>


<li>友人の反問は答え者の単純さを強調し、ジョークのギャグを高めました。</li>


<li>このジョークは、人生の目標や価値観についての深い思考を促進する可能性があります。</li>

</ol>


<p class="wp-block-paragraph">このジョークは、シンプルさと直感性が効果的なコミュニケーションと問題解決の方法を示すことができます。&lt;|im_end|&gt;</p>


<p class="wp-block-paragraph">実行前メモリ使用量: 696.95 MB<br>実行後メモリ使用量: 14376.63 MB<br>差引メモリ使用量: 13679.69 MB<br>実行時間: 61.783 秒</p>

</div>



<h3 class="wp-block-heading">Transformersで同じプロンプト・8ビット量子化で推論した場合</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
process = psutil.Process(os.getpid())
mem_before = process.memory_info().rss / 1024**2  # MB
start = time.time()
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForCausalLM.from_pretrained(
    model_path,
    quantization_config=quantization_config,
    torch_dtype=&quot;auto&quot;,
    device_map=&quot;auto&quot;,
)
tokenizer = AutoTokenizer.from_pretrained(model_path)
quantization_time = time.time()
messages = [
    {&quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;あなたは有能なAIアシスタントです。&quot;},
    {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;面白いジョークを話して。またどこが面白いかも解説してください。&quot;},
]
text = tokenizer.apply_chat_template(
    messages,
    temperature=0.1,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors=&quot;pt&quot;).to(model.device)
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=512
)
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
mem_after = process.memory_info().rss / 1024**2  # MB
end = time.time()
print(response)
print(&quot;=&quot; * 60)
print(f&quot;実行前メモリ使用量: {mem_before:.2f} MB&quot;)
print(f&quot;実行後メモリ使用量: {mem_after:.2f} MB&quot;)
print(f&quot;差引メモリ使用量: {mem_after - mem_before:.2f} MB&quot;)
print(f&quot;実行時間: {end - start:.3f} 秒&quot;)
print(f&quot;量子化処理を除いた推論時間: {end - quantization_time:.3f} 秒&quot;)
del model, tokenizer</code></pre></div>



<p class="wp-block-paragraph">　　ちなみに、普通にtransformersで同じモデル・プロンプトを実行した結果は以下のとおり。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box block-box sticky st-blue">

<p class="wp-block-paragraph">c:\ProgramData\anaconda3\envs\openvino_20260717\Lib\site-packages\bitsandbytes\autograd_functions.py:123: UserWarning: MatMul8bitLt: inputs will be cast from torch.bfloat16 to float16 during quantization<br>warnings.warn(f&#8221;MatMul8bitLt: inputs will be cast from {A.dtype} to float16 during quantization&#8221;)<br>もちろんです、以下にジョークをお聞かせします。</p>


<p class="wp-block-paragraph">「何が最も賢い動物ですか？」</p>


<p class="wp-block-paragraph">答え：「カエル」<br>（カエルの「知恵」は「知らす」という言葉から来ていると言われています）</p>


<p class="wp-block-paragraph">このジョークは、単純で分かりやすいですが、ユーモラスな要素があります。一般的な期待に反して、答えは意外と短く、直接的な答えを提供しています。これは、聴衆が予想外の答えを見つけることによって興味を引きます。さらに、「カエル」の「知恵」についての知識がある読者にとっては、ジョーク自体がより面白くなります。</p>


<p class="wp-block-paragraph">実行前メモリ使用量: 744.62 MB<br>実行後メモリ使用量: 22697.21 MB<br>差引メモリ使用量: 21952.59 MB<br>実行時間: 77.135 秒<br>量子化処理を除いた推論時間: 59.798 秒</p>

</div>



<h3 class="wp-block-heading">4ビット量子化での推論</h3>



<p class="wp-block-paragraph">　以下のコードで、任意に量子化したモデルを出力することが可能。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import os
import psutil
import time
from optimum.intel import OVModelForCausalLM
from transformers import AutoProcessor
model_path = r&quot;H:\LLM_Models\safetensor\Qwen\Qwen2.5-Coder-7B-Instruct&quot;
# モデル量子化用に追加でロード
from nncf import compress_weights, CompressWeightsMode
process = psutil.Process(os.getpid())
mem_before = process.memory_info().rss / 1024**2  # MB
start = time.time()
model = OVModelForCausalLM.from_pretrained(model_path,
                                           load_in_8bit=False, # これを指定することでデフォルトの8ビット量子化を無効化
                                           compile=False,   # この段階でモデルをコンパイルしても、その後4ビットモデルを作成⇒再コンパイルすることとなり無駄となる。
                                                            # Falseを指定することでコンパイルをキャンセルできる。
                                           )
# modeを指定することで量子化モードを指定できる。指定できるパラメータは以下のマークダウンを参照。
model.model = compress_weights(model.model,
                               mode=CompressWeightsMode.INT4_ASYM,
                              )
# プロセッサも保存する必要があるので読み込み
processor = AutoProcessor.from_pretrained(model_path)
# 量子化したモデルをOpenVINO IR形式で保存
open_vino_save_path_int4a = r&quot;H:\LLM_Models\open_vino\Qwen\Qwen2.5-Coder-7B-Instruct_INT4-ASYM&quot;
model.save_pretrained(open_vino_save_path_int4a)
processor.save_pretrained(open_vino_save_path_int4a)
end = time.time()
print(f&quot;実行時間: {end - start:.3f} 秒&quot;)
del model, processor</code></pre></div>



<p class="wp-block-paragraph">　出力された情報、モデルサイズ等は次のとおり。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box block-box sticky st-blue">

<p class="wp-block-paragraph">No OpenVINO files were found for H:\LLM_Models\safetensor\Qwen\Qwen2.5-Coder-7B-Instruct, setting <code>export=True</code> to convert the model to the OpenVINO IR. Don&#8217;t forget to save the resulting model with <code>.save_pretrained()</code></p>


<p class="wp-block-paragraph">INFO:nncf:Statistics of the bitwidth distribution:<br>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+<br>| Weight compression mode | % all parameters (layers) | % ratio-defining parameters (layers) |<br>+===========================+=============================+========================================+<br>| int8_asym, per-channel | 14% (2 / 198) | 0% (0 / 196) |<br>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+<br>| int4_asym, group size 128 | 86% (196 / 198) | 100% (196 / 196) |<br>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+</p>


<p class="wp-block-paragraph">実行時間: 56.518 秒</p>

</div>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="978" height="517" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-4.jpg" alt="" class="wp-image-685" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-4.jpg 978w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-4-300x159.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-4-768x406.jpg 768w" sizes="(max-width: 978px) 100vw, 978px" /></figure>



<p class="wp-block-paragraph">　圧縮モードについては以下のリンクを参考にした。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a rel="noopener" href="https://docs.openvino.ai/2026/openvino-workflow/model-optimization-guide/weight-compression.html#save-pretrained" title="LLM Weight Compression &#8212; OpenVINO???  documentation" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.openvino.ai%2F2026%2Fopenvino-workflow%2Fmodel-optimization-guide%2Fweight-compression.html%23save-pretrained?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">LLM Weight Compression &#8212; OpenVINO???  documentation</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.openvino.ai/2026/openvino-workflow/model-optimization-guide/weight-compression.html#save-pretrained" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.openvino.ai</div></div></div></div></a></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a rel="noopener" href="https://github.com/openvinotoolkit/nncf/blob/develop/docs/usage/post_training_compression/weights_compression/Usage.md" title="nncf/docs/usage/post_training_compression/weights_compression/Usage.md at develop · openvinotoolkit/nncf" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/19a8c192e3667b181f01bed25519ebd3.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">nncf/docs/usage/post_training_compression/weights_compression/Usage.md at develop · openvinotoolkit/nncf</div><div class="blogcard-snippet external-blogcard-snippet">Neural Network Compression Framework for enhanced OpenVINO™ inference &#8211; openvinotoolkit/nncf</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/openvinotoolkit/nncf/blob/develop/docs/usage/post_training_compression/weights_compression/Usage.md" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a></div>
</div>



<p class="wp-block-paragraph">　推論結果は以下のとおり。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>process = psutil.Process(os.getpid())
mem_before = process.memory_info().rss / 1024**2  # MB
start = time.time()
processor = AutoProcessor.from_pretrained(open_vino_save_path_int4a)
model = OVModelForCausalLM.from_pretrained(open_vino_save_path_int4a)
messages = [
    {&quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;あなたは有能なAIアシスタントです。&quot;},
    {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;面白いジョークを話して。またどこが面白いかも解説してください。&quot;},
]
processor = AutoProcessor.from_pretrained(model_path)
inputs = processor.apply_chat_template(
    messages,
    temperature=0.1,
    tokenize=True,
    return_dict=True,
    return_tensors=&quot;pt&quot;,
    add_generation_prompt=True,
    enable_thinking=False,
).to(model.device)
input_len = inputs[&quot;input_ids&quot;].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=1024)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
mem_after = process.memory_info().rss / 1024**2  # MB
end = time.time()
print(response)
print(&quot;=&quot; * 60)
print(f&quot;実行前メモリ使用量: {mem_before:.2f} MB&quot;)
print(f&quot;実行後メモリ使用量: {mem_after:.2f} MB&quot;)
print(f&quot;差引メモリ使用量: {mem_after - mem_before:.2f} MB&quot;)
print(f&quot;実行時間: {end - start:.3f} 秒&quot;)
del model, processor</code></pre></div>



<div class="wp-block-cocoon-blocks-sticky-box blank-box block-box sticky st-blue">

<p class="wp-block-paragraph">もちろんです、以下に面白いジョークをお伝えします。</p>


<p class="wp-block-paragraph">ジョーク：<br>「何が最も強い武器ですか？答え：言葉」</p>


<p class="wp-block-paragraph">解説：</p>


<p class="wp-block-paragraph">このジョークの面白いのは、「言葉」という単語自体が強力な武器であることを意味していることです。言葉は私たちの思考や感情を表現する唯一の手段であり、それがどのように使われるかによって結果は大きく変わります。例えば、建設的な言葉は人間関係を改善し、破壊的な言葉は人間関係を損なう可能性があります。したがって、「言葉」は非常に強力な武器と言えるでしょう。&lt;|im_end|&gt;</p>


<p class="wp-block-paragraph">実行前メモリ使用量: 1116.38 MB<br>実行後メモリ使用量: 9301.42 MB<br>差引メモリ使用量: 8185.04 MB<br>実行時間: 31.623 秒</p>

</div>



<p class="wp-block-paragraph">　メモリ消費・推論時間が8ビット量子化に比べて6割程度となった。</p>



<h3 class="wp-block-heading">OpenVINOランタイム最適化を有効にする</h3>



<p class="wp-block-paragraph">　「OpenVINOランタイムは、LLM推論をより効率的に行うための最適化機能を提供します。これには、4ビット/8ビット量子化されたMatMulのアクティベーションの 動的量子化とKVキャッシュ量子化が含まれます。」とのこと。</p>


<a rel="noopener" href="https://docs.openvino.ai/2026/openvino-workflow-generative/inference-with-optimum-intel.html" title="Inference with Optimum Intel &#8212; OpenVINO???  documentation" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.openvino.ai%2F2026%2Fopenvino-workflow-generative%2Finference-with-optimum-intel.html?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Inference with Optimum Intel &#8212; OpenVINO???  documentation</div><div class="blogcard-snippet external-blogcard-snippet">Learn how to use the native OpenVINO package to execute LLM models.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.openvino.ai/2026/openvino-workflow-generative/inference-with-optimum-intel.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.openvino.ai</div></div></div></div></a>


<h4 class="wp-block-heading">動的量子化</h4>



<p class="wp-block-paragraph">　↓上記リンクの該当部を翻訳した。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">　<strong>動的量子化により、</strong>&nbsp;4 ビットまたは 8 ビットの量子化重みを持つ MatMul 演算のアクティベーションの量子化が可能になります (&nbsp;<a href="https://docs.openvino.ai/2026/openvino-workflow/model-optimization-guide/weight-compression.html">LLM 重み圧縮を</a>参照)。これにより、LLM の推論レイテンシとスループットが向上しますが、生成精度にわずかなずれが生じる可能性があります。量子化はグループ単位で実行され、グループサイズは設定可能です。つまり、グループ内の値は量子化パラメータを共有します。グループサイズが大きいほど推論は速くなりますが、精度は低下します。推奨されるグループサイズ値は、0、32、64、128、または&#8221;-1&#8243;&nbsp;<a href="https://docs.openvino.ai/2026/openvino-workflow-generative/inference-with-optimum-intel.html#id1">(</a>トークンごと) です。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box block-box sticky st-blue">

<p class="wp-block-paragraph"><strong>注記</strong><br>動的量子化グループサイズは、厳密な要件ではなく、あくまで目安として扱われます。実際のポリシーは、機能要件やパフォーマンス、精度に関する考慮事項によって異なる場合があります。プラグインによっては、動的量子化を完全に無効にしたり、ユーザーが指定したサイズよりも小さいグループサイズを使用したりする場合があります。</p>

</div>



<p class="wp-block-paragraph">　Intel製CPUおよびIntel製GPUでは、動的量子化は<strong>デフォルトで</strong>有効になっています。</p>



<ul class="wp-block-list">
<li>XMXをサポートしていないIntel CPUおよびIntel GPUの場合、デフォルトのグループサイズは<code>32</code>です。</li>



<li>XMX をサポートする Intel GPU の場合、サポートされているグループ サイズは <code>innermost&nbsp;axis</code> のみで、<strong>デフォルトで</strong>有効になっています。</li>
</ul>



<p class="wp-block-paragraph">　動的量子化を無効にするには、次のいずれかの方法を実行してください。</p>



<ul class="wp-block-list">
<li><strong>（主要オプション）</strong><code>DYNAMIC_QUANTIZATION_GROUP_SIZE</code>の値を0に設定しま<code>す</code>。</li>



<li>実行モードを <code>PERFORMANCE&nbsp;mode</code> から <code>ACCURACY&nbsp;mode</code> に切り替えます。ただし、このオプションは推論精度にも影響します。<code>PERFORMANCE</code> と <code>ACCURACY</code> のモードの詳細については、<a href="https://docs.openvino.ai/2026/openvino-workflow/running-inference/optimize-inference/precision-control.html#execution-mode">「精度制御ガイド」</a>を参照してください。</li>
</ul>



<p class="wp-block-paragraph">　グループサイズの値を変更するには（例： e.g. から 64 へ）、次のコードを実行する必要があります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>model = OVModelForCausalLM.from_pretrained(
    model_path,
    ov_config={&quot;DYNAMIC_QUANTIZATION_GROUP_SIZE&quot;: &quot;64&quot;}
)</code></pre></div>
</blockquote>



<p class="wp-block-paragraph">　XMXとは、IntelのGPU（Arcなど）に搭載されているAI・行列演算用ハードウェアエンジン（Xe Matrix Extensions）とのこと。<br />　デフォルトで有効らしいが、Ryzenには搭載されていないので今回の検証は全て動的量子化は無効の状態。</p>



<h4 class="wp-block-heading">KVキャッシュの量子化</h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">　<strong>KVキャッシュの量子化により</strong>、LLMのキーと値のキャッシュの精度を下げることができます。これにより、推論中のメモリ消費が削減され、レイテンシとスループットが向上します。KVキャッシュは、次の精度に量子化できます。<code>u8</code>、u4、bf16、f16。u8またはu4の場合、グループごとの量子化が使用されます。グループサイズは、<code>KEY_CACHE_GROUP_SIZE</code>および<code>VALUE_CACHE_GROUP_SIZE</code>で制御されます&nbsp;。キーと値の精度は、<code>KEY_CACHE_PRECISION</code>および<code>VALUE_CACHE_PRECISION</code>を使用して個別に構成できます。キーの量子化モードは、<code>KEY_CACHE_QUANT_MODE</code>で（より正確な）または<code>BY_CHANNELBY_TOKEN</code>のいずれかに設定されます。</p>



<p class="wp-block-paragraph">　CPUおよびGPUのデフォルトのKVキャッシュ量子化設定：</p>



<ul class="wp-block-list">
<li>U8キー：チャネル単位の量子化、グループサイズ = 32（CPU）/ 16（GPU）</li>



<li>U8 値: トークンごとの量子化、group_size = hidden_​​dim。</li>
</ul>



<p class="wp-block-paragraph">　KVキャッシュの量子化を有効にするには、以下の設定を使用してください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>model = OVModelForCausalLM.from_pretrained(
    model_path,
    ov_config={&quot;KV_CACHE_PRECISION&quot;: &quot;u8&quot;, &quot;DYNAMIC_QUANTIZATION_GROUP_SIZE&quot;: &quot;32&quot;, &quot;PERFORMANCE_HINT&quot;: &quot;LATENCY&quot;}
)</code></pre></div>
</blockquote>



<p class="wp-block-paragraph">　また、OpenVINOのリリースノートによると、デフォルトでKVキャッシュの量子化が有効らしい。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">OpenVINO リリースノート</p>



<p class="wp-block-paragraph">2024年6月 &#8211; 2024年12月18日</p>



<p class="wp-block-paragraph"><a href="https://docs.openvino.ai/2024/about-openvino/release-notes-openvino/system-requirements.html">システム要件</a>|<a href="https://docs.openvino.ai/2024/about-openvino/release-notes-openvino/release-policy.html">リリースポリシー</a>|<a href="https://docs.openvino.ai/2024/get-started/install-openvino.html">インストールガイド</a></p>



<p class="wp-block-paragraph">新着情報</p>



<ul class="wp-block-list">
<li>OpenVINO 2024.6リリースには、安定性の向上とLLMパフォーマンスの改善のためのアップデートが含まれています。</li>



<li>Intel® Arc™ Bシリーズグラフィックス（旧称Battlemage）のサポートを追加しました。</li>



<li>NPU上での推論時間とLLM性能を向上させるための最適化を実装しました。</li>



<li>GenAI APIの最適化とバグ修正により、LLMのパフォーマンスが向上しました。</li>
</ul>



<p class="wp-block-paragraph">OpenVINO™ ランタイム</p>



<p class="wp-block-paragraph">CPUデバイスプラグイン</p>



<ul class="wp-block-list">
<li><span class="marker">KVキャッシュは、デフォルトの精度として非対称8ビット符号なし整数（U8）を使用するようになりました。</span>これにより、LLMのメモリ負荷が軽減され、パフォーマンスが向上します。このオプションは、モデルのメタデータで制御できます。</li>



<li>複数のバグ修正により、一部のモデルの品質と精度が向上しました。</li>
</ul>


<a rel="noopener" href="https://docs.openvino.ai/2024/about-openvino/release-notes-openvino.html" title="OpenVINO Release Notes &#8212; OpenVINO&#8482;  documentation" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.openvino.ai%2F2024%2Fabout-openvino%2Frelease-notes-openvino.html?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">OpenVINO Release Notes &#8212; OpenVINO&#8482;  documentation</div><div class="blogcard-snippet external-blogcard-snippet">See what has changed in OpenVINO with the latest release, as well as all previous releases in this year&#039;s cycle.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.openvino.ai/2024/about-openvino/release-notes-openvino.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.openvino.ai</div></div></div></div></a></blockquote>



<p class="wp-block-paragraph">　これまでの検証ではKVキャッシュの精度は「u8」となっているため、試しに圧縮なしにしてみる。使ったモデルはOpenVINO IR（4ビット量子化）形式のモデル。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code># KVキャッシュの量子化を無効化してみる
process = psutil.Process(os.getpid())
mem_before = process.memory_info().rss / 1024**2  # MB
start = time.time()
processor = AutoProcessor.from_pretrained(open_vino_save_path_int4a)
model = OVModelForCausalLM.from_pretrained(open_vino_save_path_int4a,
                                           ov_config={&quot;KV_CACHE_PRECISION&quot;: &quot;f16&quot;,
                                                      &quot;PERFORMANCE_HINT&quot;: &quot;LATENCY&quot;,
                                                      },
                                           )
messages = [
    {&quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;あなたは有能なコーディングAIです。&quot;},
    {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;transformersとFAISSとstreamlitを使った、QAチャットボットをpythonで構築して。&quot;},
]
processor = AutoProcessor.from_pretrained(model_path)
inputs = processor.apply_chat_template(
    messages,
    temperature=0.1,
    tokenize=True,
    return_dict=True,
    return_tensors=&quot;pt&quot;,
    add_generation_prompt=True,
    enable_thinking=False,
).to(model.device)
input_len = inputs[&quot;input_ids&quot;].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=4096)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
mem_after = process.memory_info().rss / 1024**2  # MB
end = time.time()
print(response)
print(&quot;=&quot; * 60)
print(f&quot;実行前メモリ使用量: {mem_before:.2f} MB&quot;)
print(f&quot;実行後メモリ使用量: {mem_after:.2f} MB&quot;)
print(f&quot;差引メモリ使用量: {mem_after - mem_before:.2f} MB&quot;)
print(f&quot;実行時間: {end - start:.3f} 秒&quot;)
del model, processor</code></pre></div>



<div class="wp-block-cocoon-blocks-sticky-box blank-box block-box sticky st-blue">

<p class="wp-block-paragraph">以下に基本的なコード例を示します。</p>


<p class="wp-block-paragraph">まず、必要なライブラリをインストールしましょう：</p>


<p class="wp-block-paragraph">pip install transformers faiss-cpu streamlit</p>


<p class="wp-block-paragraph">次に、以下のようなPythonスクリプトを作成します。</p>


<p class="wp-block-paragraph">import streamlit as st<br>from transformers import pipeline<br><br># Q&amp;Aモデルのロード<br>qa_pipeline = pipeline(&#8220;question-answering&#8221;, model=&#8221;distilbert-base-uncased-distilled-squad&#8221;)<br><br>def answer_question(question, context):<br>    result = qa_pipeline(question=question, context=context)<br>    return result[&#8216;answer&#8217;]<br><br>st.title(&#8216;Q&amp;Aチャットボット&#8217;)<br><br>context = st.text_area(&#8216;文脈を入力してください&#8217;)<br>question = st.text_input(&#8216;質問を入力してください&#8217;)<br><br>if st.button(&#8216;回答&#8217;):<br>    if context and question:<br>        answer = answer_question(question, context)<br>        st.write(f&#8217;回答: {answer}&#8217;)<br>    else:<br>        st.write(&#8216;文脈または質問が未入力です。&#8217;)</p>


<p class="wp-block-paragraph">このスクリプトでは、Streamlitを使用してウェブインターフェースを作成し、ユーザーから文脈と質問を受け取ります。それらをHugging FaceのTransformersライブラリで使用したQ&amp;Aモデルに送信して、回答を得ます。</p>


<p class="wp-block-paragraph">ただし、この例では、FAISSを用いて効率的な検索を行う部分は含まれていません。FAISSを用いた検索機能を追加するためには、より複雑な設計が必要になります。</p>


<p class="wp-block-paragraph">なお、上記のコードは非常に単純化されたものです。実際のアプリケーションでは、エラーハンドリング、セキュリティ対策、パフォーマンス最適化などの考慮が必要となる可能性があります。&lt;|im_end|&gt;</p>


<p class="wp-block-paragraph">実行前メモリ使用量: 1452.83 MB<br>実行後メモリ使用量: 9407.55 MB<br>差引メモリ使用量: 7954.73 MB<br>実行時間: 72.236 秒</p>

</div>



<p class="wp-block-paragraph">　KVキャッシュの量子化をu4にもしてみる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code># KVキャッシュの量子化をu4にしてみる
process = psutil.Process(os.getpid())
mem_before = process.memory_info().rss / 1024**2  # MB
start = time.time()
processor = AutoProcessor.from_pretrained(open_vino_save_path_int4a)
model = OVModelForCausalLM.from_pretrained(open_vino_save_path_int4a,
                                           ov_config={&quot;KV_CACHE_PRECISION&quot;: &quot;u4&quot;,
                                                      &quot;DYNAMIC_QUANTIZATION_GROUP_SIZE&quot;: &quot;32&quot;,
                                                      &quot;PERFORMANCE_HINT&quot;: &quot;LATENCY&quot;,
                                                      },
                                           )
messages = [
    {&quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;あなたは有能なコーディングAIです。&quot;},
    {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;transformersとFAISSとstreamlitを使った、QAチャットボットをpythonで構築して。&quot;},
]
processor = AutoProcessor.from_pretrained(model_path)
inputs = processor.apply_chat_template(
    messages,
    temperature=0.1,
    tokenize=True,
    return_dict=True,
    return_tensors=&quot;pt&quot;,
    add_generation_prompt=True,
    enable_thinking=False,
).to(model.device)
input_len = inputs[&quot;input_ids&quot;].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=4096)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
mem_after = process.memory_info().rss / 1024**2  # MB
end = time.time()
print(response)
print(&quot;=&quot; * 60)
print(f&quot;実行前メモリ使用量: {mem_before:.2f} MB&quot;)
print(f&quot;実行後メモリ使用量: {mem_after:.2f} MB&quot;)
print(f&quot;差引メモリ使用量: {mem_after - mem_before:.2f} MB&quot;)
print(f&quot;実行時間: {end - start:.3f} 秒&quot;)
del model, processor</code></pre></div>



<div class="wp-block-cocoon-blocks-sticky-box blank-box block-box sticky st-blue">

<p class="wp-block-paragraph">もちろっきり、それはchatlit、具体的詳しく少しいて、すいて、そしていて、、、すえにいて。いいていててだして、。&lt;|im_end|&gt;</p>


<p class="wp-block-paragraph">実行前メモリ使用量: 1321.38 MB<br>実行後メモリ使用量: 9436.15 MB<br>差引メモリ使用量: 8114.78 MB<br>実行時間: 11.552 秒</p>

</div>



<p class="wp-block-paragraph">　u4は何度やっても生成結果が壊れてしまう。<br />　メモリ使用量をまとめるとこんな感じ。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-center" data-align="center"></th><th class="has-text-align-center" data-align="center">KVキャッシュ量子化 u8</th><th class="has-text-align-center" data-align="center">KVキャッシュ量子化 u4</th><th class="has-text-align-center" data-align="center">KVキャッシュの量子化 無効化</th></tr></thead><tbody><tr><td class="has-text-align-center" data-align="center">消費メモリ</td><td class="has-text-align-center" data-align="center">8,185MB</td><td class="has-text-align-center" data-align="center">8,114MB</td><td class="has-text-align-center" data-align="center">7,954MB</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">　大きな差はなさそう…？</p>



<h2 class="wp-block-heading">その他（GPU、NPU推論について）</h2>



<p class="wp-block-paragraph">　GPUを使った推論はIntel製GPUまたはiGPU搭載CPUでのみ実行可能とのことなので、私の環境では試せず…。</p>


<a rel="noopener" href="https://github.com/openvinotoolkit/openvino/discussions/34009" title="Why can&#039;t OpenVINO support NVIDIA GPU&#039;s? · openvinotoolkit openvino · Discussion #34009" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/a85d6237ab46a04d2085fce8df03c90e.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Why can&#8217;t OpenVINO support NVIDIA GPU&#8217;s? · openvinotoolkit openvino · Discussion #34009</div><div class="blogcard-snippet external-blogcard-snippet">Hello everyone, This is my first time contributing to an open source project and it is by far one of the nicest projects&#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/openvinotoolkit/openvino/discussions/34009" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>


<p class="wp-block-paragraph">　NPUについても、Intel NPUを搭載したCPUを持っていないことからモデルの実行はできない。ただ、以下のドキュメントを参考にできるところまで検証した。</p>


<a rel="noopener" href="https://docs.openvino.ai/2026/openvino-workflow/running-inference/inference-devices-and-modes/npu-device.html" title="NPU Device &#8212; OpenVINO???  documentation" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.openvino.ai%2F2026%2Fopenvino-workflow%2Frunning-inference%2Finference-devices-and-modes%2Fnpu-device.html?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">NPU Device &#8212; OpenVINO???  documentation</div><div class="blogcard-snippet external-blogcard-snippet">OpenVINO??? supports the Neural Processing Unit, a low-power processing device dedicated to running AI inference.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.openvino.ai/2026/openvino-workflow/running-inference/inference-devices-and-modes/npu-device.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.openvino.ai</div></div></div></div></a>


<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code># NPUが認識されるかチェック
# [&#39;CPU&#39;, &#39;GPU&#39;, &#39;NPU&#39;]のようにNPUが表示されればOK
import openvino as ov
core = ov.Core()
print(&quot;利用可能なデバイス:&quot;, core.available_devices)
for device in core.available_devices:
    print(device, core.get_property(device, &quot;FULL_DEVICE_NAME&quot;))
# 必要なライブラリのインポート
import openvino
import openvino_genai
import transformers
import nncf
print(&quot;OpenVINO   :&quot;, openvino.__version__)
print(&quot;Transformers:&quot;, transformers.__version__)
print(&quot;NNCF       :&quot;, nncf.__version__)
</code></pre></div>



<p class="wp-block-paragraph">コマンドプロンプトからSafetensorsモデルをNPU向けに変換。仮想環境を立ち上げた状態で、以下のコマンドを叩けばOpenVINO IR(NPU用)にモデルを変換できる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>optimum-cli export openvino -m &quot;H:\LLM_Models\safetensor\Qwen\Qwen2.5-Coder-7B-Instruct&quot; --task text-generation-with-past --weight-format int4 --sym --ratio 1.0 --group-size -1 &quot;H:\LLM_Models\open_vino\Qwen\Qwen2.5-Coder-7B-Instruct-int4-npu&quot;</code></pre></div>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-5.jpg"><img loading="lazy" decoding="async" width="1438" height="723" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-5.jpg" alt="" class="wp-image-690" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-5.jpg 1438w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-5-300x151.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-5-1024x515.jpg 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-5-768x386.jpg 768w" sizes="(max-width: 1438px) 100vw, 1438px" /></a><figcaption class="wp-element-caption">コマンドプロンプトの画面</figcaption></figure>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-3.png"><img loading="lazy" decoding="async" width="828" height="735" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-3.png" alt="" class="wp-image-616" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-3.png 828w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-3-300x266.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-3-768x682.png 768w" sizes="(max-width: 828px) 100vw, 828px" /></a><figcaption class="wp-element-caption">変換前メモリ使用量は25GB</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-1.png"><img loading="lazy" decoding="async" width="828" height="735" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-1.png" alt="" class="wp-image-614" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-1.png 828w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-1-300x266.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/image-1-768x682.png 768w" sizes="(max-width: 828px) 100vw, 828px" /></a><figcaption class="wp-element-caption">変換中のメモリ消費のピークは48GB程度なので、差し引き23GB程度のリソースが必要</figcaption></figure>
</div>
</div>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-3.jpg"><img loading="lazy" decoding="async" width="978" height="552" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-3.jpg" alt="" class="wp-image-617" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-3.jpg 978w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-3-300x169.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-3-768x433.jpg 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-3-240x135.jpg 240w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-3-320x180.jpg 320w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-3-640x360.jpg 640w" sizes="(max-width: 978px) 100vw, 978px" /></a><figcaption class="wp-element-caption">変換にて生成されたファイル群</figcaption></figure>



<p class="wp-block-paragraph">　以下のようなコードでNPU推論ができる…はず（実行環境がないので妄想）。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import os
import time
import psutil
import openvino_genai as ov_genai
from transformers import AutoTokenizer
model_path = (
    r&quot;H:\LLM_Models\open_vino\Qwen&quot;
    r&quot;\Qwen2.5-Coder-7B-Instruct-int4-npu&quot;
)
process = psutil.Process(os.getpid())
mem_before = process.memory_info().rss / 1024**2
start = time.time()
tokenizer = AutoTokenizer.from_pretrained(
    model_path,
    trust_remote_code=True,
)
messages = [
    {
        &quot;role&quot;: &quot;system&quot;,
        &quot;content&quot;: &quot;あなたは有能なAIアシスタントです。&quot;,
    },
    {
        &quot;role&quot;: &quot;user&quot;,
        &quot;content&quot;: (
            &quot;Pythonで高速な素数判定関数を書いて、&quot;
            &quot;処理内容も説明してください。&quot;
        ),
    },
]
prompt = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
)
pipeline_config = {
    &quot;MAX_PROMPT_LEN&quot;: 1024,
    &quot;MIN_RESPONSE_LEN&quot;: 128,
    &quot;GENERATE_HINT&quot;: &quot;BEST_PERF&quot;,
    &quot;CACHE_DIR&quot;: os.path.join(model_path, &quot;npu_cache&quot;),
}
pipe = ov_genai.LLMPipeline(
    model_path,
    &quot;NPU&quot;,
    pipeline_config,
)
result = pipe.generate(
    prompt,
    max_new_tokens=512,
    do_sample=False,
)
end = time.time()
mem_after = process.memory_info().rss / 1024**2
print(result)
print(&quot;=&quot; * 60)
print(f&quot;実行前メモリ使用量: {mem_before:.2f} MB&quot;)
print(f&quot;実行後メモリ使用量: {mem_after:.2f} MB&quot;)
print(f&quot;メモリ増加量      : {mem_after - mem_before:+.2f} MB&quot;)
print(f&quot;実行時間          : {end - start:.3f} 秒&quot;)</code></pre></div>



<h2 class="wp-block-heading">コード・実行結果をHTML出力したもの</h2>



<p class="wp-block-paragraph">　ここまでのコード・実行結果をHTMLに出力したものは以下のリンク先からどうぞ。</p>



<div class="wp-block-file"><a id="wp-block-file--media-4f6ec680-6455-4db5-abda-729d3695c30e" href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-test.html">openvino-test</a><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/07/openvino-test.html" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-4f6ec680-6455-4db5-abda-729d3695c30e">ダウンロード</a></div>



<p class="wp-block-paragraph"></p><p>The post <a href="https://toybox.uranos8685.mydns.jp/596/python%ef%bc%8bopenvino%e3%81%a7llm%e3%82%92%e5%ae%9f%e8%a1%8c%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f/">Python＋OpenVINOでSafetensors形式のモデルを実行してみる</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://toybox.uranos8685.mydns.jp/596/python%ef%bc%8bopenvino%e3%81%a7llm%e3%82%92%e5%ae%9f%e8%a1%8c%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">596</post-id>	</item>
		<item>
		<title>llama-cpp-python(CUDA版)のビルド環境をオフラインで構築する</title>
		<link>https://toybox.uranos8685.mydns.jp/476/llama-cpp-pythoncuda%e7%89%88%e3%81%ae%e3%83%93%e3%83%ab%e3%83%89%e7%92%b0%e5%a2%83%e3%82%92%e3%82%aa%e3%83%95%e3%83%a9%e3%82%a4%e3%83%b3%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/</link>
					<comments>https://toybox.uranos8685.mydns.jp/476/llama-cpp-pythoncuda%e7%89%88%e3%81%ae%e3%83%93%e3%83%ab%e3%83%89%e7%92%b0%e5%a2%83%e3%82%92%e3%82%aa%e3%83%95%e3%83%a9%e3%82%a4%e3%83%b3%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/#respond</comments>
		
		<dc:creator><![CDATA[Uranos8685]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 04:43:05 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://toybox.uranos8685.mydns.jp/?p=476</guid>

					<description><![CDATA[<p>1．はじめに 　Pythonのライブラリ「llama-cpp-python」をCUDA版で導入するにはGPU搭載のPCでCUDAが使用可能になっており、かつビルド環境が整っていないとCPU版がインストールされてしまいます [&#8230;]</p>
<p>The post <a href="https://toybox.uranos8685.mydns.jp/476/llama-cpp-pythoncuda%e7%89%88%e3%81%ae%e3%83%93%e3%83%ab%e3%83%89%e7%92%b0%e5%a2%83%e3%82%92%e3%82%aa%e3%83%95%e3%83%a9%e3%82%a4%e3%83%b3%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/">llama-cpp-python(CUDA版)のビルド環境をオフラインで構築する</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">1．はじめに</h2>



<p class="wp-block-paragraph">　Pythonのライブラリ「llama-cpp-python」をCUDA版で導入するにはGPU搭載のPCでCUDAが使用可能になっており、かつビルド環境が整っていないとCPU版がインストールされてしまいます。<br>　ビルド環境のセットアップおよびllama-cpp-pythonのインストールまでをまとめました。また、ビルド環境については個人開発であればVisual Studio Communityを使えばいいですが、法人などの場合Communityは使用できません。ただし、Build Tools for Visual Studio（C++）についてはOSSのビルドのために使用するのであればVisual Studioのライセンスなしで利用が可能です。<br>　ビルド環境のセットアップについては、法人によってはセキュリティの関係でワークステーションがネットワークにつながっていないこともありますので、各種ビルド環境の構築をオフラインPCでインストールできるように作業を進めます。</p>



<h2 class="wp-block-heading">2．インストーラーの収集（ネットワークにつながった端末で行う）</h2>



<h3 class="wp-block-heading">①Build Tools for Visual Studio</h3>



<p class="wp-block-paragraph">　オフラインでのインストーラー作成に必要となるVisual Studio ブートストラップを以下からダウンロードする。このとき選択するのは「Visual Studio 2026ビルドツール」。</p>


<a rel="noopener" href="https://learn.microsoft.com/ja-jp/visualstudio/install/create-a-network-installation-of-visual-studio?view=visualstudio" title="ネットワーク ベースのインストールを作成する - Visual Studio (Windows)" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">ネットワーク ベースのインストールを作成する &#8211; Visual Studio (Windows)</div><div class="blogcard-snippet external-blogcard-snippet">プライベート ネットワーク インストール ポイントを作成して Visual Studio をデプロイし、アクセス許可が制限されたエンタープライズ ユーザーまたはインターネット アクセスが制限されたクライアント マシンをサポートします。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/visualstudio/install/create-a-network-installation-of-visual-studio?view=visualstudio" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>


<p class="wp-block-paragraph">　ダウンロード先はどこでもよいが、この後C++のオフラインインストールに必要なファイルが同じディレクトリに保存されるため、十分な空き容量があるディスクに保存すること。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="992" height="521" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-5.png" alt="" class="wp-image-483" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-5.png 992w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-5-300x158.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-5-768x403.png 768w" sizes="(max-width: 992px) 100vw, 992px" /></figure>



<p class="wp-block-paragraph">　ダウンロードしたディレクトリの余白部分を右クリックし、「ターミナルを開く」を押下する。<br>　コマンドプロンプト（またはPowerShell）が立ち上がるので、以下のコマンドを入力し、オフラインインストールに必要な資源をダウンロードする。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>vs_BuildTools.exe --layout .\VSLayout --lang en-US ja-JP --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.VisualStudio.Component.Windows11SDK.26100 --add Microsoft.VisualStudio.Component.VC.CMake.Project</code></pre></div>



<p class="wp-block-paragraph">　すると、以下のようなウィンドウが表示されるので、Layout progressが100%になるまで放置する。</p>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-7387b849 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="480" height="282" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-1.png" alt="" class="wp-image-478" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-1.png 480w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-1-300x176.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="577" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/VSBT_DL-1024x577.jpg" alt="" class="wp-image-484" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/VSBT_DL-1024x577.jpg 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/VSBT_DL-300x169.jpg 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/VSBT_DL-768x433.jpg 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/VSBT_DL-120x68.jpg 120w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/VSBT_DL-160x90.jpg 160w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/VSBT_DL-320x180.jpg 320w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/VSBT_DL.jpg 1115w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<p class="wp-block-paragraph">　ダウンロードが完了すると、ブートストラップと同じディレクトリにVSLayoutフォルダが作成されている。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="992" height="521" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-6.png" alt="" class="wp-image-485" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-6.png 992w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-6-300x158.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-6-768x403.png 768w" sizes="(max-width: 992px) 100vw, 992px" /></figure>



<p class="wp-block-paragraph">　VSLayout\certificates配下には3つの証明書がある。ただし、これだけではオフラインインストールの際にエラーが発生するため、追加の証明書を事前に取得しておく必要がある。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="992" height="521" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-7.png" alt="" class="wp-image-487" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-7.png 992w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-7-300x158.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-7-768x403.png 768w" sizes="(max-width: 992px) 100vw, 992px" /></figure>



<p class="wp-block-paragraph">　以下のリンク先から「Microsoft Windows Code Signing PCA 2024.crt」をダウンロードし、「certificates」フォルダに入れておく。</p>


<a rel="noopener" href="https://developercommunity.visualstudio.com/t/Visual-Studio-2022-Build-Tools:-Offline-/10925898#TPIN-N10936287" title="Developer Community" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/266c2c43cdb1c19dfeff7bde2a6e275f.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Developer Community</div><div class="blogcard-snippet external-blogcard-snippet">Developer Community</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://developercommunity.visualstudio.com/t/Visual-Studio-2022-Build-Tools:-Offline-/10925898#TPIN-N10936287" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">developercommunity.visualstudio.com</div></div></div></div></a>


<p class="wp-block-paragraph">　Build Tools for Visual Studioの準備は終了。</p>



<p class="wp-block-paragraph">（おまけ）<br>　コマンドプロンプトに入力したコマンドは、llama-cpp-pythonのビルドに必要なモノに限っている。-addコマンドでダウンロードするパッケージを宣言しており、以下のとおりである。</p>



<figure class="wp-block-table is-style-regular"><table><thead><tr><th>名前</th><th>コンポーネントID</th></tr></thead><tbody><tr><td>身分証明書</td><td>Microsoft.VisualStudio.Workload.VCTools</td></tr><tr><td>x64/x86 用 MSVC ビルド ツール (最新)</td><td>Microsoft.VisualStudio.Component.VC.Tools.x86.x64</td></tr><tr><td>Windows 11 SDK (10.0.26100.6901)</td><td>Microsoft.VisualStudio.Component.Windows11SDK.26100</td></tr><tr><td>Windows 用 C++ CMake ツール</td><td>Microsoft.VisualStudio.Component.VC.CMake.Project</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">　もし、追加したいモノがあれば以下のリンクを参考に、「&#8211;add コンポーネントID」を記載することで追加可能。</p>


<a rel="noopener" href="https://learn.microsoft.com/ja-jp/visualstudio/install/workload-component-id-vs-build-tools?view=visualstudio&#038;viewFallbackFrom=vs-2026&#038;preserve-view=true" title="Visual Studio Build Tools のワークロード ID とコンポーネント ID" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Visual Studio Build Tools のワークロード ID とコンポーネント ID</div><div class="blogcard-snippet external-blogcard-snippet">Visual Studio のワークロード ID とコンポーネント ID を使用して、従来の Windows ベースのアプリケーションを構築する</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/visualstudio/install/workload-component-id-vs-build-tools?view=visualstudio" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>


<h3 class="wp-block-heading">②CMake</h3>



<p class="wp-block-paragraph">　ここからインストーラーをダウンロードしておく。</p>


<a rel="noopener" href="https://cmake.org/download" title="Download CMake" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fcmake.org%2Fdownload?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Download CMake</div><div class="blogcard-snippet external-blogcard-snippet">You can either download binaries or source code archives for the latest stable or previous release or access the current&#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://cmake.org/download/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">cmake.org</div></div></div></div></a>


<h3 class="wp-block-heading">③CUDA Toolkit</h3>



<p class="wp-block-paragraph">　ここからインストーラーをダウンロードしておく。インストーラータイプはローカルを選択しておくこと。</p>


<a rel="noopener" href="https://developer.nvidia.com/cuda/toolkit" title="CUDA Toolkit - Free Tools and Training" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/7ab44af368dbef457ca8fca10377ff37.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">CUDA Toolkit &#8211; Free Tools and Training</div><div class="blogcard-snippet external-blogcard-snippet">Get access to SDKs, trainings, and connect with developers.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://developer.nvidia.com/cuda/toolkit" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">developer.nvidia.com</div></div></div></div></a>


<h3 class="wp-block-heading">④cuDNN</h3>



<p class="wp-block-paragraph">　ここからインストーラーをダウンロードしておく。</p>


<a rel="noopener" href="https://developer.nvidia.com/cudnn-downloads" title="cuDNN 9.26.1 Downloads" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/7ab44af368dbef457ca8fca10377ff37.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">cuDNN 9.26.1 Downloads</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://developer.nvidia.com/cudnn-downloads" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">developer.nvidia.com</div></div></div></div></a>


<h2 class="wp-block-heading">3．開発端末へインストール</h2>



<h3 class="wp-block-heading">①Build Tools for Visual Studio</h3>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="567" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/btvs1-1-1024x567.png" alt="" class="wp-image-520" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/btvs1-1-1024x567.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/btvs1-1-300x166.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/btvs1-1-768x426.png 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/btvs1-1.png 1101w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">コマンドプロンプトまたはPowerShellでVSLayoutへ移動し、以下のコマンドを実行する（要管理者権限）</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>vs_BuildTools.exe --noWeb --noUpdateInstaller --wait</code></pre></div>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="750" height="441" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-16.png" alt="" class="wp-image-522" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-16.png 750w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-16-300x176.png 300w" sizes="(max-width: 750px) 100vw, 750px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">　Visual Studio Installerが起動するので続行をクリックする。<br>　この操作でVisual Studio Installerがインストールされる（まだC++のビルドツールはインストールされていない）</p>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="886" height="498" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-18.png" alt="" class="wp-image-524" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-18.png 886w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-18-300x169.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-18-768x432.png 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-18-240x135.png 240w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-18-320x180.png 320w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-18-640x360.png 640w" sizes="(max-width: 886px) 100vw, 886px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">　インストールが終わるとどのコンポーネントをインストールするか選択できる。<br>　基本的にオフラインインストールで用意したコンポーネントが選択されていると思うので、そのままインストールボタンを押して続行する。</p>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="886" height="498" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-20.png" alt="" class="wp-image-526" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-20.png 886w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-20-300x169.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-20-768x432.png 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-20-240x135.png 240w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-20-320x180.png 320w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-20-640x360.png 640w" sizes="(max-width: 886px) 100vw, 886px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">　このような画面になったらインストール完了。×でインストーラーを閉じておｋ。</p>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="819" height="684" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/btvs2.png" alt="" class="wp-image-527" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/btvs2.png 819w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/btvs2-300x251.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/btvs2-768x641.png 768w" sizes="(max-width: 819px) 100vw, 819px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">　インストールが終わると、スタートメニューにVisual Studio 2026フォルダができている。<br>　ちゃんとインストールできているか確認するため、x64 Native Tools Command Prompt for VSを実行する。</p>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="577" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-22-1024x577.png" alt="" class="wp-image-529" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-22-1024x577.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-22-300x169.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-22-768x433.png 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-22-240x135.png 240w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-22-320x180.png 320w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-22-640x360.png 640w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-22.png 1115w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">　「cl」と入力し、実行した際に画像のようになればおｋ。</p>
</div>
</div>



<h3 class="wp-block-heading">②CMake</h3>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="495" height="387" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-24.png" alt="" class="wp-image-534" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-24.png 495w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-24-300x235.png 300w" sizes="(max-width: 495px) 100vw, 495px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">　CMakeについては特に書くことはあまりないが、途中でインストールオプションが出てきた際に必ずパスを追加するオプションにチェックを入れたままにしておくこと。</p>
</div>
</div>



<h3 class="wp-block-heading">③CUDA Toolkit</h3>



<p class="wp-block-paragraph">　インストーラーの指示に従ってポチポチ進めてください。</p>



<h3 class="wp-block-heading">④cuDNN</h3>



<p class="wp-block-paragraph">　最近のインストーラーであればCUDA同様にポチポチ押していくだけでインストールできます。</p>



<p class="wp-block-paragraph">　ただし、昔のcuDNNはZIP形式のため、自分でCUDAがインストールされたフォルダにコピー＆ペーストする必要があります。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="992" height="521" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-25.png" alt="" class="wp-image-539" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-25.png 992w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-25-300x158.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-25-768x403.png 768w" sizes="(max-width: 992px) 100vw, 992px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">基本は以下のディレクトリにCUDAがあります（例：CUDA 13.3）</p>



<p class="wp-block-paragraph">C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.3</p>
</div>
</div>



<h3 class="wp-block-heading">⑤CUDA関係の環境変数の確認</h3>



<p class="wp-block-paragraph">　ここでCUDA関係の資源が使えるようになっているか確認をします。基本的にはインストールした際に設定されているはずですが、万が一設定されていない場合は各自で環境変数を設定してください。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="603" height="501" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda1.png" alt="" class="wp-image-541" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda1.png 603w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda1-300x249.png 300w" sizes="(max-width: 603px) 100vw, 603px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">システム環境変数　変数名：Path</p>



<p class="wp-block-paragraph">私のPCにはCUDAが13.2と13.3が入っているためbinとbin\64がそれぞれ設定されていました。</p>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="992" height="521" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-27.png" alt="" class="wp-image-543" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-27.png 992w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-27-300x158.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-27-768x403.png 768w" sizes="(max-width: 992px) 100vw, 992px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">　CUDAフォルダにはincludeとlibフォルダがあります。これもPathに追加しておきましょう。</p>



<p class="wp-block-paragraph">　設定後のPathは以下のとおり（面倒なので13.2は追加しませんでした…）。</p>
</div>
</div>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="634" height="501" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda2.png" alt="" class="wp-image-544" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda2.png 634w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda2-300x237.png 300w" sizes="(max-width: 634px) 100vw, 634px" /></figure>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="527" height="501" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-34.png" alt="" class="wp-image-554" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-34.png 527w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-34-300x285.png 300w" sizes="(max-width: 527px) 100vw, 527px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">　続いて、cuDNNの環境変数を設定します。今回私はv9.23をインストールしましたが、Program Files以下にインストールされていました。このうち、bin、include、libのパスを設定します。</p>



<p class="wp-block-paragraph">　変数名CUDNNとし、画像のパスを変数値に突っ込みます。</p>



<p class="wp-block-paragraph">　CUDNN以下のパスの構成としては「cuDNNのバージョン\xxx\CUDAバージョン」のはず。インストールした各ソフトのバージョンによって値は異なります。私はcuDNNが9.23、ターゲットのCUDAが13.3なのでこのパスで設定しました。</p>



<p class="wp-block-paragraph">　以上で環境変数の設定は終了です。</p>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="553" height="228" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda3.png" alt="" class="wp-image-546" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda3.png 553w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda3-300x124.png 300w" sizes="(max-width: 553px) 100vw, 553px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">　コマンドプロンプトを起動し「nvcc &#8211;version」を実行した際に、画像のようになればCUDAのパスが通っています。</p>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="620" height="147" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda4-1.png" alt="" class="wp-image-556" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda4-1.png 620w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda4-1-300x71.png 300w" sizes="(max-width: 620px) 100vw, 620px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">　コマンドプロンプトを起動し「where cudnn64_*.dll」を実行した際に、画像のようになればcuDNNのパスが通っています。</p>
</div>
</div>



<h2 class="wp-block-heading">4.llama-cpp-pythonのビルド</h2>



<p class="wp-block-paragraph">　環境変数を２種類設定しておく。ちなみに、以下のようにコマンドプロンプト上で設定してもよい。<br>　　set CMAKE_ARGS=-DGGML_CUDA=on<br>　　set FORCE_CMAKE=1<br>　その後仮想環境を立ち上げ、llama-cpp-pythonをpip installする。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="577" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-35-1024x577.png" alt="" class="wp-image-558" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-35-1024x577.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-35-300x169.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-35-768x433.png 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-35-240x135.png 240w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-35-320x180.png 320w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-35-640x360.png 640w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/image-35.png 1115w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">　仮想環境を立ち上げ、ggufファイルを読み込んでみましたが、ばっちりGPUを認識しています。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="672" height="1024" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda5-672x1024.png" alt="" class="wp-image-565" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda5-672x1024.png 672w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda5-197x300.png 197w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda5-768x1170.png 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/06/cuda5.png 992w" sizes="(max-width: 672px) 100vw, 672px" /></figure><p>The post <a href="https://toybox.uranos8685.mydns.jp/476/llama-cpp-pythoncuda%e7%89%88%e3%81%ae%e3%83%93%e3%83%ab%e3%83%89%e7%92%b0%e5%a2%83%e3%82%92%e3%82%aa%e3%83%95%e3%83%a9%e3%82%a4%e3%83%b3%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/">llama-cpp-python(CUDA版)のビルド環境をオフラインで構築する</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://toybox.uranos8685.mydns.jp/476/llama-cpp-pythoncuda%e7%89%88%e3%81%ae%e3%83%93%e3%83%ab%e3%83%89%e7%92%b0%e5%a2%83%e3%82%92%e3%82%aa%e3%83%95%e3%83%a9%e3%82%a4%e3%83%b3%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">476</post-id>	</item>
	</channel>
</rss>
