계속·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에서 실행되는 노트북이 공개됩니다.
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이면 오류 발생ExtractEvaluateAndWriteResults
에 넘겨도 오류가 발생합니다.예를 들어 봐봐Result Slicing With Cloud AutoML Tables, 이용
tfma.model_agnostic_eval
으로 제작EvalSharedmodel
과extractors
.이런 상황에서 tf.train.Example 자료를 내도 움직일 것 같아서요.좀 더 수월해지기 위해 TFMA에서 시작된 BigQueryML의 모델 분석의 코드와 설정 방법을 그대로 반복해서 사용하고 싶어서 이 방법을 채택했습니다.
미조사지
table_utils에서는 null 값이 마스크를 쓴 것처럼 처리되는 것을 볼 수 있지만 별로 따라잡지 못했기 때문에 최종적으로 모델을 평가할 때 null 값이 어떻게 된 것인지 확인하지 못했다.
빔(Dataflow)에서 TFBI를 이동할 때
tf.train.Example
는 순조롭게 진행된 기억이 있어 TFMA도 쉽게 이용할 수 있을 것으로 기대된다.끝: 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의 예를 들어 evaluator나model_validator를 보면 기대가 어떻게 이루어졌는지 알 수 있다.
자체 시스템에 조금씩 개량해 넣으려면 수준 높은 API 처리를 추적하는 것도 방법이다.이번 추격tfma.run_model_analysis과tfma.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를 사용하지 않고 사용하려고 시도하는 순간 파악하는 경우가 많아져 아무것도 모르는 상태가 된 데다 이틀 전쯤부터 여유가 생긴 시간부터 만지기 시작해 힘들었다😇)
Reference
이 문제에 관하여(계속·TFMA 모델 Agnostic 모델 분석 시작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kurushi/articles/9d90e578fe7c8c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)