Google Colab Enterprise を操作してみた。基本操作と料金プランをわかりやすく解説。

今回の内容はGoogle Colab Enterpriseの基本操作と機械学習のデモブログです。
2024.06.17

Google Colab Enterpriseとは

無料のGoogle Colabを使用した経験がある方は多いかもしれません。
企業のユースケースに合わせて、セキュリティスケーラビリティ、統合性を重視したのがColab Enterpriseです。

Google Cloudサービスに統合されているプラットフォームなので、通常のGoogle Colabと比べると多様な機能が存在します。

また、操作感に関してはWebで使用できる通常のGoogle Colabと変わらないため、慣れている方であればすぐに使い始められます。

冒頭でも触れた通り、リージョン、VPC、組織ポリシー、IAMポリシーによるきめ細かいアクセス制御を適応させることが可能なため、セキュリティ機能などの追加の学習コストを必要とせず、Google Cloud内で実行することができます。

連携先としては、Cloud StorageBigQueryVertex AIなど、他のGoogle Cloudサービスとネイティブに連携し、データの取り込み、処理、モデルのデプロイまでをシームレスに実行できます。

まとめると、Google Colabは企業が機械学習の力を最大限に活用するための最適なプラットフォームとなります。

料金

Colab Enterpriseの料金は、仮想マシンで実行されるため、選択するマシンスペックリージョンによって変わってきます。

CPU、メモリ、アクセラレータ、ディスク単位で課金され、以下はCPUを東京リージョンで使用した際の料金になります。

メモリ、アクセラレータ、ディスクについても先ほどのColab Enterpriseの料金から算出できるので、試してみてください。

触ってみた

Google Cloud コンソール

Colab EnterpriseはGoogle Cloud サービスの一部です。
よって、Google Cloudに登録をして、コンソールにログインできる状態でなければ、使用することができません。

Google Cloudの登録方法は以下を参照してください。

基本操作

  • Google Cloud コンソールの検索窓に[Colab Enterprise]と入力し、Vertex AIサービスの画面へ移動します。
  • Colab Enterpriseの操作画面になったら、ノートブックを実行する[リージョン]を確認して、[ノートブックを作成する]を押下します。

  • ライブラリのインポートを行うために、コードを実行していきましょう。
  • [▶️]を押下すると、Colab Enterpriseを実行する[VPCネットワーク]を選択する画面が開きます。

  • 選択したVPCはプロジェクト作成時に自動的に作成されるデフォルトVPCネットワークです。(以下はVPCの画面)

(Colab Enterpriseを実行するVPCサブネットを設定したので、ここから実際にプロンプトに記述したコードを実行することができます。)

  • ライブラリのインポートも完了したので、コードを実行してみましょう。
  • [titanic]の生存データをインスタンス化し、dfという変数に格納して、データフレームを表示させてみます。

ここまでが基本の操作です。
Cloud Storage既存のGoogle Colabからコードをインポートすることもできるので、Colab Enterpriseにコードを移行したい時には活用してください。

機械学習モデルを構築してみる

せっかくなので、[survive]カラムの値を予測するというモデルも作成してみます。
コードの詳細は解説しませんが、ライブラリの大まかな使い方流れについては参考になるかもしれません。

データセットを分割します。

df = sns.load_dataset('titanic')

x = df.iloc[:, 1:]
y = df.iloc[:, :1]

X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)

X_train = X_train.drop(columns=['class','who','adult_male','deck','embark_town','alive'])
X_test = X_test.drop(columns=['class','who','adult_male','deck','embark_town','alive'])

文字列カラムの値をラベルエンコードします。

le = LabelEncoder()
features = ['sex', 'embarked', 'alone']
for i in features:
    X_train[i] = le.fit_transform(X_train[i])
    X_test[i] = le.transform(X_test[i])

random_age = np.random.randint(X_train['age'].min(), X_train['age'].max() + 1, X_train['age'].isnull().sum())
X_train.loc[X_train['age'].isnull(), 'age'] = random_age

MinMaxScalerを使用して、数値の値のスケールを統一します。

mm = MinMaxScaler()
features2 = ['age', 'fare']
for i in features2:
    X_train[i] = mm.fit_transform(X_train[i].values.reshape(-1, 1))
    X_test[i] = mm.transform(X_test[i].values.reshape(-1, 1))

X_test['age'] = X_test['age'].fillna(X_train['age'].mean())

# ravel()を使って一次元配列に変換
y_train = y_train.values.ravel()
y_test = y_test.values.ravel()

SVCを使用して、前処理したデータを学習していきます。

model_svc = SVC(kernel='rbf', C=10, gamma=0.1)
model_svc.fit(X_train, y_train)

print(f'トレーニングスコア{model_svc.score(X_train, y_train)}')
print(f'テストスコア{model_svc.score(X_test, y_test)}')

結果は少し過学習の傾向があります。(trainとtestの結果に差分が大きければ大きいほどとうまくいっていない)

GrindSearchを使用して、ベストな値を算出します。

model_gs = GridSearchCV(SVC(), {'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.001, 0.0001]}, cv=5)
model_gs.fit(X_train, y_train)

print(f'Best parameters: {model_gs.best_params_}')
print(f'Best cross-validation score: {model_gs.best_score_}')

結果が出ました。(以下の結果でハイパーパラメータを指定すれば、よりいいモデルを生み出すことができる)

※ 本来はこの値を再度SVCに設定して、GrindSearchの結果を確認しますが今回は割愛。

まとめ

無料のGoogle Colabとの違い

セキュリティーやコンプライアンス面での有用さがあると感じました。
冒頭でも書いたように、リージョンVPCを指定でき、さらにGoogle Cloud内で実行するリソースのため、組織ポリシーIAMポリシーにより、機能を細かく制限することが可能です。

さらに、さまざまなGoogle Cloudサービスとネイティブに連携できるという特徴も欠かせません。

これにより、Cloud StorageBigQueryと連携させてデータを操作することやVertex AIの各サービスと統合させて開発することも可能です。

エンタープライズという名前だけあって、企業でGoogle Colabを使用する際にはぜひ使いたいサービスだと思います。