view slide/slide.md @ 49:71e1425687f3

update tex
author Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
date Fri, 12 Feb 2021 23:49:40 +0900
parents 47a9b8bf069b
children d0b469710cb2
line wrap: on
line source

---
marp: false
title: コンテナ技術を用いた教育情報システムの構築
paginate: true

theme: default
size: 16:9
style: |
  section {
    background-color: #FFFFFF;
    font-size: 28px;
    color: #4b4b4b;
    font-family: "Arial", "Hiragino Maru Gothic ProN";
  }

  section.title {
    font-size: 40px;
    padding: 40px;
  }
  section.title h1 {
    text-align: center;
  }

  section.slide h1 {
    position: absolute;
    left: 50px; top: 35px;
  }

---
<!-- class: title -->
# <!--fit--> コンテナ技術を用いた教育情報システムの構築

- 宮平 賢
    - 琉球大学工学部工学科知能情報コース
- 河野 真治
    - 琉球大学工学部

---
<!-- class: slide -->
# 研究目的

- 情報通信技術の普及に伴い学ぶことが増えている
- その学習環境として、Virtual MachineやContainerがある
    - 実行には高性能なPCが必要な場合がある
    - クラウドサービスもあるが、無料だと制限がある
- 学生の学習環境として、コストを支払う必要のない環境を提供したい
- 今年度はシステム更新があり、新しくSSDとGPUが搭載される
    - リソースを最大限利用できる教育情報システムが必要となる

---
<!-- class: slide -->
# これまでの学生向け学習環境

- VM貸出サービス
    - Akatsuki
        - 申請を行い、Webコントロールパネルから作成
    - ie-virsh
        - 手元のPCで作成したVMイメージのデプロイ

- VM貸出サービスのデフォルトスペック
    - CPU 1コア
    - メモリ 1GB
    - ディスク容量 10GB

---
# これまでの学習環境の問題点

- VM貸出サービスの一部学生は申請の方法が分からなかったり、貸出サービスがあることが周知されていなかったため、旧システムのリソースが余っていた

</br>

- VMのスペックの変更にはシステム管理チームへの申請が必要であり、利用者と管理者とのやり取りなどの手間があった

</br>

- 旧システムにはGPUが搭載されていないため、貸出サービスではなく研究室ごとの機器、クラウドサービスが多く利用された

---
<!-- class: title -->
# 教育情報システムの構築

---
<!-- class: slide -->
# 教育情報システムの要件

- マルチユーザに対応
    - 本コースの学生、教員に対応する必要がある
- 学生がサーバのリソースを利用できる環境
- 手間が少なく利用できる環境
- 信頼性の高いファイルシステム

<!-- ---
# オンプレミス環境

- 汎用サーバ x 4
- ディスクサーバ x 2

|  |  |
| :---: | :---: |
| CPU | Intel Xeon Gold 6238 (2.10GHz/22Core) |
| GPU |  Nvidia Tesla V100S |
| メモリ | 512GB |
| SAS SSD | 5TB |
| NVMe SSD | 1.5TB |
-->
---
# VM貸出サービスの移行

- VM貸出サービスを継続するため、KVMを導入する
- VMからGPUの利用にはPCIパススルーの設定が必要となる
- しかし、VM1つに対し、1つのGPUが必要になる
    - 希望する学生全員に割り当てができない

</br>

- そこで、コンテナ環境を導入する
    - 1つのGPUを複数のコンテナから利用できる

---
# コンテナ環境の導入

- マルチユーザで利用できるPodman、Singularityを導入する
- Podman
    - rootlessで利用できる
    - nvidia-dockerの設定を行えばGPUを利用できる
- Singularity
    - rootlessで利用できる
    - GPUの利用が容易
        - GPUドライバーのインストールのみ

---
# コンテナエンジンの補い

- Podman
    - イメージの作成やコンテナの作成が遅い
    - rootlessでは実行できない機能がある
        - IPアドレスの割り当て
- Singularity
    - イメージの作成に時間がかかる
        - ビルド中にエラーが発生すると、一から再開する必要がある

- そこでPodmanのwrapperであるie-podmanを作成した

---
# ie-podmanの作成

- ユーザのUID、GIDを取得し管理を行う
    - 他のユーザのリソースを操作できない
- SSD上にイメージ等を保存し、高速を図る

---
# ie-podmanの機能 1/2

- Podmanのすべての機能をwrappするのではなく、一部機能のみを提供する

| コマンド | 機能 |
| --- | --- |
| build| Containerfileの指示に従いイメージを作成する | 
| cp | コンテナにファイルを送信する |
| exec | 起動中のコンテナでプロセスを実行する |
| images | コンテナイメージの一覧を表示する |
| info | コンテナの情報を表示する |
| logs | コンテナのlogを表示する |
| ps | 起動中のコンテナの一覧を表示する |

---
# ie-podmanの機能 2/2

- registryやsifなど独自機能を提供する

| コマンド | 機能 |
| --- | --- |
| registry |  学科のレジストリの操作を行う |
| rm | コンテナを削除する |
| run | コンテナを作成する |
| sif | イメージをsifファイルに変換する |
| start | コンテナを起動する |
| stop | コンテナを停止する |

---
# ジョブスケジューラの導入

- 多くのリソースを必要とするプログラムは管理が必要である
- 4台のサーバのリソースを利用できるようにする必要がある
- そこで、ジョブスケジューラのSlurmを採用する
    - フォールトトレラントで拡張性が高い

---
# ジョブスケジューラの構築

利用方針 **「計算リソースの利用効率を上げる」**
- Jobの優先順位
    - 要求するリソースの少ないJobの優先度を高くする
    - 実行時間が短いJobの優先度を高くする
    - これまでのJobの実行履歴で優先度は変化しない

これでは多くのリソースを要求するJobが実行されない可能性がある。
- Jobの実行時間
    - Jobの実行時間の記載がない場合は**1日で強制終了**させる
    - 管理者からJobの優先度を上げる

また、Jobのスケジュールにはバックフィルを採用する。

---

![](images/backfill.png)

---
# ファイルシステムの導入

- Cephを採用
    - 自己修復、自己管理機能を搭載するため信頼性が高い
    - 柔軟なアクセス方法の提供
        - Object Gateway
        - ブロックデバイス
        - POSIX互換のファイルシステム

---
# 教育情報システムの構成

- 汎用サーバ全てにKVM、Podman、Singularityをインストール
- Slurm
    - 汎用サーバ1台をコントローラ/計算ノード
    - 残りを計算ノード
- Ceph
    - ディスクサーバをOSD
    - 汎用サーバ3台をMON, MDS, MGR

---

![bg 80%](images/system.png)

---
<!-- class: title -->
# 教育情報システムの利用と管理

---
<!-- class: slide -->
# VM貸出サービスの利用

- VMの作成、スペックの変更で申請が必要なくなった
- VMの作成
    - `ie-virsh define --template Ubuntu-20 VM_NAME`
- スペックの変更
    - `ie-virsh edit VM_NAME`

---
# ie-podmanの使用方法

- PodmanはDockerと同じCLIを提供している
- IPアドレス、GPUをコンテナへ割り当てられる
    - `ie-podman run --ip --gpu [IMAGE_NAME]`
- 作成したイメージをsifファイルへの変換に対応
    - `ie-podman sif [IMAGE_NAME]`

---
# GPUの利用方法

- Singularityでは容易にGPUを利用できる
    - `singularity run --nv [SIF_NAME]`
- ホームディレクトリ、/tmpなどがコンテナにマウントされる
    - プログラムの実行に便利
- SlurmによるJob管理
    - 必要なリソースを記述し投下する
    - CPU数、GPU数

---
# batchファイルの例

- Jobに必要とするリソース
    - CPU 8コア、GPU 1つ
- Jobの実行時間
    - 1分

```bash
#!/bin/bash
#SBATCH --job-name sample
#SBATCH --output logs/%x-%j.log
#SBATCH --error logs/%x-%j.err
#SBATCH --nodes 1
#SBATCH --cpus-per-task 8
#SBATCH --gpus tesla:1
#SBATCH --time 01:00

singularity exec --nv [SIF_NAME] [COMMANDS]
```

---
<!-- class: title -->
# 教育情報システムの評価

---
<!-- class: slide -->
# ファイルシステムの評価 1/2

- 実験概要
    - `dd`コマンドを使用し書き込み速度を比較する

- 書き込み速度の比較
    - GFS2
    - NFS
    - CephFS
    - CephRBD

---
# ファイルシステムの評価 2/2

![bg 70%](images/fswrite.png)

---
# ie-podmanの評価 1/3

- 実験環境
    - 新システムの汎用サーバで実施

- 実験概要
    - イメージのBuild速度を比較する

```Dockerfile
FROM ubuntu:20.04
RUN apt-get update && \
    apt-get upgrade -y
```

- Build速度の比較
    - Docker
    - Podman (rootless)
    - ie-podman

---
# ie-podmanの評価 2/3

![bg 70%](images/container2.png)

---
# ie-podmanの評価 3/3

- Rootlessは`syscall`が複数呼ばれている
    - そのため、イメージの作成が遅いのではないか
- 左がrootless、右がrootfull

![height:325](images/syscall.png)

---
# 学習環境の評価

- VM
    - 学生が自由にスペックを変更できる
    - ディスク容量を抑えれる
- コンテナ
    - 気軽に利用できる
    - 高性能な実況環境を利用できる

---
<!-- class: title -->
# まとめ

---
<!-- class: slide -->
# 今後の課題

- 教育情報システムの周知
    - Jobの投下やリソースの要求方法
    - ie-virsh、ie-podmanの使用方法
    - 定期的な周知が必要
- ie-podmanのネットワーク構成の見直し
    - プレフィックス長が24のため、最大254個のIPアドレス
    - コンテナを停止で使用されない場合は削除する必要がある
- バックアップの運用
    - Cephと専用サーバ以外のバックアップ先を用意する必要がある