3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

みなさん、こんにちは。日立製作所の宮村です。
KeplerというPrometheus Exporterを使用して、kubernetes上で動かしているPodの電力消費量とCO2排出量を計測してみました。
今回はローカルのLLMを計測対象にします。

1. 前提条件

  • ローカルのk8sにLLM Podをデプロイされていること
    今回はLLM Modelを動かすために、Ollamaとopen-webuiを使用しました。
    使用したyamlファイルはGitHub に置いてあるため、必要であれば使用してください。
    元々docker-composeで動かしていたものをkubernetes上で動かすために、docker-compose.yamlkomposeを使用してkubernetes用のyaml群に変換したものです。
  • (Helm ChartでKeplerをインストールする場合)Helmがインストールされていること

2. Keplerで電力消費量とCO2排出量の可視化

2-1. Keplerのインストール

Keplerのインストール手順 を参照して、Keplerをk8sにデプロイします。
インストール方法はいくつかありますが、試すだけであればHelm Chartを使用する方法が簡単でオススメです。

  1. Prometheusのインストール
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

helm install prometheus prometheus-community/kube-prometheus-stack \
    --namespace monitoring \
    --create-namespace \
    --wait
  1. KeplerのHelm ChartをHelmのリポジトリに追加
helm repo add kepler https://sustainable-computing-io.github.io/kepler-helm-chart
helm repo update
  1. Keplrのインストール
helm install kepler kepler/kepler \
    --namespace kepler \
    --create-namespace \
    --set serviceMonitor.enabled=true \
    --set serviceMonitor.labels.release=prometheus

KeplerからエクスポートされたメトリクスをPromehtuesが発見できるように、serviceMonitorを有効にします。
また、serviceMonitor.labelsに、リリース名のラベルとしてpromtheusを指定します。

  1. GrafanaにKeplerのダッシュボードを追加します
    GitHubにあるKepler-Exporter.jsonの中身を、ローカルのkepler_dashboard.jsonにコピーします。
    kepler_dashboard.json`をGrafana Podに転送します。
GF_POD=$(
    kubectl get pod \
        -n monitoring \
        -l app.kubernetes.io/name=grafana \
        -o jsonpath="{.items[0].metadata.name}"
)
kubectl cp kepler_dashboard.json monitoring/$GF_POD:/tmp/dashboards/kepler_dashboard.json

Keplerをインストールが完了しました。
Keplerのダッシュボードは、上段: CO2排出量、中段: Namespace中にあるPodの合計電力消費量(Watt)、下段: Namespace中のPKG+DRAM+OTHER+GPUの合計電力消費量(kWh/day)で構成されています。
kepler_dashboard.png

3. 各LLMモデルの電力消費量とCO2排出量を可視化

今回比較するモデルとモデルのパラメータ数は、以下の3つです。

  • llama 3.2 3.2b
  • gemma2 2b
  • gemma2 9b

Asking 60+ LLMs a set of 20 questionsの中から、以下の質問をベンチマークとしました。

I went to the market and bought 10 apples. I gave 2 apples to the neighbor and 2 to the repairman. I then went and bought 5 more apples and ate 1. I also gave 3 bananas to my brother. How many apples did I remain with? Let's think step by step.

3-1. llama 3.2 の電力消費量とCO2排出量

llama3b-dashboard.png

3-2. gemma2 2b の電力消費量とCO2排出量

gemma2b-dashboard.png

3-2. gemma2 9b の電力消費量とCO2排出量

gemma9b-dashboard.png

3-3. 結果

以下の表は、各モデルの電力消費量とCO2排出量の結果をまとめたものです。
gemma2 9bの方がgemma2 2bより電力消費量とCO2排出量のどちらも多く、同じモデルであればパラメーター数の大きさに比例することがわかりました。
しかし、llama 3.2 3bとgemma2 9bを比較すると、パラメーター数はllama 3.2 3bの方が小さいものの電力消費量とCO2排出量は多いという結果になりました。

model CO2 排出量(pounds/kWh/day) 電力消費量(kWh.day)
llama 3.2 3b 0.1707 0.0333
gemma2 2b 0.0948 0.0180
gemma2 9b 0.1355 0.0257

この結果から、LLMモデルの電力消費量とCO2排出量について以下の2点が推論できます。

  • 同一モデルであれば、パラメーター数に比例して電力消費量とCO2排出量が多くなる
  • 異なるモデル間ではパラメーター数の大小よりもモデルそのもので電力消費量とCO2排出量に影響する

あくまでも、今回検証した環境での結果のため、この結果が全てのケースに当てはまるわけではありません。ご承知おきください。

終わりに

以上、KeplerというPromtheus Exporterを使用して、Kubernetes上で動いているローカルLLMの電力消費量とCO2排出量を計測してみました。
ローカルLLMを使用されている方は電力消費量などを計測するために、Keplerは非常に有効なため、ぜひ利用を検討してみてください。

参考リンク

Kepler
Ollama


  • Kubernetesは、米国およびその他の国におけるThe Linux Foundationの商標または登録商標です
  • その他、記載されている会社名および商品・製品・サービス名は、各社の商標または登録商標です
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?