Admin Guide

本書では、KAMONOHASHIを導入する際の設定や使用中のシステム設定変更をスムーズに行う為に各機能や手順を説明します。

前提

読者がLinux、Git、Active Directoryの基本的な知識を持つことを前提としています。

事前準備

KAMONOHASHIを利用するにあたり、事前に設定しておく内容は以下です。

AD設定

ユーザ管理にActive Directory(AD)を使用する場合、以下がADに設定されていることを確認します。

  • ADのLDAP認証の許可

テナント

テナントはKAMONOHASHIの管理単位です。テナント毎に、ユーザの管理、クォータ(リソースの使用量制限)の設定が行えます。 テナントには、Gitリポジトリ、Docker Registryおよびオブジェクトストレージが関連付けられ、それぞれ複数のテナント間で共有可能です。 Gitリポジトリ、Docker Registryは1テナントに複数登録することが可能です。

初期状態では、「Sandbox」という名前のテナントが用意されています。

テナントの作成

テナントの作成は以下のフローで行います。

  1. ストレージ情報の新規登録
  2. Git情報の新規登録
  3. Docker Registry情報の新規登録
  4. テナントの作成

ストレージ情報、Git情報、Docker Registry情報については、過去に登録したものを再度利用する場合、改めて登録しなおす必要はありません。

ストレージ情報の新規登録

テナントが利用するストレージの情報を登録します。 ストレージの登録には、オブジェクトストレージへ以下の操作を行う権限を持ったユーザのアクセスキーおよびシークレットキーが必要です。

  • バケット追加
  • 追加したバケットに対するオブジェクトの追加・取得・削除

ストレージ情報の新規登録は、以下のフローで実行できます。

  1. 管理権限を持つユーザでログイン
  2. [システム管理] → [ストレージ管理]を選択し、ストレージ一覧画面を表示する
  3. 画面右上の新規登録ボタンを押下する
  4. 画面に下記の情報を入力し、ストレージ情報を登録する。

ストレージ登録画面(スクショ3-3)

項目 要否 説明
名前 必須 KAMONOHASHIに登録する名前。管理者が各登録情報を識別しやすいような、任意の名前を入力する。
サーバ名URL 必須 minioのURL
(例)kamonohashi.ai:9000
アクセスキー 必須 minioのアクセスキー
シークレットキー 必須 minioのシークレットキー
NFSサーバ 必須 NFSサーバのホスト名またはIPアドレス
NFS共有ルートディレクトリ 必須 マウントする際の共有ルートディレクトリポイント

Git情報の新規登録

テナントが利用するGitリポジトリの情報を登録します。

Git情報の新規登録は、以下のフローで実行できます。

  1. 管理権限を持つユーザでログイン
  2. [システム管理] → [Git管理]を選択し、Git一覧画面を表示する
  3. 画面右上の新規登録ボタンを押下する
  4. 画面に下記の情報を入力し、Git情報を登録する。

Git新規登録画面(スクショ3-3)

項目 要否 説明
名前 必須 識別名。管理者が各登録情報を識別しやすいような、任意の名前を入力する。
リポジトリURL 必須 リポジトリにgitコマンドでアクセスする際の基底URLを入力する。
(例)https://git.kamonohashi.ai:8080
Git種別 必須 GitLabやGitHubなど、Gitサービスのプロバイダを選択する。
API URL 必須 リポジトリにREST APIでアクセスする際の基底URLを入力する。
(例)https://git.kamonohashi.ai:8080

なおGitHubについては、初期構築時に編集不可として自動登録されます。

Registry情報の新規作成

テナントが利用するDocker Registryの情報を登録します。

KAMONOHASHIで利用可能なDocker Registryの条件は以下の通りです。

  • DockerHub API、あるいは GitLab APIと互換性があるREST APIインターフェースがある
  • KAMONOHASHIから信頼されたHTTPS通信が可能
    • ProxyないしNoProxyが適切に設定されている
    • 信頼された証明書が設定されている

Registry情報の新規登録は、以下のフローで実行できます。

  1. 管理権限を持つユーザでログイン
  2. [システム管理] → [レジストリ管理]を選択し、レジストリ一覧画面を表示する
  3. 画面右上の新規登録ボタンを押下する
  4. 画面に下記の情報を入力し、Docker Registry情報を登録する ※DockerHub API互換の場合と、GitLab API互換の場合で、入力項目が異なります。

Docker Registry新規登録画面(スクショ3-4)

DockerHub APIの場合
項目 要否 説明
レジストリ名 必須 識別名。管理者が各登録情報を識別しやすいような名前を入力する。英数字およびハイフンのみが使用可能。
種別 必須 DockerHubを選択する。
ホスト名 必須 イメージ名に使用されるレジストリのFQDNまたはIPアドレスを入力する。
ポート番号 必須 イメージ名に使用されるレジストリのポート番号を入力する。
API URL 必須 レジストリにREST APIでアクセスする際の基底URLを入力する。
(例)https://registry-server:5555
URL 必須 レジストリにdockerコマンドでアクセスする際の基底URLを入力する。
(例)https://registry-server:5555
GitLab APIの場合
項目 要否 説明
レジストリ名 必須 識別名。管理者が各登録情報を識別しやすいような名前を入力する。英数字およびハイフンのみが使用可能。
種別 必須 GitLabを選択する。
ホスト名 必須 イメージ名に使用されるレジストリのFQDNまたはIPアドレスを入力する。
ポート番号 必須 イメージ名に使用されるレジストリのポート番号を入力する。
API URL 必須 レジストリにREST APIでアクセスする際の基底URLを入力する。基本的にはGitLabのWeb URLと等しい。
(例)https://registry-server/gitlab
URL 必須 レジストリにdockerコマンドでアクセスする際の基底URLを入力する。
基本的にポート番号はWeb URLではなくレジストリのポート番号となる。
(例)https://registry-server:5555/gitlab
プロジェクト名 任意 プロジェクトパスを、”オーナー名(ユーザ名またはグループ名)/プロジェクト名”の形式で入力する。
(例)kamonohashi/sample

なおDocker HubおよびNGCについては、初期構築時に編集不可として自動登録されます。

テナントの新規作成

テナントを作成します。

テナントの新規作成は、以下のフローで実行できます。

  1. 管理権限を持つユーザでログイン
  2. [システム管理] → [テナント管理]を選択し、テナント一覧画面を表示する
  3. 画面右上の新規作成ボタンを押下する
  4. 画面に下記の情報を入力し、新規テナントを作成する。

テナント作成画面(スクショ3-2)

項目 要否 説明
テナント名 必須 テナントを表す識別子を入力する。英数字およびハイフンのみが使用可能。また更新時は変更不可。
(例)kamonohashi
表示名 必須 画面等への表示名称を入力する。
(例)カモノハシ
ストレージ情報 必須 データファイルを格納するストレージを選択する。
選択肢は事前にストレージ情報の新規作成で設定が必要。
Git情報 必須 学習実行時のユーザスクリプトを格納するGitを一つ以上選択する。また、その中で既定で選択されるGitを一つ選択する。
選択肢は事前にGit情報の新規作成で設定が必要。
Docker Registry情報 必須 学習実行時のDockerイメージを格納するレジストリを一つ以上選択する。また、その中で既定で選択されるレジストリを一つ選択する。
選択肢は事前にRegistry情報の新規作成で設定が必要。

テナント情報の更新

テナント情報、ストレージ情報、Git情報、Dockerレジストリ情報は、各管理画面からそれぞれ更新できます。 一覧に表示されている各項目をクリックして更新画面を表示し、必要な情報を入力します。

ユーザ

ユーザはKAMONOHASHIの利用者を表し、テナントに関連付けられます。ユーザは複数のテナントに所属できます。 また、ユーザは使用する認証方式の種類によってローカルユーザ、LDAPユーザの2種類に分けられます。

ユーザの追加とテナントへの関連付け

KAMONOHASHIではローカルユーザか、LDAPユーザかによって、ユーザの追加フローが異なります。 ユーザの種類によらず、ユーザ名はシステム内で一意である必要があります。

ローカルユーザの追加

ローカルユーザの場合、KAMONOHASHI内部で認証情報を管理されます。

ユーザの新規作成は、以下のフローで実行できます。

  1. 管理権限を持つユーザでログイン
  2. [システム管理] → [ユーザ管理]を選択し、ユーザ一覧画面を表示する
  3. 画面右上の新規作成ボタンを押下する
  4. 画面に下記の情報を入力し、ローカルユーザを新規に追加する。 ※ローカルユーザの場合、初期テナントの関連付けを作成時にまとめて行う。

ユーザ新規作成画面(スクショ3-5)

項目 要否 説明
ユーザアカウント 必須 ユーザ名。システム内で一意である必要がある。英数字およびハイフンのみが使用可能。
パスワード 必須 ユーザ認証に用いるパスワード。
パスワード(再入力) 必須 パスワードの確認用。上記パスワードと一致している必要がある。
システムロール 任意 追加ユーザに付与するシステムロールを選択する。
テナント 必須 ユーザを関連付けるテナントを選択する。複数可。
テナントロール 任意 上記テナント項目で選択した分のテナントについて、ユーザが所有するテナントロールをそれぞれ選択する。複数可。

LDAPユーザの追加

LDAPユーザの場合、認証情報の管理にKAMONOHASHI外のLDAP認証サービスを利用します。 パスワード変更など、LDAPユーザの管理はKAMONOHASHI上では行えません。

LDAPユーザは、管理者ではなく、LDAPユーザ自身がKAMONOHASHIにログインすることで追加できます。 ユーザがLDAPサービスに登録されているユーザ名とパスワードでKAMONOHASHIにログインすると、KAMONOHASHI内にユーザ情報が登録され、Sandboxテナントに自動で関連付けられます。

LDAPユーザに対して、システムロールの付与や、Sandbox以外のテナントへの関連付けを行う場合、下記の処理を実行します。

  1. ユーザがLDAPサービスに登録されているユーザ名とパスワードでKAMONOHASHIにログインする
    • KAMONOHASHI内にユーザ情報が登録される
    • 既定ではSandboxテナントに自動で関連付けられる
  2. 管理権限を持つユーザが、[システム管理] → [ユーザ管理]を選択し、ユーザ一覧画面を表示する
  3. 追加されているLDAPユーザ名を一覧から探し、列を選択する
  4. 表示されたユーザ編集画面で、ローカルユーザの場合と同様に、システムロールと関連付けるテナントおよびそのテナントロールをそれぞれ選択する

ロール

ユーザにロールを付与することで、操作可能な機能を制御できます。 一人のユーザには複数のロールを関連付けられます。

ロールは大きく以下の2種類に大別されます。

  • システムロール
    • テナントを横断する、システム全体に関連した情報を取り扱うためのロール
    • 既定では全てのシステム管理権限がある「Adminロール」が使用できる
  • テナントロール
    • 特定のテナント内に限定された情報を扱うためのロール
    • 所属するテナントごとに、ユーザに付与するテナントロールを指定する
      • 例えば、同一のユーザに対し、AテナントにはManagerロールを付与し、BテナントにはUserロールとResearcherロールを付与する、など
    • 既定では以下の3種類のテナントロールが使用できる
ロール 説明
User データの追加・削除、およびデータセットの作成・変更を行う権限を持つ。
Researcher 学習の実行、結果の評価を行う権限を持つ。
Manager そのテナント内で使用する計算リソースや権限の管理を行う権限を持つ。

カスタムロールの追加

既定されているロールに加え、独自のロールを追加することができる。追加されたロールは、全テナントで利用可能になる。

ロールの新規作成画面は、以下のフローで表示できます。

  1. 管理権限を持つユーザでログイン
  2. [システム管理] → [ロール管理]を選択し、ロール管理画面を表示する
  3. 画面右上の新規登録ボタンを押下する
  4. 画面に下記の情報を入力し、カスタムロールを新規に追加する。

ロール新規登録画面(スクショ3-9)

項目 要否 説明
ロール名 必須 ロールの識別名。システム内で一意である必要がある。英数字およびハイフンのみが使用可能。
表示名 必須 ユーザに表示される名前。任意の文字を使用可能。
種別 必須 テナントロールの場合は”テナント”、システムロールの場合は”システム”を選択する。
ソート順 必須 並び順を入力する。小さいほど前に表示される。一意である必要はないが、同じ値の場合のソート順は変動する可能性がある。

追加したカスタムロールの権限設定は、メニューアクセス管理で行います。

ノード

ノードとは、KAMONOHASHIに管理される物理的あるいは仮想的な計算用コンピュータを指します。 KAMONOHASHI自体を構成する管理サーバ群は含みません。

ノードの追加

KAMONOHASHIの管理下に新しくノードを追加します。 Kubernetes masterノード上での作業および、KAMONOHASHIのWeb画面上での作業が必要となります。

Kubernetes masterノード上での作業

  1. GPUサーバの準備(Ubuntu Server 16.04およびGPUドライバのインストール)とKAMONOHASHIと同一ネットワークへの接続
  2. Kubernetes masterノードにssh
  3. /var/lib/kamonohashi/deploy-tools/{バージョン番号}/infra/conf/inventory を編集し、gpu-nodeを追記(下記例を参照)
  4. /var/lib/kamonohashi/deploy-tools/{バージョン番号}/infra/deploy-kqi-infra.sh scale を実行
  5. SSHパスワード、SUDOパスワードを入力し、処理が完了するまで待機
inventoryファイルへのgpu-node追記例

既に利用しているGPUのホスト名がgpu1、追加するGPUのホスト名がgpu2の場合、以下のようにgpu2を追記します。

[gpu-node]
gpu1
gpu2

KAMONOHASHIのWeb画面上での作業

  1. ブラウザからkamonohashiにアクセス
  2. 管理権限を持つユーザでログイン
  3. [システム管理] → [ノード管理]を選択し、ノード一覧画面を表示する
  4. 画面右上の新規作成ボタンを押下する
  5. 画面に下記の情報を入力し、ノードを新規に追加する

ノード新規作成画面(スクショ3-6)

項目 要否 説明
名前 必須 ノード名。システム内で一意である必要がある。英数字およびハイフンのみが使用可能。
メモ 任意 管理用のメモを自由に入力できる。
パーティション 任意 ノードにパーティションを設定できる。パーティションについての詳細は後述。
アクセスレベル 必須 ノードへのアクセスレベルを設定できる。アクセスレベルについての詳細は後述。Privateを選択した場合、アクセスを許可するテナントを選択するUIが表示される。指定しなかった場合はDisabledが設定される。
TensorBoard実行可否 必須 ノード上でTensorBoardコンテナの実行を許可するか指定できる。
Notebook実行可否 必須 ノード上でNotebookコンテナの実行を許可するか指定できる。

パーティション

パーティションを設定することで、学習を実行するノードを指定することができます。 学習の実行時にパーティションを指定すると、そのパーティションが付与されたノードでのみ、学習が実行されます。パーティションとして指定できる文字は、英数字及びハイフンのみです。

パーティション管理(図8-1)

アクセスレベル

アクセスレベルは、テナント単位で利用可能なノードを設定するための仕組みです。 アクセスレベルには以下の3種類があります。

  • Disabled
    • どのテナントも、そのノードを利用することができない
    • ノードのメンテナンスを行う際などに指定する
  • Private
    • 指定されたテナント(複数可)のみが、そのノードを利用することができる
  • Public
    • すべてのテナントがそのノードを利用することができる。

クォータ

クォータはテナントがクラスタで利用できる最大のCPUコア数、メモリ容量、GPU数の上限を表します。 クォータを利用することで、特定のテナントがクラスタのリソースを大量に利用することを抑制できます。

クォータ管理

クォータを設定するには、[システム管理] → [クォータ管理]を選択し、クォータ設定の一覧画面を表示します。

各テナントに対して、次の情報を入力します。 クォータの各項目に0を設定した場合、無制限に利用できます。

項目 要否 説明
CPU 任意 テナントが利用できる最大CPUの量。CPUのコア数で入力する。
Memory 任意 テナントが利用できる最大メモリの量。ギガバイト(Gi)単位で入力する。
GPU 任意 テナントが利用できる最大GPUの数。GPUの枚数で入力する。

リソース

リソースとは、クラスタを構成する各ノードの計算リソース(CPU、メモリ、GPU)を表します。

リソース管理

クラスタの各ノード上に現在配備されているコンテナと、それらに割り当てられたリソースを一覧で確認する事ができます。これによって、ノード単位の負荷状況や、リソースを大量消費しているテナントやユーザを把握することができるので、必要に応じて、不要なコンテナを削除し、リソースの解放処理を行えます。

現在のリソース割当状況を確認するには、管理権限を持つユーザでログインした後、[システム管理] → [リソース管理] を選択し、リソース管理の一覧画面を表示し行います。

この画面には、以下三つの表示形式があります。

  • ノード別
    • ノードごとに、現在使用しているリソースの合計と、稼働しているコンテナの一覧が確認できる
    • ノード管理でまだ追加されていないノードがクラスタ上で確認された場合、ノード名の前に”Unknown:”が接頭語として表示される
    • まだ配備先のノードが決定しておらず、待機状態のコンテナがある場合、”Unassined”というグループにまとめられる
  • テナント別
    • テナントごとに、現在使用しているリソースの合計と、稼働しているコンテナの一覧が確認できる
    • クォータが設定されておらず、無制限にリソースが使用できる場合、”Infinity”が表示される
  • コンテナ一覧
    • 全コンテナの一覧と、その利用リソースが表示される

メニュー

メニューとは、”データ管理”や”テナント管理”など、KAMONOHASHIが提供する各機能セットを表します。

メニューには、以下の4つの種別があります。

  • Public
    • 未ログインユーザにも公開されるメニュー(e.g. ログイン)
  • Internal
    • ログインユーザに公開されるメニュー(e.g. ダッシュボード)
    • ロールを一つも持っていないユーザにも利用可能
  • Tenant
    • 特定のテナントロールを持つユーザのみに公開されるメニュー(e.g. データ管理)
    • 接続中のテナントに限定された情報を取り扱う
  • System
    • 特定のシステムロールを持つユーザのみに公開されるメニュー(e.g. テナント管理)
    • テナントを横断する、システム全体に関連した情報を取り扱う

メニューアクセス管理

メニューアクセス管理画面では、全メニューを一覧で確認できます。 加えて、種別がTenantあるいはSystemであるメニューに対しては、公開先のロールを編集することができます。

メニューアクセス管理画面を表示するには、管理権限を持つユーザでログインした後、[システム管理] → [メニューアクセス管理]を選択します。

メニューアクセス管理(スクショ308)

メニューの種別がTenantあるいはSystemである場合、以下の手順でそのメニューを利用可能なロールを改廃できます。

  1. ロールを改廃したいメニューの右側に表示されているボタン群を確認する。青く塗られているロールがアクセス権があるロール、白く塗られているロールがアクセス権がないロールである。
  2. アクセス権を付与したいロールをクリックし、背景を白から青に変える。
  3. アクセス権を削除したいロールをクリックし、背景を青から白に変える。
  4. 全ての変更が完了したら、右下の「更新」ボタンを選択する