Datarobotは、機械学習モデルを本番環境に展開するためのツールを提供します。DatarobotをNew Relicと統合することで、システム全体のマシンラーニングのパフォーマンスを計測、分析、トラブルシューティング、最適化することができるようになります。性能を厳密に観察することで、モデルの入力や出力、そして両者の関係性の変化に素早く対応できるようになります。
Datarobot InsightsからモデルのパフォーマンスメトリクスをNew Relicに送信することで、アルゴリズムのリアルタイムモニタリングが可能になります。メトリクスデータを使いやすいチャートで表示し、アルゴリズムの状態を一目で把握することで、トラブルシューティングを迅速かつ効率的に行うことができます。
DatarobotとNew Relicの統合
まず、DatarobotはKafkaトピックを使用して、機械学習アルゴリズムのパフォーマンスメトリクスからInsightsをストリーミングします。次に、New Relic コネクタ (別のアルゴリズム) が、Kafka トピックを特定の New Relic アカウント用のメトリクス データ ペイロードに変換します。

DatarobotはKafkaとEvent Flowsを使ってNew Relicにデータを送ります。
Datarobot の Event Flows では、Kafka のトピックに新しいメッセージが設定されると、設定した New Relic のコネクターアルゴリズムが呼び出されます。コネクターはメトリクスを変換して、New Relic アカウントに送信します。
DatarobotのデータをNew Relicに接続します。
インシデントインテリジェンスをDatarobot機械学習モデルと統合することで、機械学習モデルのパフォーマンスを監視できます。
New RelicでDatarobotのイベントフローのモニタリングを始めましょう。
Get your API key: one.newrelic.com > All capabilities > (account menu) > API keysに移動し、意味のある名前でアカウントのユーザー キーを作成します。 後で使用するためにこの名前をメモしておきます。 APIキーの詳細については、ドキュメントを参照してください。
Create a dashboard: one.newrelic.com > All capabilities > Dashboardsに移動し、 Import dashboardsボタンをクリックします。 JSON コードをコピーしてPaste your JSON field codeに貼り付けます。
YOUR_ACCOUNT_ID値をアカウント ID で更新します。
{  "name": "Datarobot Dashboard for Default Metrics",  "description": null,  "permissions": "PUBLIC_READ_WRITE",  "pages": [    {      "name": "Datarobot Dashboard for Default Metrics",      "description": null,      "widgets": [        {          "visualization": {            "id": "viz.line"          },          "layout": {            "column": 1,            "row": 1,            "height": 3,            "width": 4          },          "title": "Runtime Duration by Algorithm",          "rawConfiguration": {            "legend": {              "enabled": true            },            "nrqlQueries": [              {                "accountId": YOUR_ACCOUNT_ID,                "query": "SELECT average(algorithmia.duration_milliseconds) FROM Metric TIMESERIES FACET `algorithm_name` LIMIT 10 SINCE 1800 seconds ago"              }            ],            "yAxisLeft": {              "zero": true            }          },          "linkedEntityGuids": null        },        {          "visualization": {            "id": "viz.line"          },          "layout": {            "column": 5,            "row": 1,            "height": 3,            "width": 4          },          "title": "Throughput by Algorithm",          "rawConfiguration": {            "legend": {              "enabled": true            },            "nrqlQueries": [              {                "accountId": YOUR_ACCOUNT_ID,                "query": "SELECT count(algorithmia.duration_milliseconds) FROM Metric TIMESERIES FACET `algorithm_name` LIMIT 10 SINCE 1800 seconds ago"              }            ],            "yAxisLeft": {              "zero": true            }          },          "linkedEntityGuids": null        }      ]    }  ]}Configure Datarobot Insights for New Relic: New Relic 用に Datarobot を構成する方法については、 Datarobot のドキュメントを使用してください。
Create the New Relic connector algorithm: Python 3.8 を使用してコネクタ アルゴリズムを作成します。 アルゴリズムを生成するコードを作成するのが初めての場合は、 Datarobot のスタート ガイドを参照してください。
import Datarobotimport jsonfrom datetime import datetimefrom newrelic_telemetry_sdk import GaugeMetric, MetricClient
client = Datarobot.client()metric_client = MetricClient(os.environ["newrelic_api_key"])
def convert_str_timestamp_to_epoch(str_time):    obj_time = datetime.strptime(str_time, "%Y-%m-%dT%H:%M:%S.%f")    return int(obj_time.timestamp() * 1000)
def get_operational_metrics(payload):    ALGORITHM_TAGS = {        "algorithm_version",        "request_id",        "time",        "algorithm_name",        "session_id",        "algorithm_owner",    }    inference_metrics = {key: payload[key] for key in payload.keys() ^ ALGORITHM_TAGS}    return inference_metrics
def send_to_newrelic(inference_metrics, insights_payload):    newrelic_metrics = []    for key, value in inference_metrics.items():        name = "algorithmia." + key        epoch_time = convert_str_timestamp_to_epoch(insights_payload["time"])        tags = {            "algorithm_name": insights_payload["algorithm_name"],            "algorithm_version": insights_payload["algorithm_version"],            "algorithm_owner": insights_payload["algorithm_owner"],            "request_id": insights_payload["request_id"],            "session_id": insights_payload["session_id"],        }
newrelic_metrics.append(    GaugeMetric(name=name, value=value, tags=tags, end_time_ms=epoch_time))
response = metric_client.send_batch(newrelic_metrics)response.raise_for_status()
def apply(input):    insights_payload = input    inference_metrics = get_operational_metrics(insights_payload)    send_to_newrelic(inference_metrics, insights_payload)    return Noneこれらの依存関係を含める。
algorithmia>=1.0.0,<2.0newrelic_telemetry_sdk==0.4.2アルゴリズムの構築が完了したら、このサンプルペイロードでテストを行い、正常に動作することを確認してください。出力は次のようになります。
{  "risk_score": 0.2,  "duration_milliseconds": 8,  "algorithm_version": "1.0.6",  "session_id": "rses-f28bb94a-5556-4aeb-a6d2-89493626bf4f",  "time": "2021-02-20T00:21:54.867231",  "algorithm_name": "credit_card_approval",  "request_id": "req-9f5345b4-a1cd-431c-a43a-bd2a06f4a6f4",  "algorithm_owner": "asli"}Configure with your API key: New Relic APIキーをDatarobot シークレット ストアに追加します。
Set up Datarobot Event Flows with New Relic: イベントベースの機械学習フローを New Relic に送信するためのコネクタ アルゴリズムの設定については、 Datarobot のドキュメントを参照してください。
このドキュメントはインストールの役に立ちましたか?
機械学習モデルのモニタリング
以下の手順で、マシンラーニングのデータをNew Relicで観察することができます。
Get your API key: one.newrelic.com > All capabilities > (user menu) > API keysに移動します。 意味のある名前でアカウントのユーザー キーを作成します。 後で使用するためにこの名前をメモしておきます。 APIキーの詳細については、ドキュメントを参照してください。
Create a dashboard: one.newrelic.com > All capabilities > Dashboardsに移動し、 Import dashboardsボタンをクリックします。 JSON コードをコピーしてPaste your JSON field codeに貼り付けます。
YOUR_ACCOUNT_ID値をアカウント ID で更新します。
{  "name": "Datarobot Dashboard for Default Metrics",  "description": null,  "permissions": "PUBLIC_READ_WRITE",  "pages": [    {      "name": "Datarobot Dashboard for Default Metrics",      "description": null,      "widgets": [        {          "visualization": {            "id": "viz.line"          },          "layout": {            "column": 1,            "row": 1,            "height": 3,            "width": 4          },          "title": "Runtime Duration by Algorithm",          "rawConfiguration": {            "legend": {              "enabled": true            },            "nrqlQueries": [              {                "accountId": YOUR_ACCOUNT_ID,                "query": "SELECT average(algorithmia.duration_milliseconds) FROM Metric TIMESERIES FACET `algorithm_name` LIMIT 10 SINCE 1800 seconds ago"              }            ],            "yAxisLeft": {              "zero": true            }          },          "linkedEntityGuids": null        },        {          "visualization": {            "id": "viz.line"          },          "layout": {            "column": 5,            "row": 1,            "height": 3,            "width": 4          },          "title": "Throughput by Algorithm",          "rawConfiguration": {            "legend": {              "enabled": true            },            "nrqlQueries": [              {                "accountId": YOUR_ACCOUNT_ID,                "query": "SELECT count(algorithmia.duration_milliseconds) FROM Metric TIMESERIES FACET `algorithm_name` LIMIT 10 SINCE 1800 seconds ago"              }            ],            "yAxisLeft": {              "zero": true            }          },          "linkedEntityGuids": null        }      ]    }  ]}Set up alerts notifications: ダッシュボードをいくつか作成すると、データに関するアラートを受け取ることができます。 チャートからNRQL 条件を作成するには、チャートメニューをクリックしますをクリックし、 Create alert conditionをクリックします。 条件に名前を付けてカスタマイズしたら、既存のポリシーに追加したり、新しいポリシーを作成したりできます。
Get notified: アラート条件を作成したら、通知の受け取り方法を選択できます。 通知チャネルの設定方法については、ドキュメントを参照してください。
Correlate your incidents: 通知に加えて、インシデント インテリジェンスを使用してインシデントを相関させることができます。 決定を使用してインシデントを関連付ける方法については、ドキュメントを参照してください。