Last Update 2026/07/20
低スペック寄りのPCでローカルLLMを動作させた際の記録です。
LLM以外の仮想マシンなどが起動され、多少負荷がかかった状態で実行しています。
ベンチマークなどでLLMの性能を評価する内容ではありません。
LLM以外の仮想マシンなどが起動され、多少負荷がかかった状態で実行しています。
ベンチマークなどでLLMの性能を評価する内容ではありません。
検証用PC
|
OS |
Debian GNU/Linux 12 (bookworm) |
|
CPU |
Intel(R) Core(TM) i5-14400F |
|
GPU |
GeForce RTX 3060 12GB |
|
メモリ |
DDR4 PC4-25600 32GB × 4 |
|
SSD |
crucial P310 CT1000P310SSD8-JP |
構築環境 : Docker + Ollama (特別な設定などは無い状態)
検証用プロンプト
```
### 依頼内容
- コード生成
### 指示
- C言語
- コード以外の出力は不要
- 中括弧スタイルはオールマン
- テストコードも生成
- テストコードは別ファイル
- 実行用ソースファイル名 : sample_code.c
- テスト用ソースファイル名 : sample_test.c
- 標準ヘッダ以外は使用しない
- 戻り値はEXIT_SUCCESSを使用
- 関数はmain()の前で定義
### コード仕様(sample_code.c)
- コマンドラインから整数2つを取得
- [引数1]から[引数2]までをインクリメントして空白区切りで標準出力に出力
- 出力する文字列はmain()ではなく関数で生成
### コード仕様(sample_test.c)
- unity.hを使用しない
```
モデル詳細
Model
architecture gptoss
parameters 116.8B
context length 131072
embedding length 2880
quantization MXFP4
Capabilities
completion
tools
thinking
Parameters
temperature 1
gpt-oss [実測結果一覧へ]
(1) temperature=0.15; top_p=---; top_k=--
2026-07-19
total duration: 2m42.069118726s
load duration: 134.636279ms
prompt eval count: 280 token(s)
prompt eval duration: 3.549670268s
prompt eval rate: 78.88 tokens/s
eval count: 1318 token(s)
eval duration: 2m37.82112208s
eval rate: 8.35 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
引数値のチェック(エラー判定有)
start > end の場合はNULL文字のみのメモリへのポインタを返す
文字列長に応じたメモリの確保(エラー処理有)
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・main()
引数個数のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
生成文字列の標準出力への出力
文字列用メモリの解放
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
文字列生成関数を4種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2
(2) 整数1 < 整数2 ただし 整数1が負数
(3) 整数1 == 整数2
(4) 整数1 > 整数2
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -o sample_test sample_code.c sample_test.c
/bin/ld: /tmp/ccUsvrmX.o: in function `main':
sample_test.c:(.text+0x260): multiple definition of `main'; /tmp/ccgdXDTT.o:sample_code.c:(.text+0x134): first defined here
collect2: error: ld returned 1 exit status
$ vi sample_code.c ← main()関数重複エラー解消のため条件付きコンパイル用の#ifndefマクロを追加
$ gcc -D TEST_MAIN -Wall -o sample_test sample_code.c sample_test.c
$ ./sample_code 1 5
1 2 3 4 5
$ ./sample_code -3 3
-3 -2 -1 0 1 2 3
$ ./sample_code 1 1
1
$ ./sample_code 5 1
$ ./sample_test
All tests passed.
(2) temperature=0.15; top_p=0.7; top_k=--
2026-07-19
total duration: 2m49.212790055s
load duration: 122.40437ms
prompt eval count: 280 token(s)
prompt eval duration: 143.196755ms
prompt eval rate: 1955.35 tokens/s
eval count: 1402 token(s)
eval duration: 2m48.434307672s
eval rate: 8.32 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
引数値のチェック(エラー判定有)
start > end の場合はデクリメントして空白で区切る
文字列長に応じたメモリの確保(エラー処理有)
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・main()
引数個数のチェック(エラー処理有)
引数の上限下限のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
生成文字列の標準出力への出力
文字列用メモリの解放
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
文字列生成関数を4種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2
(2) 整数1 > 整数2
(3) 整数1 < 整数2 ただし、整数1が負数
(4) 整数1 == 整数2
(5) 整数1 == 整数2 ただし、整数1と整数2がINT_MAX
(6) 整数1 == 整数2 ただし、整数1と整数2がINT_MIN
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -o sample_test sample_code.c sample_test.c
sample_test.c: In function ‘main’:
sample_test.c:42:46: error: ‘INT_MAX’ undeclared (first use in this function)
42 | char *result = generate_range_string(INT_MAX, INT_MAX);
| ^~~~~~~
sample_test.c:5:1: note: ‘INT_MAX’ is defined in header ‘<limits.h>’; did you forget to ‘#include <limits.h>’?
4 | #include <assert.h>
+++ |+#include <limits.h>
5 |
sample_test.c:42:46: note: each undeclared identifier is reported only once for each function it appears in
42 | char *result = generate_range_string(INT_MAX, INT_MAX);
| ^~~~~~~
sample_test.c:51:46: error: ‘INT_MIN’ undeclared (first use in this function)
51 | char *result = generate_range_string(INT_MIN, INT_MIN);
| ^~~~~~~
sample_test.c:51:46: note: ‘INT_MIN’ is defined in header ‘<limits.h>’; did you forget to ‘#include <limits.h>’?
$ vi sample_test.c ← <limits.h>を追加
$ gcc -o sample_test sample_code.c sample_test.c
/bin/ld: /tmp/ccgVL7KO.o: in function `main':
sample_test.c:(.text+0x0): multiple definition of `main'; /tmp/ccf3pTIT.o:sample_code.c:(.text+0x174): first defined here
collect2: error: ld returned 1 exit status
$ vi sample_code.c ← main()関数重複エラー解消のため条件付きコンパイル用の#ifndefマクロを追加
$ gcc -D TEST_MAIN -Wall -o sample_test sample_code.c sample_test.c
$ ./sample_code 1 5
1 2 3 4 5
$ ./sample_code -3 3
-3 -2 -1 0 1 2 3
$ ./sample_code 1 1
1
$ ./sample_code 5 1
5 4 3 2 1
$ ./sample_test
All tests passed.
(3) temperature=0.15; top_p=0.5; top_k=--
2026-07-19
total duration: 3m0.442817989s
load duration: 17.10215517s
prompt eval count: 280 token(s)
prompt eval duration: 4.909694248s
prompt eval rate: 57.03 tokens/s
eval count: 1295 token(s)
eval duration: 2m37.712317484s
eval rate: 8.21 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
start > end の場合はNULL文字のみのメモリへのポインタを返す
文字列長に応じたメモリの確保(エラー処理有)
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・main()
引数個数のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
生成文字列の標準出力への出力
文字列用メモリの解放
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
文字列生成関数を4種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2
(2) 整数1 == 整数2
(3) 整数1 < 整数2 ただし、整数1が負数
(4) 整数1 > 整数2
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -o sample_test sample_code.c sample_test.c
/bin/ld: /tmp/ccpVYUF8.o: in function `main':
sample_test.c:(.text+0x260): multiple definition of `main'; /tmp/ccYkwfCx.o:sample_code.c:(.text+0x150): first defined here
collect2: error: ld returned 1 exit status
$ vi sample_code.c ← main()関数重複エラー解消のため条件付きコンパイル用の#ifndefマクロを追加
$ gcc -D TEST_MAIN -Wall -o sample_test sample_code.c sample_test.c
$ ./sample_code 1 5
1 2 3 4 5
$ ./sample_code -3 3
-3 -2 -1 0 1 2 3
$ ./sample_code 1 1
1
$ ./sample_code 5 1
$ ./sample_test
All tests passed.
(4) temperature=0.15; top_p=0.4; top_k=--
2026-07-19
total duration: 2m53.79263286s
load duration: 125.18869ms
prompt eval count: 280 token(s)
prompt eval duration: 128.857493ms
prompt eval rate: 2172.94 tokens/s
eval count: 1424 token(s)
eval duration: 2m52.972787341s
eval rate: 8.23 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
start > end の場合はNULLを返す
初期メモリとして所定のバイト数確保し、必要に応じて拡張する
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・main()
引数個数のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
生成文字列の標準出力への出力
文字列用メモリの解放
#ifndefによりテストコードとのmain()の重複を解消
・テストコードを別途生成
main()の重複解消マクロの定義
sample_code.cのインクルード
テスト対象関数の宣言
main()を伴うテストコード
文字列生成関数を4種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2
(2) 整数1 == 整数2
(3) 整数1 < 整数2 ただし、整数1が負数
(4) 整数1 > 整数2
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -Wall -o sample_test sample_test.c
$ ./sample_code 1 5
1 2
$ ./sample_code -3 3
-3 -2
$ ./sample_code 1 1
1
$ ./sample_code 5 1
Failed to generate output string.
$ ./sample_test
sample_test: sample_test.c:15: main: Assertion `strcmp(result, "1 2 3 4 5") == 0' failed.
Aborted (core dumped)
$ vi sample_code.c ← メモリへの文字列追加のコードのバグを修正
$ gcc -Wall -o sample_code sample_code.c
$ gcc -Wall -o sample_test sample_test.c
$ ./sample_code 1 5
1 2 3 4 5
$ ./sample_code -3 3
-3 -2 -1 0 1 2 3
$ ./sample_code 1 1
1
$ ./sample_code 5 1
Failed to generate output string. ← 文字列がNULLの場合はエラーで終了
$ ./sample_test
sample_test: sample_test.c:32: main: Assertion `result != NULL' failed.
Aborted (core dumped) ← テストコードは文字列がNULLの場合のassert()による終了
(5) temperature=0.15; top_p=0.7; top_k=32
2026-07-19
total duration: 1m59.579839453s
load duration: 127.973072ms
prompt eval count: 280 token(s)
prompt eval duration: 125.340203ms
prompt eval rate: 2233.92 tokens/s
eval count: 994 token(s)
eval duration: 1m58.970670589s
eval rate: 8.36 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
文字列生成ではなく出力
・main()
引数個数のチェック(エラー処理有)
引数内容のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
標準出力のファイルへの再割り当て後、出力されたファイル内文字列をチェック
文字列生成関数を4種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2
(2) 整数1 == 整数2
(3) 整数1 < 整数2 ただし、整数は共に2桁
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -o sample_test sample_code.c sample_test.c
/bin/ld: /tmp/cccyW2Lk.o: in function `main':
sample_test.c:(.text+0x180): multiple definition of `main'; /tmp/ccQ1LScG.o:sample_code.c:(.text+0x48): first defined here
collect2: error: ld returned 1 exit status
$ vi sample_code.c ← main()関数重複エラー解消のため条件付きコンパイル用の#ifndefマクロを追加
$ gcc -D TEST_MAIN -Wall -o sample_test sample_code.c sample_test.c
$ ./sample_code 1 5
1 2 3 4 5
$ ./sample_code -3 3
-3 -2 -1 0 1 2 3
$ ./sample_code 1 1
1
$ ./sample_code 5 1
$ ./sample_test
(6) temperature=0.15; top_p=0.7; top_k=16
2026-07-19
total duration: 2m2.614756005s
load duration: 133.44114ms
prompt eval count: 280 token(s)
prompt eval duration: 128.612894ms
prompt eval rate: 2177.08 tokens/s
eval count: 1015 token(s)
eval duration: 2m1.969592272s
eval rate: 8.32 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
文字列格納メモリへのポインタは引数渡し
インクリメント+空白区切りで文字列用メモリに書き込み
・main()
生成文字列用配列の定義
引数個数のチェック(エラー処理有)
文字列生成関数の呼び出し
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
テスト失敗時はassert()で停止
文字列生成関数を4種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2 (範囲 1~5)
(2) 整数1 == 整数2
(3) 整数1 > 整数2
(4) 整数1 < 整数2 (範囲 0~20)
(5) 整数1 < 整数2 (バッファオーバーフローとなる場合)
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -o sample_test sample_code.c sample_test.c
/bin/ld: /tmp/ccA0gKtE.o: in function `main':
sample_test.c:(.text+0x0): multiple definition of `main'; /tmp/cc4EkX2J.o:sample_code.c:(.text+0xc8): first defined here
collect2: error: ld returned 1 exit status
$ vi sample_code.c ← main()関数重複エラー解消のため条件付きコンパイル用の#ifndefマクロを追加
$ gcc -D TEST_MAIN -Wall -o sample_test sample_code.c sample_test.c
$ ./sample_code 1 5
1 2 3 4 5
$ ./sample_code -3 3
-3 -2 -1 0 1 2 3
$ ./sample_code 1 1
1
$ ./sample_code 5 1
$ ./sample_test
sample_test: sample_test.c:23: main: Assertion `strcmp(buf, "") == 0' failed.
Aborted (core dumped)
$ vi sample_test.c ← テストが失敗する部分をコメントアウト
$ gcc -D TEST_MAIN -Wall -o sample_test sample_code.c sample_test.c
$ ./sample_test
All tests passed. ← 整数1 > 整数2 以外のパターンはテスト通過
(6) temperature=0.10; top_p=0.7; top_k=--
2026-07-19
total duration: 1m56.821551386s
load duration: 142.266824ms
prompt eval count: 280 token(s)
prompt eval duration: 130.840202ms
prompt eval rate: 2140.02 tokens/s
eval count: 971 token(s)
eval duration: 1m56.170732258s
eval rate: 8.36 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
文字列生成ではなく出力
・main()
引数個数のチェック(エラー処理有)
引数内容のチェック(エラー処理有)
文字列生成関数の呼び出し
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
標準出力のファイルへの再割り当て後、出力されたファイル内文字列をチェック
文字列生成関数を4種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2 (範囲 1~5)
(2) 整数1 == 整数2
(3) 整数1 < 整数2 ただし、整数1が負数
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -o sample_test sample_code.c sample_test.c
/bin/ld: /tmp/ccrsMCUp.o: in function `main':
sample_test.c:(.text+0x17f): multiple definition of `main'; /tmp/ccylALZk.o:sample_code.c:(.text+0x5a): first defined here
collect2: error: ld returned 1 exit status
$ vi sample_code.c ← main()関数重複エラー解消のため条件付きコンパイル用の#ifndefマクロを追加
$ gcc -D TEST_MAIN -Wall -o sample_test sample_code.c sample_test.c
$ ./sample_code 1 5
1 2 3 4 5
$ ./sample_code -3 3
-3 -2 -1 0 1 2 3
$ ./sample_code 1 1
1
$ ./sample_code 5 1
Error: first integer must be less than or equal to second integer.
$ ./sample_test