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
440
0
Share
KubernetesでGPUを使おう
大阪工業大学 ネットワークデザイン学科 LT大会 2025v1 で発表した資料です
Dodai-Dodai
February 27, 2025
Other Decks in Programming
See All in Programming
権限チェックの一貫性を型で守る TypeScript による多層防御
mnch
3
600
CSC307 Lecture 17
javiergs
PRO
0
240
Transactional Change Stream Processing With Debezium and Apache Flink
gunnarmorling
1
130
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
120
横断組織出身のQAEがインプロセスQAEでつまずいたこと・活かせたこと
ty89
0
180
Moments When Things Go Wrong
aurimas
3
110
誰も頼んでない機能を出荷した話
zekutax
0
130
iOS26時代の新規アプリ開発
yuukiw00w
0
200
[BalkanRuby 2026] Drop your app/services!
palkan
3
680
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
8
1.8k
Are We Really Coding 10× Faster with AI?
kohzas
0
230
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
5
660
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
A Tale of Four Properties
chriscoyier
163
24k
WCS-LA-2024
lcolladotor
0
600
Believing is Seeing
oripsolob
1
130
Visualization
eitanlees
151
17k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
320
Building Applications with DynamoDB
mza
96
7k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
580
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
140
Making Projects Easy
brettharned
120
6.6k
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があることがベストプラクティスかも…