拡張リソースを使用してKubernetes GPU RAMを分割
前の2つのバージョン(1)および(2)に記載されているように、gpuは、クバーネディスがリソースを要求する際に多くの制限を有する.
そこで,以下の場合,参照のためにGPU RAMを分割して容器に割り当てる方法について議論する.
n個のコンテナでGPUを共有して割り当てることはできない. 連続パイプラインの各GPU要求に制限がある場合は、順次運転可能であるが、しばしばエラー(Pending、timeout等) が発生する.
GPUをコンテナに分割して割り当てるが、NVIDIA MIGはA 100、A 30などのシリーズのみをサポートする.(A 5000などの低価格製品ユーザーはMIG-を使用できませんが、実はこれは決して低価格ではありません…)
クバーネディスでGPUを利用したいのですが、MIGではなくGPU分割配分方法を探しています!
Kubernetesには、CPUとRAMの間の機能を提供する生産資源割当という概念があります.->これは今日使用するコアコンセプトです.このようにVRAMリクエストを分けて サーバー仕様から開始します. 割り当て可能セクションには、ノード割り当て可能な仕様がリストされています.
は直接 VRAMは、現在使用されているGPU情報から得られる.(NVIDIA RTX A5000 D6 24GB)
- CPU : 40core Memory(RAM) : 62.47 GiB (available: 52G) 一時記憶:457.44ギガビット(Avail:224 G) VRAM : 24GB KB、KB、KIを混同するユーザの容量を定義する
コンテナ要求仕様
この部分はまだ確認方法が見つかっていません.
コンテナが正常に動作するには、どのくらいのリソースが必要かを決定できます.
今回のリリースでは、CPU/RAMのリソース要件を指定するのではなく、VRAMにのみlimitを指定するのでスキップ! 人の在職者に尋ねたところ、podを実験的に生成して返し、使用量に応じて仮想メモリを再割り当てしたという.また、以下に示すように、仮想メモリを6つに分け、使用量に対して仮想メモリを設定しすぎて、1 GBごとにpodを割り当てる24つに分けます. Kubernetesは「Extended Resource」を定義している.
-カスタムリソースを追加できることを示す、次の画像でリソースを定義します.
API用のJWTトークンが取得される.
defaultという名前のユーザーに適切な権限を付与しましょう. 便宜上、クラスタ-admin権限を付与します.操作環境では、非常に危険な行為ですので、適切な権限を与えてください.
APIサーバアドレスについて説明します.
https://192.168.0.14:8443を申請してもいいですよ.
トークンとサービスアカウントのライセンスが完了しました.apiの結果が正常かどうかを見てみましょう.
ノード名もチェックします.
Kubernetes APIサーバ上でHTTP PATCHを実行してResourceを拡張する準備が整いました. フォーマットは次のとおりです.
ggaman.com/vramは固定フォーマットです.同じものを使えばいい 無事にCustomリソース登録を完了しました!では、これらのリソースを利用してパイドのリソースを制限し、GPUを分割しましょう. 拡張リソースを使用してGPUパーティションをチェックする
そこで,以下の場合,参照のためにGPU RAMを分割して容器に割り当てる方法について議論する.
n個のコンテナでGPUを共有して割り当てることはできない.
GPUをコンテナに分割して割り当てるが、NVIDIA MIGはA 100、A 30などのシリーズのみをサポートする.(A 5000などの低価格製品ユーザーはMIG-を使用できませんが、実はこれは決して低価格ではありません…)
クバーネディスでGPUを利用したいのですが、MIGではなくGPU分割配分方法を探しています!
サーバー仕様/コンテナ要件構造の決定
kubectl get nodes -o yaml
free -h
でメモリ(RAM)をチェックし、df -h
で容量をチェックするのが便利です.- CPU : 40core
この部分はまだ確認方法が見つかっていません.
コンテナが正常に動作するには、どのくらいのリソースが必要かを決定できます.
今回のリリースでは、CPU/RAMのリソース要件を指定するのではなく、VRAMにのみlimitを指定するのでスキップ!
拡張リソースの作成
-カスタムリソースを追加できることを示す、次の画像でリソースを定義します.
ノードへの拡張リソースの追加
kubectl get serviceaccount default
TOKEN=$(kubectl get secret $(kubectl get sa default \
-ojsonpath="{.secrets[0].name}") \
-ojsonpath="{.data.token}" | base64 -d)
echo $TOKEN
defaultという名前のユーザーに適切な権限を付与しましょう.
kubectl create clusterrolebinding default-cluster-admin --clusterrole cluster-admin --serviceaccount kubeflow-user-example-com:default
APIサーバアドレスについて説明します.
kubectl cluster-info
https://192.168.0.14:8443を申請してもいいですよ.
トークンとサービスアカウントのライセンスが完了しました.apiの結果が正常かどうかを見てみましょう.
curl -k -H "Authorization: Bearer $TOKEN" https://192.168.0.14:8443
ノード名もチェックします.
kubectl get nodes
Kubernetes APIサーバ上でHTTP PATCHを実行してResourceを拡張する準備が整いました.
curl -k -H "Authorization: Bearer $TOKEN" --header "Content-Type: application/json-patch+json" --request PATCH --data '[{"op": "add", "path": "/status/capacity/ggaman.com~1vram", "value": "24"}]' https://192.168.0.14:8443/api/v1/nodes/tyan/status
curl -k -H "Authorization: Bearer $TOKEN" --header "Content-Type: application/json-patch+json" --request PATCH --data '[{"op": "add", "path": "/status/capacity/<정의하고자하는 ExtendedResource 이름>", "value": "<VRAM>"}]' <컨트롤플레인 api주소>/api/v1/nodes/<노드이름>/status
拡張リソースが適用されていることを確認します。
kubectl get nodes -o yaml
拡張リソースを使用してGPUパーティションをチェックする
ユーザーは以前のようにpodでresourcesを使用することができます.limitを設定するように簡単にnvidia.com/gpu
をggaman.com/vram
に変更すればいい!"spec": {
"tfReplicaSpecs": {
"Chief": {
"replicas": 1,
"restartPolicy": "OnFailure",
"template": {
"metadata": {
"annotations": {"sidecar.istio.io/inject": "false"}
},
"spec": {
"containers": [
{
"name": "tensorflow",
"image": "docker.io/moey920/train_forecasting_model:latest",
"command": [
"python",
"/code/ecm_forecasting_ar_lstm/main.py",
f"--df_me={df_me}",
"--input_width=${trialParameters.inputWidth}",
"--label_width=${trialParameters.labelWidth}",
"--shift=${trialParameters.shift}",
],
"resources": {
"limits": {
"ggaman.com/vram": 1
}
},
}
]
},
},
},
これで、以下に示すように、1つのGPUが複数のコンテナに並列に割り当てられたVRAMが表示されます.
ふろく
出典:https://blog.ggaman.com/1025、https://coffeewhale.com/apiserver
Reference
この問題について(拡張リソースを使用してKubernetes GPU RAMを分割), 我々は、より多くの情報をここで見つけました
https://velog.io/@moey920/Kubernetes-GPU-RAM-분할Extended-Resource-이용
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
"spec": {
"tfReplicaSpecs": {
"Chief": {
"replicas": 1,
"restartPolicy": "OnFailure",
"template": {
"metadata": {
"annotations": {"sidecar.istio.io/inject": "false"}
},
"spec": {
"containers": [
{
"name": "tensorflow",
"image": "docker.io/moey920/train_forecasting_model:latest",
"command": [
"python",
"/code/ecm_forecasting_ar_lstm/main.py",
f"--df_me={df_me}",
"--input_width=${trialParameters.inputWidth}",
"--label_width=${trialParameters.labelWidth}",
"--shift=${trialParameters.shift}",
],
"resources": {
"limits": {
"ggaman.com/vram": 1
}
},
}
]
},
},
},
出典:https://blog.ggaman.com/1025、https://coffeewhale.com/apiserver
Reference
この問題について(拡張リソースを使用してKubernetes GPU RAMを分割), 我々は、より多くの情報をここで見つけました https://velog.io/@moey920/Kubernetes-GPU-RAM-분할Extended-Resource-이용テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol