Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
KubernetesでGPUを使おう
Search
Dodai-Dodai
February 27, 2025
Programming
0
310
KubernetesでGPUを使おう
大阪工業大学 ネットワークデザイン学科 LT大会 2025v1 で発表した資料です
Dodai-Dodai
February 27, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
210
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.4k
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
5
470
Oxlint JS plugins
kazupon
1
970
組織で育むオブザーバビリティ
ryota_hnk
0
180
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
190
Implementation Patterns
denyspoltorak
0
290
AI時代の認知負荷との向き合い方
optfit
0
160
AgentCoreとHuman in the Loop
har1101
5
240
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
140
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
2026年 エンジニアリング自己学習法
yumechi
0
140
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
GraphQLとの向き合い方2022年版
quramy
50
14k
Into the Great Unknown - MozCon
thekraken
40
2.3k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
130
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
210
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
110
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Six Lessons from altMBA
skipperchong
29
4.1k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
67
Transcript
KubernetesでGPUを使おう ⼤阪⼯業⼤学 Dodai-Dodai
⾃⼰紹介 • Dodai-Dodai • ⼤阪⼯業⼤学 情報科学部 ネットワークデザイン学科4年 • 通信⽅式研究室 •
ネットワークやサーバーをいじってます • JANOG 55 NOC運営/ICTSC2024 運営
モチベーション 格安で譲ってもらったゲーミングPC を⾃宅鯖として利⽤している • スペック: I7-12700kf, RAM 64GM, RTX3060 12GB
• 運⽤: Proxmox(KVM)で仮想マシンを複 数実⾏ • GPUが勿体無い!! • せっかくだからLLM(⼤規模⾔語モ デル)でも回してみよう!! • どうせなら複数タスクで扱えるよう にしたい!!
仮想マシンでGPUを使う… • GeforceシリーズのGPUは、複数の仮想マシンで共有できな い。 • 1台のVMにしかパススルーできないため、リソースが固定される • これでは効率的にGPUを利⽤できない • NVIDIA
Container Toolkit & k8s-device-plugin がある • コンテナ単位でGPUを利⽤可能にするツール • DockerなどからGPUを利⽤可能となる • 加えてKubernetesを使えば、GPUを効率的に分配できる!
Kubernetesって? • 軽量な仮想マシン(コンテナ)を操作す るためのツール • コンテナの起動や停⽌、負荷分散や障 害からの復旧を⾃動で⾏う
環境構築 • Kubernetesには様々なディストリビューションがある • Kubeadm • Minikube • MicroK8s •
などなど 基本的にはこれらを構築した上で NVIDIAのGPUを利⽤する設定を⾏う
環境構築 • NVIDIA Driver ‧ Nvidia Container Toolkitのinstall • Docker
runでGPUが 認識されているか確 かめる
Kubernetes(Minikube)の起動
軽量なLLMを動作させてみる 軽量なLLMであるcyberagent/open-calm-smallのサンプルコードを⽤意 import torch from transformers import AutoModelForCausalLM, AutoTokenizer model_name
= "cyberagent/open-calm-small" # モデルとトークナイザーのロード model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", torch_dtype=torch.float16) tokenizer = AutoTokenizer.from_pretrained(model_name) # 入力データ inputs = tokenizer("大学でコンピュータサイエンスを学ぶことは", return_tensors="pt").to(model.device) # テキスト生成 with torch.no_grad(): tokens = model.generate( **inputs, max_new_tokens=64, do_sample=True, temperature=0.7, top_p=0.9, repetition_penalty=1.05, pad_token_id=tokenizer.pad_token_id, ) # 出力のデコード output = tokenizer.decode(tokens[0], skip_special_tokens=True) print(output)
軽量なLLMを動作させてみる サンプルコードが動くDockerImageを作るDockerfile # ベースイメージ FROM python:3.10 # 作業ディレクトリの作成 WORKDIR /app
# 必要なパッケージのインストール RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* # Pythonライブラリのインストール RUN pip install --no-cache-dir torch transformers accelerate # モデルを事前にダウンロード(キャッシュ用) RUN python -c "from transformers import AutoModelForCausalLM, AutoTokenizer; ¥ AutoModelForCausalLM.from_pretrained('cyberagent/open-calm-small'); ¥ AutoTokenizer.from_pretrained('cyberagent/open-calm-small')" # スクリプトのコピー COPY generate.py /app/generate.py # スクリプトの実行 CMD ["python", "generate.py"] $ docker build -t hf-text-generator . # Docker Imageをビルド
軽量なLLMを動作させてみる DockerfileをKubernetes上で動作させるためのdeployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: hf-text-generator spec:
replicas: 1 selector: matchLabels: app: hf-text-generator template: metadata: labels: app: hf-text-generator spec: containers: - name: hf-text-generator image: hf-text-generator:latest resources: limits: nvidia.com/gpu: 1 memory: "4Gi" requests: nvidia.com/gpu: 1 imagePullPolicy: IfNotPresent
軽量なLLMを動作させてみる Kubernetes上で 動作させる
GPUの共有ができていない!! Kubernetes内にあるGPUのデバイス数が1つしかないため 複数のコンテナで使うことができない
Time-Slicing GPUs • GPUの時分割制御、 NVIDIA/k8s-device-pluginにより設定 • これにより複数のタスクでGPUを共有できるようになる apiVersion: v1 kind:
ConfigMap metadata: name: time-slicing-config-all data: any: |- version: v1 flags: migStrategy: none sharing: timeSlicing: resources: - name: nvidia.com/gpu replicas: 4 # 4つに分割
Time-Slicing GPUs • GPUの時分割制御、 NVIDIA/k8s-device- pluginにより設定 • 複数のタスクでGPUを 共有できる •
設定後は、メモリの使⽤ 量に制限がかかる
感想 • 業務⽤の⾼いGPUを調達することなく、GPUを複数タスクで共 有できる環境ができたのはよかったところ • (当然ながら)分割によりVRAMの制限が厳しくなるのでワーク ロードの向き不向きが出てしまうのは⽋点 • 結局、複数台のGPUがあることがベストプラクティスかも…