はじめに
みなさん、こんにちは。日立製作所の宮村です。
KeplerというPrometheus Exporterを使用して、kubernetes上で動かしているPodの電力消費量とCO2排出量を計測してみました。
今回はローカルのLLMを計測対象にします。
1. 前提条件
- ローカルのk8sにLLM Podをデプロイされていること
今回はLLM Modelを動かすために、Ollamaとopen-webuiを使用しました。
使用したyamlファイルはGitHub に置いてあるため、必要であれば使用してください。
元々docker-composeで動かしていたものをkubernetes上で動かすために、docker-compose.yaml
をkompose
を使用してkubernetes用のyaml群に変換したものです。 - (Helm ChartでKeplerをインストールする場合)Helmがインストールされていること
2. Keplerで電力消費量とCO2排出量の可視化
2-1. Keplerのインストール
Keplerのインストール手順 を参照して、Keplerをk8sにデプロイします。
インストール方法はいくつかありますが、試すだけであればHelm Chartを使用する方法が簡単でオススメです。
- 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
- KeplerのHelm ChartをHelmのリポジトリに追加
helm repo add kepler https://sustainable-computing-io.github.io/kepler-helm-chart
helm repo update
- 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を指定します。
- 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)で構成されています。
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排出量
3-2. gemma2 2b の電力消費量とCO2排出量
3-2. gemma2 9b の電力消費量とCO2排出量
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は非常に有効なため、ぜひ利用を検討してみてください。
参考リンク
- Kubernetesは、米国およびその他の国におけるThe Linux Foundationの商標または登録商標です
- その他、記載されている会社名および商品・製品・サービス名は、各社の商標または登録商標です