0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure OpenAI開発のためのkubeflowのインストール

Posted at

Kubeflowとは

Kubeflow は、機械学習(ML)のワークフローを単純化し、Kubernetes上での運用を容易にするオープンソースのプラットフォーム。 KubeflowはGoogleによって開発され、多くのエンドツーエンドの機械学習ワークフローを網羅的に管理し、スケーリングを簡単に行うことが出来る。

AWS SageMakerやGCP Vertex AIなどの便利なマネージドの機械学習基盤があるが、OSSのマイ機械学習基盤というところ。ただし常時利用のためのリソースはそれなりに必要であるため運用負担はあるが、それなりの人数での企業向け用途としては使い勝手がよい。githubコミュニティも活況で年に1~2回程度の頻度でバージョンアップリリースされている。

MLOps

Machine Learning Operations。機械学習モデルの開発と運用を統合し、それを効果的に管理し、ビジネスの価値を最大化するための手法。

MLOpsはDevOps(開発と運用の統合)と機械学習を組み合わせたもので、機械学習のライフサイクル全体をシームレスに管理する。

MLOpsの主な目標と活動:

  1. モデルの開発: データ収集、前処理、特徴量エンジニアリング、モデリング、バリデーションなど。
  2. モデルのデプロイ: モデルをプロダクション環境に移行させ、使用可能にするプロセス。
  3. モデルのモニタリングと維持: データドリフトやモデルの性能の監視などを行う。
  4. モデルの再トレーニング: データが新しくなると、新たにトレーニングを行いモデルを再デプロイする。
  5. モデルのバージョニング: モデルの固有のバージョンを作成および管理すること。

以上の目的を達成することで、MLOpsは機械学習のモデルを迅速に製品化し、ビジネス価値を最大化するのに役立つ。
image.png

出典 MLOps: 機械学習における継続的デリバリーと自動化のパイプライン(Google Cloudアーキテクチャセンター)
https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ja#mlops_level_1_ml_pipeline_automation

LLMにおいて

将来的にはLLMの学習プロセスを管理してAPI提供基盤として使う予定。
現状はKubernetes上でJupyterやCodeServerを稼働してLLMのAPI実行を試すツールとして利用している。
AWS、GCP、AzureなどどのパブリッククラウドにおいてもマネージドKubernetesがある(EKS、GKE、AKS)ため、どの環境においてもインストールさえすれば同様に使えるのが便利。デメリットは(要員の)学習・運用コスト。

インストール

Azure OpenAIメインのコンテキストにおいて、Azure(AKS)でのインストール方法を記載する。他でもだいたい同じ。ただしGoogleはネイティブ対応(そもそもGoogle発祥)なので少し手順は異なるが、公式のマニュアルどおりに行えばほぼ迷うことなく導入できると思う。

Azure(AKS)

ディストリビューション版KubeflowのKubeflow on Azureはv1.7リリース時には整備が遅れており、manifestページに記載のバニラインストールを参考にしている。

※ただし2023/9/23に更新の最新Docではv1.7に対応したAzure版がリリース済みの模様。(Azure OpenAIの活況に伴ってリクエストが増えたためか。)
https://www.kubeflow.org/docs/started/installing-kubeflow/#packaged-distributions-of-kubeflow
https://azure.github.io/kubeflow-aks/main/docs/deployment-options/vanilla-installation/

手順

Azure Cloud Shellを起動

グループ作成

$ az group create -n [GroupName] -l [Region]

k8sの利用可能バージョンを確認

$ az aks get-versions --location  [Region]
{
  "values": [
    {
      "capabilities": {
        "supportPlan": [
          "KubernetesOfficial"
        ]
      },
      "isPreview": true,
      "patchVersions": {
        "1.28.0": {
          "upgrades": []
        }
      },
      "version": "1.28"
    },
    {
      "capabilities": {
        "supportPlan": [
          "KubernetesOfficial",
          "AKSLongTermSupport"
        ]
      },
      "isPreview": null,
      "patchVersions": {
        "1.27.1": {
          "upgrades": [
            "1.27.3"
          ]
        },
        "1.27.3": {
          "upgrades": []
        }
      },
      "version": "1.27"
    },
    {
      "capabilities": {
        "supportPlan": [
          "KubernetesOfficial"
        ]
      },
      "isPreview": null,
      "patchVersions": {
        "1.26.3": {
          "upgrades": [
            "1.27.3",
            "1.27.1",
            "1.26.6"
          ]
        },
        "1.26.6": {
          "upgrades": [
            "1.27.3",
            "1.27.1"
          ]
        }
      },
      "version": "1.26"
    },
    {
      "capabilities": {
        "supportPlan": [
          "KubernetesOfficial"
        ]
      },
      "isPreview": null,
      "patchVersions": {
        "1.25.11": {
          "upgrades": [
            "1.26.6",
            "1.26.3"
          ]
        },
        "1.25.6": {
          "upgrades": [
            "1.25.11",
            "1.26.6",
            "1.26.3"
          ]
        }
      },
      "version": "1.25"
    }
  ]
}

クラスタ作成

$ az aks create -g [GroupName] -n [ClusterName] -s Standard_D4s_v3 -c 2 -l [Region] --generate-ssh-keys --kubernetes-version 1.27.3

# クレデンシャル取得
$ az aks get-credentials -n [ClusterName] -g [GroupName]

# クラスタノード起動確認
$ kubectl get node

k8s関連ツールのインストール

# kfctl
$ wget https://github.com/kubeflow/kfctl/releases/download/v1.2.0/kfctl_v1.2.0-0-gbc038f9_linux.tar.gz
$ tar xzvf kfctl_v1.2.0-0-gbc038f9_linux.tar.gz 
$ chmod +x ./kfctl

# kustomize
$ wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv5.0.1/kustomize_v5.0.1_linux_amd64.tar.gz
$ tar xzvf kustomize_v5.0.1_linux_amd64.tar.gz 

# パス設定
$ mkdir bin
$ cp kfctl bin/kfctl
$ cp kustomize bin/kustomize 
$ export PATH=$PATH:"$HOME/bin/"
$ kfctl version
  kfctl v1.2.0-0-gbc038f9
$ kustomize version
v5.0.1

kubeflowインストール

$ mkdir kf17
$ cd kf17
$ git clone https://github.com/kubeflow/manifests.git -b v1.7.0
$ cd manifests/
$ kustomize build example > kf17.yml
$ while ! kubectl apply -f kf17.yml; do sleep 10; done

# インストール後のPod起動確認
$ kubectl get pods --all-namespaces

外部アクセスの設定
クラスタ外部からブラウザアクセスさせたいため、SVC typeをLoadBalancerに変更する。(Azureのロードバランサーが作成される。)またアクセス制限したい場合は、loadBalancerSourceRangesにて接続元IPを制限することもできる。

$ kubectl edit svc/istio-ingressgateway -n istio-system
  sessionAffinity: None
  type: NodePort   #←クラスタ外からアクセスしたいためLoadBalancerに変更

$ kubectl get svc -n istio-system
NAME                    TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                                                                      AGE
authservice             ClusterIP      10.0.129.248   <none>          8080/TCP                                                                     202d
cluster-local-gateway   ClusterIP      10.0.123.206   <none>          15020/TCP,80/TCP                                                             202d
istio-ingressgateway    LoadBalancer   10.0.252.167   [LBのExternalIP]   15021:30746/TCP,80:30629/TCP,443:31348/TCP,31400:32184/TCP,15443:32612/TCP   202d
istiod                  ClusterIP      10.0.12.183    <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        202d
knative-local-gateway   ClusterIP      10.0.191.70    <none>          80/TCP                                                                       202d

ブラウザアクセス
https://[LBのExternalIP]/
にてダッシュボードアクセスが可能となっている。
image.png

ダッシュボード(ログイン後)
image.png

NotebooksよりJupyterやVSCode、RStudioのpodを作成できる。
image.png

簡易検証はJupyter上でLangchainを使って、本格的なコーディングはVScodeで行っている。
VScodeの拡張プラグインでGenieをAzure OpenAI利用で使えるため捗る。※
Notebookとは別でTensorboardも仮想ボリューム渡しで使えるため、Embeddingの近傍可視化などの用途でも使えると思ってる。(←やってはいない)
OSS-LLMの学習パイプラインを構築し、KserveでAPIエンドポイントを作成して利用予定。

※と言っても仕事上での話で、個人ではmacのDockerクライアント上で直接Jupyter、CodeServerのコンテナ動かしてる。

その他できること

  • 機械学習エコシステムを利用できる。(パイプライン、サービング、ハイパーパラメータチューニング、特徴量ストア等)
    image.png
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?