계속·TFMA 모델 Agnostic 모델 분석 시작

14886 단어 TensorFlowtfxtech

개시하다


TensorFlow Advent Calendar 23일째 보도입니다.
이전 BigQuery Advent Calender의 기사TFMA에서 시작된 BigQueryML의 모델 분석 속편이다.
이 보도에서 일찍이 현지에서 파티를 한 번 연 적이 있다.데이터프레임으로 데이터를 다운로드한 뒤 TFMA에 넘겼다.
이 방법으로 DataFrame을 시각화하고 디버깅하기 쉬우므로 TFMA처럼 아직 개발 중인 프로그램 라이브러리를 만질 때 많은 도움이 된다.
한편, DataFrame에서 제어할 수 없는 규모의 데이터를 처리하려면 고성능의 단기 구타를 준비해야 한다.
TFMA는 내부에서 아파치 빔 처리 데이터를 사용해 모델 분석에 필요한 평가치를 계산한다.따라서 Google Cloud DataFlow를 사용하여 BigQuery에 저장된 예측 결과에 대해 데이터의 규모와 상관없이 TFMA를 원활하게 실행하는 데 도전했습니다.
사용된 데이터 세트는 bigquery-public-data.ml_datasets.credit_card_default입니다.
선택 이유는 TFTMA+AutomL TablesResult Slicing with Cloud AutoML Tables 튜토리얼에서 사용되기 때문에 같은 일을 하고 싶을 때 사용할 수 있다.

절차.


마지막 단계 3.제작된 tfma.SlicingSpec과 tfma.EvalConfig는 이 단계에서도 마찬가지로 필요합니다.또 GCS에 분석 결과의 성과물을 쓴다고 가정하기 때문에 통도 만들어야 한다.
다음 손이 순서입니다.각각의 절차에 따라 견본의 코드도 함께 기재하다
* 주의: 필요한 최소한의 기록만 작성한 것이지 복사해서 이동할 수 있는 것은 아닙니다
앞으로 colab에서 실행되는 노트북이 공개됩니다.
  • default_writers 준비
  • 데이터의 pyArrow입니다.RecordBatch로 변환
  • tfma.Extr a ctEvaluateAndWriteResults에 기록
  • 모델 분석의 성과를 읽고 가시화
  • 1. default_writer 준비


    3단계tfma.default_writers.에 사용된 모델의 분석 결과가 Writer에 기록됩니다.
    이번에는 모델에만 의존하지 않는 모델Agnostic이기 때문에 결과를 경로와 tfma.EvalConfig에 써서 매개 변수에 맡겨 만들었다.
    writers = tfma.default_writers(
      output_path,
      eval_config=eval_config
    )
    

    2. BigQuery 데이터에 대한 Arrow입니다.RecordBatch로 변환


    다음은 Apache Beam Piperline 작업입니다.
    TFMA에 데이터를 전달하기 위해 빅큐리에서 데이터를 추출해 아파치아로우로 변환하는 리코드배치 처리를 한다.
    데이터를 저장한 객체는 Dict -> pandas.DataFrame -> pyarrow.RecordBatch(ListArray)와 같이 변환됩니다.
    여기서 DataFrame으로 한 번 변환된 것은 TFX의 편리함 그룹tfx-bsl의 테이블입니다.utils를 이용하고 싶어서요.
    변환할 코드는 다음과 같습니다.
    def ConvertRecordBatch(data):
      # Beamのプログラミングパラダイムでどこでインポートするのがいいのか迷ったので
      # ここでインポート
      from tfx_bsl.arrow import table_util 
      import pandas as pd
      return table_util.CanonicalizeRecordBatch(table_util.DataFrameToRecordBatch(pd.DataFrame.from_dict(data={k:[v] for k, v in data.items()})))
      
    with beam.Pipeline() as pipeline:
      _ = (
          pipeline
           | "QueryTable" >> beam.io.gcp.bigquery.ReadFromBigQuery(
               gcs_location=output_path + "/bigquery/",
               use_standard_sql=True,
               query = query,
               )
           | "ConvertArrow" >> beam.Map(ConvertRecordBatch)
      )
    

    3. tfma.Ext r a ctEvaluate AndWriteResults에 결과 쓰기


    2 파이프의 연속.1에서 만든 tfma.default_writer, tfma.EvalConfig, 목적지에 기록된 outputpath를 매개 변수에 건네줍니다. 이 절차가 완성되었습니다.
    def ConvertRecordBatch(data):
      # Beamのプログラミングパラダイムでどこでインポートするのがいいのか迷ったので
      # ここでインポート
      from tfx_bsl.arrow import table_util 
      import pandas as pd
      return table_util.CanonicalizeRecordBatch(table_util.DataFrameToRecordBatch(pd.DataFrame.from_dict(data={k:[v] for k, v in data.items()})))
    
    output_path = "gs://bucket/path/to/result"
    
    writers = default_writers(
        output_path,
        eval_config=eval_config
    )
    
    with beam.Pipeline() as pipeline:
      _ = (
          pipeline
           | "QueryTable" >> beam.io.gcp.bigquery.ReadFromBigQuery(
               gcs_location=output_path + "/bigquery/",
               use_standard_sql=True,
               query = query,
               )
           | "ConvertArrow" >> beam.Map(ConvertRecordBatch)
           | "ExtractEvaluateAndWriteResults" >> ExtractEvaluateAndWriteResults(
               writers=writers,
               eval_config=eval_config,
               output_path=output_path)
      )
    

    4. 모델 분석의 결과를 읽고 시각화


    3까지 번거로운 준비 끝났습니다.이후에는 읽고 시각화할 뿐입니다.
    result = tfma.load_eval_result(output_path)
    tfma.view.render_slicing_metrics(result)
    

    발목을 잡다


    나는 이 방법으로 걸려 넘어진 곳을 공유하고 싶다.
  • ExtractEvaluateAndWriteResults 실행 시 레이블 또는 예측 값이 String이면 오류 발생
  • tf.train.Example 형식의 pCollection을 ExtractEvaluateAndWriteResults에 넘겨도 오류가 발생합니다.
  • 2.에 대한 조사가 좀 부족합니다.train.Example 형식의 데이터를 제출하는 데도 오류가 발생했습니다.ExtractEvaluateAndWriteResult에 각종 매개 변수를 줄 수 있습니다. 이번에는 eval입니다.config, output_path, writers만 사용합니다.
    예를 들어 봐봐Result Slicing With Cloud AutoML Tables, 이용tfma.model_agnostic_eval으로 제작EvalSharedmodelextractors.이런 상황에서 tf.train.Example 자료를 내도 움직일 것 같아서요.
    좀 더 수월해지기 위해 TFMA에서 시작된 BigQueryML의 모델 분석의 코드와 설정 방법을 그대로 반복해서 사용하고 싶어서 이 방법을 채택했습니다.

    미조사지

  • NULL 값 처리
    table_utils에서는 null 값이 마스크를 쓴 것처럼 처리되는 것을 볼 수 있지만 별로 따라잡지 못했기 때문에 최종적으로 모델을 평가할 때 null 값이 어떻게 된 것인지 확인하지 못했다.
  • 걸려 넘어진 점 2로 기록된 tf.train.Example 형식의 Model Agnostic TFT를 이용한 이동 방법
    빔(Dataflow)에서 TFBI를 이동할 때tf.train.Example는 순조롭게 진행된 기억이 있어 TFMA도 쉽게 이용할 수 있을 것으로 기대된다.
  • (3. 생각지도 못한 다른 일들)

    끝: TFX 관련 라이브러리 터치 팁


    TFX와 관련한 기사가 너무 적어 많은 분이 물러설 것 같아요.TFX가 뭔지 대충 알기 위해서Towards ML Engineering: A Berief History Of TensorFlow Extended(TFX) 읽는 게 좋을 것 같아요.
    일본어 정보라면 지난해 advent 달력 보도TFX가 도대체 무엇인지, 현황은 어떤 것일까를 간결하게 요약할 수 있다.
    TFX와 관련해서는 투PR은 물론 활용에 있어 수준 높은 API가 준비돼 있어 사용이 수월하고 어느 정도 안정적이다.
    여기서 어떻게 각오를 하고 어떻게 실행할지 망설일 때 어떻게 조사해야 좋을지 그런 각오로 쓰고 싶다.
    사상적 준비로 우선 견본은 움직이지 않는다.샘플 이상의 일을 하려면 움직이지 않도록 주의해라.실제로 움직이지 않는 건 아닌 것 같은데 처음부터 움직일 수 있는 걸 기대하다 보면 오류가 생기고 힘들어요.0.25 같은 버전의 프로그램 라이브러리를 기대해도 어쩔 수 없었다.
    습관을 버려라.그중에서도 자기 생각대로 행동하지 못하면 안심이 된다.
    현재 버전의 설치 방법에 대해 고민할 때 TFX의 각 Exectutor를 찾아보십시오.
    TFT는 크게 I/O를 정의하는 Component와 실제 내부 처리를 위한 Executor로 나뉜다.
    Executor의 실제 모습을 보면 대략적인 사용법을 어느 정도 이해할 수 있다.
    TFMA의 예를 들어 evaluatormodel_validator를 보면 기대가 어떻게 이루어졌는지 알 수 있다.
    자체 시스템에 조금씩 개량해 넣으려면 수준 높은 API 처리를 추적하는 것도 방법이다.이번 추격tfma.run_model_analysistfma.analyze_raw_data가 좋다.
    여력이 있다면 프로토 파일을 확인하면 데이터의 흐름을 순조롭게 파악할 수 있다.TFX 관련 프로토 파일tensorflow_metadata 세트.모든 창고 전용은 개별 창고 안에 있다.
    예를 들어 통계 정보와 패턴 정보는 TFBI와 Tensor Flow-datasets에 사용되기 때문에 총괄tensorflow_metadata에서 각 프로그램 라이브러리의 프로필에서 import가 사용하지만 tfma.EvalConfig는 TFTMA 전용이기 때문에 총괄tensorflow_model_anlaysis/proto에 있다.
    TFX 관련 프로그램 라이브러리와 배관 설치는 다양한 발견이 있었고 단순히 읽을거리로도 흥미롭다.
    특히 시스템으로서 ML에 가입하고 싶은 사람에게 잘 어울린다고 생각합니다.
    P.S.
    (프리미엄 API를 사용하지 않고 사용하려고 시도하는 순간 파악하는 경우가 많아져 아무것도 모르는 상태가 된 데다 이틀 전쯤부터 여유가 생긴 시간부터 만지기 시작해 힘들었다😇)

    좋은 웹페이지 즐겨찾기