(2020.9.8更新) WML client初期化でのversion番号を自動取得するように変更
Cloud pak for Data (以下CP4D)でのモデル開発中に、デプロイメントスペースにモデルや関数やデプロイメントを大量に作ってしまった後、それらを一旦きれいに全消ししたい時に使ってください。
あまりそんなシーンは多発しないかもしれませんが、2020年6月時点のCP4D v3.0ではモデルやデプロイメントなどのバージョン管理ができない制約があるため、複数世代のモデルを作成していくとあっという間にどんどんモデルやデプロイメントが増えていきます。
CP4Dの画面上でポチポチ1つずつ削除できるのですが、めんどくさいので一気に消すpythonコードを作りました。
分析プロジェクトで適当なNotebookを立ち上げて実行します。
url = "https://cloudpackfordata.url.com"
from watson_machine_learning_client import WatsonMachineLearningAPIClient
import requests, os
token = os.environ['USER_ACCESS_TOKEN']
version = requests.get(os.environ['RUNTIME_ENV_APSX_URL'] + "/diag").text[0:5]
wml_credentials = {
"token" : token,
"instance_id" : "openshift",
"url": url,
"version": version
}
client = WatsonMachineLearningAPIClient(wml_credentials)
# IDは client.repository.list_spaces() で調べられる
space_id = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client.set.default_space(space_id)
全消しの順番は依存関係から、デプロイメント → モデル → 関数 の順番に行います。
all_deps = client.deployments.get_details()['resources']
for dep in all_deps:
dep_name = dep['metadata']['name']
dep_id = dep['metadata']['guid']
client.deployments.delete(dep_id)
print(dep_name +"(" + dep_id + ") is deleted")
all_models = client.repository.get_model_details()['resources']
for model in all_models:
model_name = model['metadata']['name']
model_id = model['metadata']['guid']
client.repository.delete(model_id)
print(model_name +" (" + model_id + ") is deleted")
all_funcs = client.repository.get_function_details()['resources']
for func in all_funcs:
func_name = func['metadata']['name']
func_id = func['metadata']['guid']
client.repository.delete(func_id)
print(func_name +" (" + func_id + ") is deleted")
削除後、CP4D画面上できれいになったデプロイメントスペースを確認して終了です。
ちなみに、デプロイメントスペース自体を削除し再作成することでも瞬時にきれいになります。その場合はデプロイメントスペースIDが変わってしまうので、各種コードの修正をお忘れなく。
あと、本番稼働開始した後はこのNotebookは削除しておいたほうが無難です。残しておくと危険です。