端の知識の備忘録

技術メモになりきれない、なにものか達の供養先

【続・続】鯖落ちGPUを使った安価な機械学習用マシンの作り方 ~憧れのEPYCを購入して機械学習用マシンを完全体にする編~

前記事:

hashicco.hatenablog.com

後記事:

hashicco.hatenablog.com

前書き

前記事において、P40を買い増して機械学習用マシンをマルチGPUにした。

しかし、普通のRyzenで構成していたがために、PCIeの帯域が足りず片方のGPUがx4接続になってしまっていたのが若干心残りとなっていた。

そこで、EPYCとSupermicroのマザーを中古で買ってみたという話。

まともな帯域とセッティングで2GPUを接続してベンチを取ってみたところ、そこそこマルチGPUの良さが見えてきたので本記事に記しておく。

まとめ

  • 今回購入したのは1ソケット用32Coreの初代Zen 7551Pと対応マザーSupermicro H11SSL-i、そして8x32GBのECC REGメモリのセット。
    • ebayでtugm4470という出品者から$653.60で購入できました。32コアCPU、マザー、メモリ256GBでも10万切るのは素晴らしい。もう少し円高ならなお良かったのだが……。
    • 本当はZen2にしたかったが、コアあたりの単価が倍くらいしたので今回はコスト重視で初代Zenを選択
    • 本題からずれるが、最近異常に中国からの物流が速く驚かされる。前回の2枚目のP40も5日くらいで届いたのだが、今回の商品も注文してから4日程度で届いてびっくりした。

www.ebay.com

  • 本記事の主題である、安価な機械学習用マシンに対する回答としてコストを書いておくと、2xP40, 32core 7551P, 256GB RAMというかなりリッチなマシンではあるものの、電源やSSD代含めてでも18万円程度でこのマシンは組めるはず。

    • 内訳は、CPUマザーメモリとクーラーセット: 10万、GPU: 3万x2、1000W電源: 1.5万、1TB SSD: 5000円くらいを想定。
    • まあ普通に考えればGoogle Colab (Pro)やKaggleのノートブック機能で安価or無料のリソースを有効活用する方が良いと思うが、自宅にEPYCやら256GBのメモリやらマルチなサーバー用GPUがあるのは何事にも代えがたいという同士の方であれば、自己責任で組んでみるのにも現実的な価格と言えよう。
  • H11SSL-iのようなサーバーマザーでメモリが一部認識されないような場合、PCケースのスペーサー(マウントネジ)の位置を確認すること。通常のATXマザーとネジ止めの位置が異なる場合があり、基板裏の端子がスペーサーによってショートしている可能性がある。

    • 原因が分からず小1時間格闘していたとき、Redditでそのものずばりのスレッドがあり解決。まじで助かった。
    • マザーのサイズを変えたときにスペーサーの位置を変え忘れるとかで通常の自作用マザーでも稀にこういうことはあるので注意。
  • 平積みマシンにはサーバー用マシン、というかSupermicro製マザーがとても便利なことが判明。

    • ASPEEDのグラフィック出力がついており余計に画面出力用GPUをセットアップ時に付ける必要がない
    • なによりSupermicroのIPMIという管理機能が使えるためブラウザからマシンの起動停止、温度センサー情報の確認、リモートコンソール経由でブラウザ上でもBIOS設定やUbuntuのデスクトップの表示ができ、半端なく便利。
    • トラブルシューティング時モバイルモニターをいちいち接続する手間がなくなるので最高。
  • 前回記事においては、片方のGPUのみECC機能が有効になっており、利用可能なVRAM量が少なく性能にも影響があったことが判明ECC機能をオフにしてまともなマルチGPUのベンチを取り直した。

  • 前回と同様、GPT2トレーニングとllama.cppでマルチVSシングルのGPU性能比較を実施。十分GPUを2枚にした効果が見られたと思う。

    • 結果的に、GPT2トレーニングにおいては、レーニング時間はシングルの方が短いがtrain_samples_per_secondはマルチのほうが1.9倍ほど高い結果が得られた。
    • llama.cppにおいてはマルチGPUにすることで約1.2倍のトークン生成速度となった。

外観など

こんな箱で届きました。中にはEPYCがセットされたマザーと、個々にブリスターパックされたDDR4メモリが8枚入っていました。

中身というと、緑色の無骨なPCB基板にたくさんのDIMM、PCIeスロットが並び余すことなくチップと配線が敷き詰められたマザー、SP3ソケットに収められたヒートスプレッダ上に踊る輝かしきEPYCの文字、両面いっぱいに2列でDRAMチップが取り付けられた32GBのECC REG DIMMモジュールと、自作趣味の心が踊らずにはいられないセットである。

これにメルカリで中古で入手した適当な240mmのCPUクーラーを取り付け、適当にATX電源を接続することで普通の自作PCと同じく起動可能な状態となります。

一点普通の自作PCと異なるのは、マザーに管理用チップ(BMC)が別付けで取り付けられているため、マシンを起動せずとも様々な操作をLAN経由で実施可能なこと。これの素晴らしさはセットアップの項にて後述します。

元々EPYCをいつか自宅で動かしたいという憧れを持っていたので、大人になってようやくその願望が叶えられた形である。海外通販で中古商品を買うのに10万近い金額を出すのはだいぶ躊躇いがありましたが、学生の時からの夢ですし財布の紐が多少緩むのは仕方ないと度重なる出費に理由をつけて買ってしまいました。

セットアップ

とても便利なIPMI

このマザーではIPMIを利用することで、全くディスプレイを繋ぐことなくBIOSをいじったりOSインストールをすることが可能です!

www.fanatic.co.jp

厳密に言えば最初のIPMIのIPアドレスだけはDHCPで払い出されたものを予想して当てるか、一旦ディスプレイに繋いでPOST画面右下で確認するか、同じくディスプレイに一旦繋いでBIOS設定で静的IPアドレスを与える必要がありますが、一回IPMIにアクセスできてしまえば次のような管理画面で様々な操作が可能です。

ちなみに、IPMIログインのための初期ユーザーはADMINで、パスワードはマザーボード上のシールに印字されたPWDの文字列となります。

本マシンのように基本ディスプレイを繋がずリモートで使うマシンにおいて、初期設定やトラブルシューティングのためにいちいちKVMを物理で繋いで対応するのは非常に面倒であるが、IPMIがあればLANケーブルだけ繋げば後はいつものPCのブラウザからほぼすべての作業が行えるので大変便利です。

今回はこのIPMIのバーチャルKVM機能を使ってUbuntuのインストールや静的IPアドレス設定まで実施して、残りはSSH接続でCUDAやPython関連のセットアップを実施することができました。

ちなみにCUDAのセットアップは特にマルチGPUだから何か違うということはなく、普通にNVIDIAの公式サイト通りに実施して問題なくできました。

https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

DRAMが1枚認識されないトラブル

また、しばらく何故かメモリが1枚認識されず、計224GBとして認識される問題に小一時間悩まされました。

何度DRAMを入れ替え刺し直しても状況は変わらずマザーの故障を疑い始めた頃、Redditでドンピシャなスレッドを発見。どうやらPCケースのマザーボードマウント用の突起がマザー裏の端子と接触することでこういう症状が起こることがあるという内容。

https://www.reddit.com/r/homelab/comments/zi0xph/epyc_not_detecting_all_ram/

自分の環境でも正しく同じ状況となっており、8つ目のDIMMスロット裏に接触していたマウント用ネジを外したところ問題なく8枚のメモリが認識され、計256GBとしてBIOSからもOSからも見えるようになりました!マジでRedditには感謝です。

GPUECC機能が片方だけオンになっていた件

前回の記事で気づいていなかったのですが、nvidia-smiの結果でみると2枚のP40のVRAM量が異なるように表示されていたようである。

ubuntu@ubuntu-Super-Server:~$ nvidia-smi
Fri Aug 11 15:37:26 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.10              Driver Version: 535.86.10    CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  Tesla P40                      On  | 00000000:06:00.0 Off |                  Off |
| N/A   28C    P8              10W / 250W |      4MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
|   1  Tesla P40                      On  | 00000000:21:00.0 Off |                    0 |
| N/A   28C    P8               9W / 250W |      4MiB / 23040MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

GPU毎のnvidia-smi -aの結果をdiffしてみると、あとから買った方のP40のみECC Modeが有効になっていることが判明。

天下り的に考えてみると、23040MB/24576MB=0.9375=15/16なので、16bitのうち1bitをパリティビットとして利用しているのだと思われる。

また、nvidia-smiでnvidia-smi -g GPU番号 --ecc-config=0/1とすることで、ecc機能の有効無効を切り替えることができると判明(再起動が必要)。

https://thelinuxcluster.com/2013/07/24/turning-off-and-on-ecc-ram-for-nvidia-gp-gpu-cards/

ということで、#1 GPUecc機能をオフにしてみると、ちゃんとVRAM量が同じになりました!

ubuntu@ubuntu-Super-Server:~$ nvidia-smi
Sat Aug 12 13:10:17 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.10              Driver Version: 535.86.10    CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  Tesla P40                      On  | 00000000:06:00.0 Off |                  Off |
| N/A   24C    P8               9W / 250W |      4MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
|   1  Tesla P40                      On  | 00000000:21:00.0 Off |                  Off |
| N/A   23C    P8               9W / 250W |      4MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

後ほど言及しますが、ECC機能がオンになっていると性能が約1割ほど下がる模様。前回測定したときには片方がECCオン、もう片方がオフになっているアンバランスな状態で、マルチGPUでの性能測定時にも当然遅い方に結果が引っ張られますので、前記事の結果は参考程度にみていただければと思います(その旨すでに記事に反映済みです)。

今回のマルチGPUの性能測定は、ちゃんと両GPUともECCをオフにして実行しました。

Transformers公式のDDPチュートリアル

前回同様、次のページのDDPを利用したGPT2トレーニングのサンプルを利用して、トレーニングにかかる時間とtrain_samples_per_secondの値を比較。詳細なセットアップに関しては前記事参照。

https://huggingface.co/docs/transformers/perf_train_gpu_many

- 2GPU 1GPU(w/o ECC) 1GPU(w ECC)
Training Time(s) 186 175 195
train_samples_per_second 8.6 4.57 4.097

結果、Training TimeはマルチGPUでは改善しないものの、train_samples_per_second1GPUのときより1.9倍近い値となっていた。前回同様予測の域を出ないが、やはりGPU間におけるGradientsの値の共有に余計な時間がかかっているせいでTraining時間が改善しないのであろうか。

マルチGPUでモデルトレーニングを高速化するのは今後の宿題としたい。あまり詳しくないが、ZeROのような別の分散学習方法を採用したり、DeepSpeedのようなライブラリの使用でなんとかなる気もする。

また、先程言及したように、ECCを有効化した状態でのシングルGPUの性能もみてみる。すると、演算性能も1割程度低いことが判明。特にECC機能が必要ない場合はオフにするのが良さそう。

マルチGPU

NCCL_P2P_DISABLE=1 CUDA_VISIBLE_DEVICES=0,1 torchrun --nproc_per_node 2 examples/pytorch/language-modeling/run_clm.py --model_name_or_path gpt2 --dataset_name wikitext --dataset_config_name wikitext-2-raw-v1 --do_train --output_dir ~/tmp/test-clm --per_device_train_batch_size 4 --max_steps 200

***** train metrics *****
  epoch                    =       0.69
  train_loss               =      3.279
  train_runtime            = 0:03:06.03
  train_samples            =       2318
  train_samples_per_second =        8.6
  train_steps_per_second   =      1.075

シングルGPU(w/o ECC)

NCCL_P2P_DISABLE=1 CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 examples/pytorch/language-modeling/run_clm.py --model_name_or_path gpt2 --dataset_name wikitext --dataset_config_name wikitext-2-raw-v1 --do_train --output_dir ~/tmp/test-clm --per_device_train_batch_size 4 --max_steps 200
***** train metrics *****
  epoch                    =       0.34
  train_loss               =     3.3276
  train_runtime            = 0:02:54.99
  train_samples            =       2318
  train_samples_per_second =      4.571
  train_steps_per_second   =      1.143

シングルGPU(w/ ECC)

CUDA_VISIBLE_DEVICES=1 torchrun --nproc_per_node 1 examples/pytorch/language-modeling/run_clm.py --model_name_or_path gpt2 --dataset_name wikitext --dataset_config_name wikitext-2-raw-v1 --do_train --output_dir ~/tmp/test-clm --per_device_train_batch_size 4 --max_steps 200
***** train metrics *****
  epoch                    =       0.34
  train_loss               =     3.3276
  train_runtime            = 0:03:15.25
  train_samples            =       2318
  train_samples_per_second =      4.097
  train_steps_per_second   =      1.024

llama.cpp でマルチGPUとシングルGPUを比較する

前回同様、CUBLASを有効化してllama.cppをコンパイルし、8bit量子化されたLLaMa2 13b(llama-2-13b-chat.ggmlv3.q8_0.bin)のモデルをCPUのみ、GPU1枚、GPU2枚で動作させたときのトークン生成速度(eval time)を比較しました。

CPUのみにするときは-nglの値を0とし、GPU枚数のコントロールはコマンド実行時のCUDA_VISIBLE_DEVICESへ渡す値を変えることで行います。

ついでにCPUの性能も比較したいので、前回測定したCPU(5900X)の結果も併記します。

CPU(5900X) CPU(7551P) 2GPU 1GPU(w/o ECC) 1GPU(w ECC)
2.76 1.24 8.51 7.01 6.68

結果、マルチGPUのほうが1.2倍くらい1GPUよりも速く推論できるとの結果に。

また、やはりGPUECCを有効化すると若干性能が下がるというのはllama.cppにおいても同様の結果が得られた。

CPUに関してはコア数が増えた上(12コア→32コア)、メモリチャネルも8チャネルとなり帯域が増したはず(3200MHz * 2 channel * 8B = 51.2GB/s → 2133MHz * 8 channel * 8B = 136.5GB/s)であるが、やはり世代の差は埋められないのか、あまりマルチコアの性能をllama.cppが出し切れないのか、残念ながら7551Pでは5900Xの半分以下のトークン生成速度しか出ない結果となった。

マルチGPU

(llama2) ubuntu@ubuntu-Super-Server:~/Documents/llama.cpp$ ./build/bin/main -m ./models/llama-2-13b-chat.ggmlv3.q8_0.bin --temp 0.1 -p "### Instruction: Create poetry about Mount Fuji in 200 words
### Response:" -ngl 40 -b 512
main: build = 975 (9ca4abe)
main: seed  = 1691814871
ggml_init_cublas: found 2 CUDA devices:
  Device 0: Tesla P40, compute capability 6.1
  Device 1: Tesla P40, compute capability 6.1
llama.cpp: loading model from ./models/llama-2-13b-chat.ggmlv3.q8_0.bin
llama_model_load_internal: format     = ggjt v3 (latest)
llama_model_load_internal: n_vocab    = 32000
llama_model_load_internal: n_ctx      = 512
llama_model_load_internal: n_embd     = 5120
llama_model_load_internal: n_mult     = 256
llama_model_load_internal: n_head     = 40
llama_model_load_internal: n_head_kv  = 40
llama_model_load_internal: n_layer    = 40
llama_model_load_internal: n_rot      = 128
llama_model_load_internal: n_gqa      = 1
llama_model_load_internal: rnorm_eps  = 5.0e-06
llama_model_load_internal: n_ff       = 13824
llama_model_load_internal: freq_base  = 10000.0
llama_model_load_internal: freq_scale = 1
llama_model_load_internal: ftype      = 7 (mostly Q8_0)
llama_model_load_internal: model size = 13B
llama_model_load_internal: ggml ctx size =    0.11 MB
llama_model_load_internal: using CUDA for GPU acceleration
ggml_cuda_set_main_device: using device 0 (Tesla P40) as main device
llama_model_load_internal: mem required  =  698.16 MB (+  400.00 MB per state)
llama_model_load_internal: allocating batch_size x (640 kB + n_ctx x 160 B) = 360 MB VRAM for the scratch buffer
llama_model_load_internal: offloading 40 repeating layers to GPU
llama_model_load_internal: offloaded 40/43 layers to GPU
llama_model_load_internal: total VRAM used: 13218 MB
llama_new_context_with_model: kv self size  =  400.00 MB

system_info: n_threads = 32 / 64 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | VSX = 0 |
sampling: repeat_last_n = 64, repeat_penalty = 1.100000, presence_penalty = 0.000000, frequency_penalty = 0.000000, top_k = 40, tfs_z = 1.000000, top_p = 0.950000, typical_p = 1.000000, temp = 0.100000, mirostat = 0, mirostat_lr = 0.100000, mirostat_ent = 5.000000
generate: n_ctx = 512, n_batch = 512, n_predict = -1, n_keep = 0


 ### Instruction: Create poetry about Mount Fuji in 200 words
### Response:

Mount Fuji, a majestic sight
A symbol of Japan, pure and bright
Its snow-capped peak, a beacon of light
Against the blue sky, a wondrous sight

In spring, cherry blossoms bloom
Around its base, a colorful boom
Summer brings green forests alive
Autumn paints the mountain with gold and red
Winter's snow, a serene delight

Mount Fuji, a constant presence
A source of inspiration, a sacred presence
Its beauty, a reflection of the divine
A reminder of nature's splendor and design [end of text]

llama_print_timings:        load time =  2580.63 ms
llama_print_timings:      sample time =   157.57 ms /   142 runs   (    1.11 ms per token,   901.20 tokens per second)
llama_print_timings: prompt eval time =   355.85 ms /    22 tokens (   16.18 ms per token,    61.82 tokens per second)
llama_print_timings:        eval time = 16562.81 ms /   141 runs   (  117.47 ms per token,     8.51 tokens per second)
llama_print_timings:       total time = 17134.59 ms

シングルGPU(w/o ECC)

(llama2) ubuntu@ubuntu-Super-Server:~/Documents/llama.cpp$ CUDA_VISIBLE_DEVICES=0 ./build/bin/main -m ./models/llama-2-13b-chat.ggmlv3.q8_0.bin --temp 0.1 -p "### Instruction: Create poetry about Mount Fuji in 200 words
### Response:" -ngl 40 -b 512
main: build = 975 (9ca4abe)
main: seed  = 1691809687
ggml_init_cublas: found 1 CUDA devices:
  Device 0: Tesla P40, compute capability 6.1
llama.cpp: loading model from ./models/llama-2-13b-chat.ggmlv3.q8_0.bin
llama_model_load_internal: format     = ggjt v3 (latest)
llama_model_load_internal: n_vocab    = 32000
llama_model_load_internal: n_ctx      = 512
llama_model_load_internal: n_embd     = 5120
llama_model_load_internal: n_mult     = 256
llama_model_load_internal: n_head     = 40
llama_model_load_internal: n_head_kv  = 40
llama_model_load_internal: n_layer    = 40
llama_model_load_internal: n_rot      = 128
llama_model_load_internal: n_gqa      = 1
llama_model_load_internal: rnorm_eps  = 5.0e-06
llama_model_load_internal: n_ff       = 13824
llama_model_load_internal: freq_base  = 10000.0
llama_model_load_internal: freq_scale = 1
llama_model_load_internal: ftype      = 7 (mostly Q8_0)
llama_model_load_internal: model size = 13B
llama_model_load_internal: ggml ctx size =    0.11 MB
llama_model_load_internal: using CUDA for GPU acceleration
llama_model_load_internal: mem required  =  698.16 MB (+  400.00 MB per state)
llama_model_load_internal: allocating batch_size x (640 kB + n_ctx x 160 B) = 360 MB VRAM for the scratch buffer
llama_model_load_internal: offloading 40 repeating layers to GPU
llama_model_load_internal: offloaded 40/43 layers to GPU
llama_model_load_internal: total VRAM used: 13218 MB
llama_new_context_with_model: kv self size  =  400.00 MB

system_info: n_threads = 32 / 64 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | VSX = 0 |
sampling: repeat_last_n = 64, repeat_penalty = 1.100000, presence_penalty = 0.000000, frequency_penalty = 0.000000, top_k = 40, tfs_z = 1.000000, top_p = 0.950000, typical_p = 1.000000, temp = 0.100000, mirostat = 0, mirostat_lr = 0.100000, mirostat_ent = 5.000000
generate: n_ctx = 512, n_batch = 512, n_predict = -1, n_keep = 0


 ### Instruction: Create poetry about Mount Fuji in 200 words
### Response:

Majestic Mount Fuji, a snow-capped wonder,
Rises high above the clouds and thunder.
Its peak soars to the sky, serene and still,
A symbol of strength, beauty, and will.

In springtime, cherry blossoms bloom around,
Painting the mountain with colors profound.
Summer skies are bright and clear,
Reflecting the mountain's grandeur here.

Autumn leaves change to shades of gold,
As nature's canvas, stories untold.
Winter snows blanket the peak,
A peaceful sight, a season to seek.

Through every season, Mount Fuji stands,
A constant presence, a sacred land.
Its beauty inspires and humbles the soul,
A source of wonder, a goal to strive for whole. [end of text]

llama_print_timings:        load time =  2654.84 ms
llama_print_timings:      sample time =   220.07 ms /   195 runs   (    1.13 ms per token,   886.08 tokens per second)
llama_print_timings: prompt eval time =   540.22 ms /    22 tokens (   24.56 ms per token,    40.72 tokens per second)
llama_print_timings:        eval time = 27682.73 ms /   194 runs   (  142.69 ms per token,     7.01 tokens per second)
llama_print_timings:       total time = 28521.56 ms

シングルGPU(w/ ECC)

(llama2) ubuntu@ubuntu-Super-Server:~/Documents/llama.cpp$ CUDA_VISIBLE_DEVICES=1 ./build/bin/main -m ./models/llama-2-13b-chat.ggmlv3.q8_0.bin --temp 0.1 -p "### Instruction: Create poetry about Mount Fuji in 200 words
### Response:" -ngl 40 -b 512
main: build = 975 (9ca4abe)
main: seed  = 1691810359
ggml_init_cublas: found 1 CUDA devices:
  Device 0: Tesla P40, compute capability 6.1
llama.cpp: loading model from ./models/llama-2-13b-chat.ggmlv3.q8_0.bin
llama_model_load_internal: format     = ggjt v3 (latest)
llama_model_load_internal: n_vocab    = 32000
llama_model_load_internal: n_ctx      = 512
llama_model_load_internal: n_embd     = 5120
llama_model_load_internal: n_mult     = 256
llama_model_load_internal: n_head     = 40
llama_model_load_internal: n_head_kv  = 40
llama_model_load_internal: n_layer    = 40
llama_model_load_internal: n_rot      = 128
llama_model_load_internal: n_gqa      = 1
llama_model_load_internal: rnorm_eps  = 5.0e-06
llama_model_load_internal: n_ff       = 13824
llama_model_load_internal: freq_base  = 10000.0
llama_model_load_internal: freq_scale = 1
llama_model_load_internal: ftype      = 7 (mostly Q8_0)
llama_model_load_internal: model size = 13B
llama_model_load_internal: ggml ctx size =    0.11 MB
llama_model_load_internal: using CUDA for GPU acceleration
llama_model_load_internal: mem required  =  698.16 MB (+  400.00 MB per state)
llama_model_load_internal: allocating batch_size x (640 kB + n_ctx x 160 B) = 360 MB VRAM for the scratch buffer
llama_model_load_internal: offloading 40 repeating layers to GPU
llama_model_load_internal: offloaded 40/43 layers to GPU
llama_model_load_internal: total VRAM used: 13218 MB
llama_new_context_with_model: kv self size  =  400.00 MB

system_info: n_threads = 32 / 64 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | VSX = 0 |
sampling: repeat_last_n = 64, repeat_penalty = 1.100000, presence_penalty = 0.000000, frequency_penalty = 0.000000, top_k = 40, tfs_z = 1.000000, top_p = 0.950000, typical_p = 1.000000, temp = 0.100000, mirostat = 0, mirostat_lr = 0.100000, mirostat_ent = 5.000000
generate: n_ctx = 512, n_batch = 512, n_predict = -1, n_keep = 0


 ### Instruction: Create poetry about Mount Fuji in 200 words
### Response:

Oh, majestic Mount Fuji, so serene and divine,
Your snow-capped peak touches the sky, so fine.
In the distance, a haze of blue,
A gentle breeze rustles through.

Your slopes are blanketed in green,
A carpet of life, so serene.
The trees stand tall and proud,
Their leaves rustling, a gentle sound.

In the shadow of your greatness,
I am but a small part,
A tiny speck in your grand design,
Yet, I am filled with awe and wonder at your heart.

Oh, Mount Fuji, you are a symbol of strength and grace,
A beacon of hope, a source of light,
In your presence, I find peace,
And my spirit takes flight. [end of text]

llama_print_timings:        load time =  2480.95 ms
llama_print_timings:      sample time =   204.16 ms /   185 runs   (    1.10 ms per token,   906.13 tokens per second)
llama_print_timings: prompt eval time =   605.07 ms /    22 tokens (   27.50 ms per token,    36.36 tokens per second)
llama_print_timings:        eval time = 27541.31 ms /   184 runs   (  149.68 ms per token,     6.68 tokens per second)
llama_print_timings:       total time = 28424.62 ms

CPU(EPYC 7551P)

(llama2) ubuntu@ubuntu-Super-Server:~/Documents/llama.cpp$ ./build/bin/main -m ./models/llama-2-13b-chat.ggmlv3.q8_0.bin --temp 0.1 -p "### Instruction: Create poetry about Mount Fuji in 200 words
### Response:" -ngl 0 -b 512
main: build = 975 (9ca4abe)
main: seed  = 1691810099
ggml_init_cublas: found 2 CUDA devices:
  Device 0: Tesla P40, compute capability 6.1
  Device 1: Tesla P40, compute capability 6.1
llama.cpp: loading model from ./models/llama-2-13b-chat.ggmlv3.q8_0.bin
llama_model_load_internal: format     = ggjt v3 (latest)
llama_model_load_internal: n_vocab    = 32000
llama_model_load_internal: n_ctx      = 512
llama_model_load_internal: n_embd     = 5120
llama_model_load_internal: n_mult     = 256
llama_model_load_internal: n_head     = 40
llama_model_load_internal: n_head_kv  = 40
llama_model_load_internal: n_layer    = 40
llama_model_load_internal: n_rot      = 128
llama_model_load_internal: n_gqa      = 1
llama_model_load_internal: rnorm_eps  = 5.0e-06
llama_model_load_internal: n_ff       = 13824
llama_model_load_internal: freq_base  = 10000.0
llama_model_load_internal: freq_scale = 1
llama_model_load_internal: ftype      = 7 (mostly Q8_0)
llama_model_load_internal: model size = 13B
llama_model_load_internal: ggml ctx size =    0.11 MB
llama_model_load_internal: using CUDA for GPU acceleration
ggml_cuda_set_main_device: using device 0 (Tesla P40) as main device
llama_model_load_internal: mem required  = 13555.97 MB (+  400.00 MB per state)
llama_model_load_internal: offloading 0 repeating layers to GPU
llama_model_load_internal: offloaded 0/43 layers to GPU
llama_model_load_internal: total VRAM used: 360 MB
llama_new_context_with_model: kv self size  =  400.00 MB

system_info: n_threads = 32 / 64 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | VSX = 0 |
sampling: repeat_last_n = 64, repeat_penalty = 1.100000, presence_penalty = 0.000000, frequency_penalty = 0.000000, top_k = 40, tfs_z = 1.000000, top_p = 0.950000, typical_p = 1.000000, temp = 0.100000, mirostat = 0, mirostat_lr = 0.100000, mirostat_ent = 5.000000
generate: n_ctx = 512, n_batch = 512, n_predict = -1, n_keep = 0


 ### Instruction: Create poetry about Mount Fuji in 200 words
### Response:

Mount Fuji, a majestic sight
A symbol of Japan, pure and bright
Snow-capped peak, serene and still
A challenge to climb, but the view is thrilling

In the distance, the sun sets low
Painting the sky with hues of gold
The mountain's shadow stretches far and wide
As the stars begin to twinkle inside

The mountain's beauty is a work of art
A masterpiece that touches the heart
A source of inspiration, a symbol of strength
A reminder of nature's grand design

In the silence, I find peace
A sense of calm, a world to cease
From the summit to the base
Mount Fuji, a wonder of grace. [end of text]

llama_print_timings:        load time =  1813.56 ms
llama_print_timings:      sample time =   163.44 ms /   169 runs   (    0.97 ms per token,  1034.04 tokens per second)
llama_print_timings: prompt eval time =  1460.09 ms /    22 tokens (   66.37 ms per token,    15.07  tokens per second)
llama_print_timings:        eval time = 135809.05 ms /   168 runs   (  808.39 ms per token,     1.24   tokens per second)
llama_print_timings:       total time = 137504.02 ms