2020年9月 Watson Machine Learning仕様変更まとめ

# はじめに
2020年9月にWatson Machine Learningの仕様が大幅に変更になりました。
変更点に関するメモを以下にまとめます。


# Watson MLのバージョン
Watson Machine Learningのインスタンスに新たにv2ができました。

* Lite Planのインスタンスは9/1の時点で自動的にすべてv2に移行されています。
* Standardに関しては、古いインスタンスはv1のままです。新機能を使いたい場合は、別記事[Watson Machine Learning v1 -> v2 マイグレーション方法](https://qiita.com/makaishi2/items/17a8183a5216e9c7f400)で説明する手順でインスタンスの移行を行います。

* バージョンの見分け方は、以下のように、ibmcloud コマンドで行います。**サービス・プラン名**の行に注目して下さい。

Lite Planの場合

```
$ ibmcloud resource service-instance pm-20-rl
AKAISHI@jp.ibm.com としてアカウント MASANORI AKAISHI's Account の リソース・グループ default のサービス・インスタンス pm-20-rl を取得しています...
OK
                           
名前:                   pm-20-rl   
ID:                     crn:v1:bluemix:public:pm-20:us-south:a/0960d86217f3b669ae4408f3b4deaa08:27496b69-213f-4f3a-a302-e661557d83ec::   
GUID:                   27496b69-213f-4f3a-a302-e661557d83ec   
場所:                   us-south   
サービス名:             pm-20   
サービス・プラン名:     lite   
リソース・グループ名:   default   
状態:                   active   
タイプ:                 service_instance   
サブタイプ:                
作成日時:               2018-07-11T03:21:20Z   
作成元:                    
更新日時:               2018-07-11T03:21:20Z   
```

Standard v1の場合

```
$ ibmcloud resource service-instance pm-20-iw
AKAISHI@jp.ibm.com としてアカウント MASANORI AKAISHI's Account の リソース・グループ default のサービス・インスタンス pm-20-iw を取得しています...
OK
                           
名前:                   pm-20-iw   
ID:                     crn:v1:bluemix:public:pm-20:us-south:a/0960d86217f3b669ae4408f3b4deaa08:e1d97cdb-21fb-4c30-a4ea-80c78ba5bed9::   
GUID:                   e1d97cdb-21fb-4c30-a4ea-80c78ba5bed9   
場所:                   us-south   
サービス名:             pm-20   
サービス・プラン名:     standard   
リソース・グループ名:   default   
状態:                   active   
タイプ:                 service_instance   
サブタイプ:                
作成日時:               2020-08-24T07:05:00Z   
作成元:                 akaishi@jp.ibm.com   
更新日時:               2020-08-24T07:05:00Z   
最後の操作:                                
                        状況         create succeeded      
                        メッセージ   Completed create instance operation      
                           
```

standard v2の場合

```
$ ibmcloud resource service-instance pm-20-lf
AKAISHI@jp.ibm.com としてアカウント MASANORI AKAISHI's Account の リソース・グループ default のサービス・インスタンス pm-20-lf を取得しています...
OK
                           
名前:                   pm-20-lf   
ID:                     crn:v1:bluemix:public:pm-20:us-south:a/0960d86217f3b669ae4408f3b4deaa08:fef17f33-d57a-4823-9ffb-bb74525b4cc2::   
GUID:                   fef17f33-d57a-4823-9ffb-bb74525b4cc2   
場所:                   us-south   
サービス名:             pm-20   
サービス・プラン名:     v2-standard   
リソース・グループ名:   default   
状態:                   active   
タイプ:                 service_instance   
サブタイプ:                
作成日時:               2020-09-03T23:26:06Z   
作成元:                 akaishi@jp.ibm.com   
更新日時:               2020-09-03T23:26:06Z   
最後の操作:                                
                        状況         create succeeded      
                        メッセージ   Completed create instance operation      
                           
```

# 既存資産のマイグレーション
インスタンス本体のバージョンと別に、v1上で作った既存資産に関しては、マイグレーションを行う必要があります。
具体的な手順に関しては、別記事[Watson Machine Learning v1 -> v2 マイグレーション方法](https://qiita.com/makaishi2/items/17a8183a5216e9c7f400)を参照して下さい。


# バージョンv1とv2の違い

## Lite PlanのCUH  
Lite PlanのCUHは、従来の50CUHが20CUHになりました。
上で説明したようにLite Planは強制的に移行なので、現在すべてのLite Planインスタンスは20CUHになっています。
この制約は結構厳しくて、簡単なサンプルデータでAutoAIを一回呼び出すだけで(AutoAIでは、課金はWatson StudioでなくMachine Learningに対してかかります)1時間、つまり20CUHを使いつくしてしまいます。
それ以降、Watson Machine Learning系の作業が一切できなくなるので、実質的にAutoAIを試したい場合、Standard Plan利用は必須になったと考えられます。

## Webサービスのバージョン
Webサービスのバージョンはv4固定となります。

## 資格情報の作成方法
v1では、IBM Cloudの管理画面、資格情報メニューから新規資格情報のボタンクリックで、資格情報を作れましたが、v2ではその方法では作れません。
代替手段は[apikey 取得用ページ](https://cloud.ibm.com/iam/apikeys)になります。  

エラーになる時の画面例を以下に示します(混乱の元なので、この画面自体近々削除される模様)。
v1インスタンスであれば、従来通り、この手順で新規資格情報を作れます。

![スクリーンショット 2020-09-10 14.28.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/d5999f94-87e2-ea2b-a0f5-9febffcd87ca.png)

![スクリーンショット 2020-09-10 14.28.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/b76e6e94-df29-bc86-b98a-7766a492ad4b.png)

![スクリーンショット 2020-09-10 14.28.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/27bd8326-51e9-1da3-cce5-8ab80d69d3a2.png)

## デプロイメントスペース
v1インスタンスの場合、モデルをWebサービスにするまでの流れは

* モデルの登録
* 登録したモデルに対してデプロイ

の2ステップでした。また、デプロイ先の場所はMachine Learingが持っている領域を暗示的に使っていました。

これに対してv2インスタンスは、

* モデルの保存
* 保存したモデルのプロモート
* プロモートしたモデルのデプロイ

の3ステップになります。具体的なイメージは下の図を参照して下さい。

![deployment.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/85c25433-3fda-6b93-1710-8dfb346d0411.png)


更にプロモートとデプロイ先の領域として「デプロイメントスペース」と呼ばれるストレージ領域(実体はCloud Object Storage)が使われるようになりました。
これはWatson Studioでは開発成果物(資産)はCloud Object Staorageと紐付けされた「プロジェクト」に保存され、成果物の実体はCloud Object Storage上にあったのと同等の話と考えて下さい。
このため、v2インスタンス上でモデルを登録したり、Webサービスデプロイをするためには

1. デプロイメントスペースの新規作成 (実体はCloud Object Storage上)
2. Watson ML v2インスタンスとデプロイメントスペースの紐付け

が必要となります。

## REST APIの呼び出し方

PythonでML v2のREST APIを呼び出す場合のコーディングサンプルはちょっと長くなるので別記事に外だししました。

[Watson Machine Learning v2のREST APIをPythonで呼び出す](https://qiita.com/makaishi2/items/c6cd88c29f4c705fce8b)


## トークンの取得方法  
トークンの取得方法も変わりました。9/10時点ではオンラインマニュアルにcrulコマンドによる方法しか記載されていません。  
https://cloud.ibm.com/docs/account?topic=account-iamtoken_from_apikey  

下記にPythonで動作確認したサンプルコードを掲載しますので、参考とされて下さい。

```py3
import urllib3, requests, json

# トークン取得
apikey = "xxxx"
url = "https://iam.cloud.ibm.com/identity/token"

headers = { "Content-Type" : "application/x-www-form-urlencoded",
          "Accept" : "application/json" }

data    = "apikey=" + apikey + "&grant_type=urn:ibm:params:oauth:grant-type:apikey"

response  = requests.post( url, headers=headers, data=data)
iam_token = response.json()["access_token"]
print('iam_token = ', iam_token)
```