Last Update 2026/08/05
低スペック寄りの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 qwen35moe
parameters 36.0B
context length 262144
embedding length 2048
quantization Q4_K_M
Capabilities
completion
vision
tools
thinking
Parameters
top_p 0.95
min_p 0
presence_penalty 1.5
repeat_penalty 1
temperature 1
top_k 20
Qwen3.6 [実測結果一覧へ]
(1) temperature=---; top_p=---; top_k=--
2026-07-30
total duration: 8m23.17939237s
load duration: 144.621505ms
prompt eval count: 195 token(s)
prompt eval duration: 900.123945ms
prompt eval rate: 216.64 tokens/s
eval count: 6068 token(s)
eval duration: 8m19.804866958s
eval rate: 12.14 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
start > end の場合はNULL文字のみのメモリへのポインタを返す
文字列長に応じたメモリの確保(エラー処理有)
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・main()
引数個数のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
生成文字列の標準出力への出力
文字列用メモリの解放
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
文字列生成関数を5種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2
(2) 整数1 == 整数2
(3) 整数1 == 整数2
(4) 整数1 < 整数2 ただし、整数1、整数2が共に2桁
(5) 整数1 < 整数2 ただし、整数1が負数
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -Wall -o sample_test sample_code.c sample_test.c
/bin/ld: /tmp/ccKG99LR.o: in function `main':
sample_test.c:(.text+0xc1): multiple definition of `main'; /tmp/cchDjzht.o:sample_code.c:(.text+0x0): 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
Starting tests...
test_range_1_to_3: PASSED
test_range_1_to_1: PASSED
test_range_5_to_5: PASSED
test_range_10_to_12: PASSED
test_range_negative: PASSED
All tests passed.
(2) temperature=0.50; top_p=0.7; top_k=--
2026-07-30
total duration: 11m3.131644828s
load duration: 136.454087ms
prompt eval count: 195 token(s)
prompt eval duration: 901.601199ms
prompt eval rate: 216.28 tokens/s
eval count: 7838 token(s)
eval duration: 10m59.093563382s
eval rate: 11.89 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
引数値のチェック(エラー判定有)
文字列長に応じたメモリの確保(エラー処理有)
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・main()
引数個数のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
生成文字列の標準出力への出力
文字列用メモリの解放
・テストコードを別途生成
実行用コードと同一の文字列生成関数定義を記述
main()を伴うテストコード
文字列生成関数を4種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2
(2) 整数1 のみ
(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 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 string.
$ ./sample_test
[PASS] test_1_to_5
[PASS] test_single
[PASS] test_negative_to_zero
[PASS] test_empty_range
(3) temperature=0.30; top_p=0.7; top_k=--
2026-07-30
total duration: 10m29.234208335s
load duration: 125.42327ms
prompt eval count: 195 token(s)
prompt eval duration: 896.899789ms
prompt eval rate: 217.42 tokens/s
eval count: 7470 token(s)
eval duration: 10m25.374327957s
eval rate: 11.94 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルが関数のみオールマンスタイル
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
引数値のチェック
文字列長に応じたメモリの確保(エラー処理有)
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・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 -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
$ ./sample_test
All tests passed.
(4) temperature=0.15; top_p=---; top_k=--
2026-07-30
total duration: 10m50.729571873s
load duration: 4.713631351s
prompt eval count: 195 token(s)
prompt eval duration: 906.539965ms
prompt eval rate: 215.10 tokens/s
eval count: 7592 token(s)
eval duration: 10m42.101624932s
eval rate: 11.82 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
引数値のチェック(エラー判定有)
文字列長に応じたメモリの確保(エラー処理有)
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・main()
引数個数のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
生成文字列の標準出力への出力
文字列用メモリの解放
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
文字列生成関数を4種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2
(2) 整数1 == 整数2
(3) 整数1 < 整数2 ただし、整数1、整数2が共に2桁
(4) 整数1 > 整数2
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -Wall -o sample_test sample_code.c sample_test.c
/bin/ld: /tmp/ccnbnkpp.o: in function `main':
sample_test.c:(.text+0x1fd): multiple definition of `main'; /tmp/cceW93Yu.o:sample_code.c:(.text+0x114): 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.
(5) temperature=0.15; top_p=0.7; top_k=--
2026-07-30
total duration: 9m55.139814662s
load duration: 137.078873ms
prompt eval count: 195 token(s)
prompt eval duration: 892.761557ms
prompt eval rate: 218.42 tokens/s
eval count: 7033 token(s)
eval duration: 9m51.392116422s
eval rate: 11.89 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
引数値のチェック(エラー判定有)
文字列長に応じたメモリの確保(エラー処理有)
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・main()
引数個数のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
生成文字列の標準出力への出力
文字列用メモリの解放
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
文字列生成関数を4種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2
(2) 整数1 == 整数2
(3) 整数1 > 整数2
(4) 整数1 < 整数2 ただし、整数1が負数
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -Wall -o sample_test sample_code.c sample_test.c
/bin/ld: /tmp/ccNecWry.o: in function `main':
sample_test.c:(.text+0x21e): multiple definition of `main'; /tmp/ccqmnPmQ.o:sample_code.c:(.text+0xea): 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
Failed to generate output.
$ ./sample_test
All tests passed.
(6) temperature=0.15; top_p=0.5; top_k=--
2026-07-30
total duration: 13m22.13800865s
load duration: 108.135895ms
prompt eval count: 195 token(s)
prompt eval duration: 912.381111ms
prompt eval rate: 213.73 tokens/s
eval count: 9227 token(s)
eval duration: 13m17.524514668s
eval rate: 11.57 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
引数値のチェック(エラー判定有)
文字列長に応じたメモリの確保(エラー処理有)
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・main()
引数個数のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
生成文字列の標準出力への出力
文字列用メモリの解放
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
文字列生成関数を4種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2
(2) 整数1 == 整数2 ただし、整数1と整数2は共に0
(3) 整数1 > 整数2
(4) 整数1 < 整数2 ただし、整数1が負数
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -Wall -o sample_test sample_code.c sample_test.c
/bin/ld: /tmp/cc9O1MJL.o: in function `main':
sample_test.c:(.text+0x1d2): multiple definition of `main'; /tmp/ccRQumTA.o:sample_code.c:(.text+0x15a): 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
Failed to generate sequence.
$ ./sample_test
Test 1 passed.
Test 2 passed.
Test 3 passed.
Test 4 passed.
Results: 4 passed, 0 failed.
(7) temperature=0.15; top_p=0.4; top_k=--
2026-07-30
total duration: 13m19.573456138s
load duration: 4.397542262s
prompt eval count: 195 token(s)
prompt eval duration: 896.594395ms
prompt eval rate: 217.49 tokens/s
eval count: 9227 token(s)
eval duration: 13m10.656463219s
eval rate: 11.67 tokens/s
コード生成結果の概要
生成されたコードは(6)と同一コード
(8) temperature=0.15; top_p=0.7; top_k=32
2026-07-30
total duration: 9m40.177710673s
load duration: 4.402714749s
prompt eval count: 195 token(s)
prompt eval duration: 905.733023ms
prompt eval rate: 215.30 tokens/s
eval count: 6811 token(s)
eval duration: 9m32.126984277s
eval rate: 11.90 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
start > end の場合はNULL文字のみのメモリへのポインタを返す
文字列長に応じたメモリの確保(エラー処理有)
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・main()
引数個数のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
生成文字列の標準出力への出力
文字列用メモリの解放
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
文字列生成関数を4種類の引数の組み合わせでテスト実行
(1) 整数1 > 整数2
(2) 整数1 == 整数2
(3) 整数1 < 整数2
(4) 整数1 < 整数2 ただし、整数1が負数
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -Wall -o sample_test sample_code.c sample_test.c
/bin/ld: /tmp/ccXTSWm2.o: in function `main':
sample_test.c:(.text+0x29c): multiple definition of `main'; /tmp/cci2IPCW.o:sample_code.c:(.text+0x119): 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
test_empty_range passed
test_single_number passed
test_multiple_numbers passed
test_negative_numbers passed
All tests passed.
(9) temperature=0.15; top_p=0.7; top_k=16
2026-07-30
total duration: 13m21.751588999s
load duration: 4.42418133s
prompt eval count: 195 token(s)
prompt eval duration: 896.532932ms
prompt eval rate: 217.50 tokens/s
eval count: 9200 token(s)
eval duration: 13m12.82358097s
eval rate: 11.60 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
引数個数のチェック(エラー処理有)
文字列長に応じたメモリの確保(エラー処理有)
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・main()
引数個数のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
生成文字列の標準出力への出力
文字列用メモリの解放
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
文字列生成関数を3種類の引数の組み合わせでテスト実行
(1) 整数1 < 整数2
(2) 整数1 == 整数2
(3) 整数1 < 整数2 ただし、整数1、整数2が共に2桁
(注) LLMの生成結果は毎回一定ではないため、結果によっては上記内容通りではないことが考えられます。
生成コードの実行結果
sample_code.c : 検証用プロンプトにて生成されたコードsample_test.c : 生成されたテストコード
$ gcc -Wall -o sample_code sample_code.c
$ gcc -Wall -o sample_test sample_code.c sample_test.c
/bin/ld: /tmp/ccAqBRzo.o: in function `main':
sample_test.c:(.text+0x16d): multiple definition of `main'; /tmp/ccTgtomZ.o:sample_code.c:(.text+0xe2): 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: invalid range or memory allocation failed.
$ ./sample_test
PASS: test 1
PASS: test 2
PASS: test 3
All tests passed.
(10) temperature=0.10; top_p=0.7; top_k=--
2026-07-30
total duration: 11m1.058742813s
load duration: 4.726926568s
prompt eval count: 195 token(s)
prompt eval duration: 893.353723ms
prompt eval rate: 218.28 tokens/s
eval count: 7714 token(s)
eval duration: 10m52.391023567s
eval rate: 11.82 tokens/s
コード生成結果の概要
・C言語による生成
・コード以外の出力無し
・コードの記述スタイルをオールマンで生成
・戻り値は stdlib.h の EXIT_*** を使用
・文字列生成関数
引数個数のチェック(エラー処理有)
文字列長に応じたメモリの確保(エラー処理有)
インクリメント+空白区切りで文字列用メモリに書き込み
文字列用メモリへのポインタを返す
・main()
引数個数のチェック(エラー処理有)
文字列生成関数の呼び出し(エラー処理有)
生成文字列の標準出力への出力
文字列用メモリの解放
・テストコードを別途生成
テスト対象関数の宣言
main()を伴うテストコード
文字列生成関数を3種類の引数の組み合わせでテスト実行
(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_code.c sample_test.c
/bin/ld: /tmp/ccNCDvuK.o: in function `main':
sample_test.c:(.text+0x21e): multiple definition of `main'; /tmp/ccfUMle2.o:sample_code.c:(.text+0xde): 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
Failed to generate string.
$ ./sample_test
All tests passed.