Snowpark ML 프레임워크 커넥터

Snowpark ML에는 둘 모두 고유한 특정 형식의 데이터를 기대하는 PyTorch 프레임워크와 Tensorflow 프레임워크를 위해 안전하고 확장 가능한 데이터 프로비저닝을 위한 지원이 포함되어 있습니다. 이 워크플로를 단순화하기 위해, Snowpark ML 라이브러리는 FileSet의 데이터를 PyTorch Tensor 또는 TensorFlow Record로 제공하기 위해 FileSet API를 기반으로 빌드된 편리한 메서드를 제공합니다. (FileSet 는 내부 서버 측 암호화 스테이지에서 파일 형식으로 된 SQL 쿼리 결과의 변경 불가능한 스냅샷을 나타냅니다.)

참고

이 항목에서는 Snowpark ML 모듈이 설치되어 있다고 가정합니다. 설치되어 있지 않으면 Snowpark ML 설치하기 섹션을 참조하십시오.

쿼리에서 FileSet 만들기

PyTorch 또는 TensorFlow와 함께 사용하려는 데이터에서 FileSet를 생성하는 방법에 대한 자세한 내용은 FileSet 생성 및 사용하기 섹션을 참조하십시오. 다음 섹션 중 하나를 계속 진행합니다.

PyTorch에 FileSet 공급하기

Snowflake FileSet에서 PyTorch DataLoader에 전달할 수 있는 PyTorch DataPipe를 얻을 수 있습니다. DataLoader는 FileSet 데이터를 반복하여 일괄 처리된 PyTorch 텐서를 산출합니다. FileSet의 to_torch_datapipe 메서드를 사용하여 DataPipe를 생성한 다음 DataPipe를 PyTorch의 DataLoader 에 전달합니다.

from torch.utils.data import DataLoader

# See later sections about shuffling and batching
pipe = fileset_df.to_torch_datapipe(
    batch_size=4,
    shuffle=True,
    drop_last_batch=True)

for batch in DataLoader(pipe, batch_size=None, num_workers=0):
    print(batch)
    break
Copy

TensorFlow에 FileSet 공급하기

FileSet의 to_tf_dataset 메서드를 사용하여 Snowflake FileSet에서 TensorFlow 데이터 세트를 가져올 수 있습니다.

import tensorflow as tf

# See following sections about shuffling and batching
ds = fileset_df.to_tf_dataset(
    batch_size=4,
    shuffle=True,
    drop_last_batch=True)

for batch in ds:
    print(batch)
    break
Copy

데이터 세트를 반복하면 일괄 처리된 텐서가 생성됩니다.

FileSets의 데이터 셔플링

과적합 및 기타 문제를 방지하기 위해 학습 데이터를 셔플링하면 큰 가치를 발휘하는 경우가 많습니다. 데이터 섞기의 가치에 대한 논의는 머신 러닝 작업을 위해 데이터를 셔플링해야 하는 이유 를 참조하십시오.

쿼리에서 데이터를 아직 충분히 셔플링하지 않은 경우 FileSet는 다음 두 시점에 데이터를 셔플링할 수 있습니다.

  • FileSet.make 를 사용하여 FileSet를 만들 때.

    쿼리의 모든 행은 FileSet에 기록되기 전에 셔플링됩니다. 이는 고품질 전역 셔플이며 대규모 데이터세트 사용 시 비용이 많이 들 수 있습니다. 따라서 FileSet를 구체화할 때 한 번만 셔플링이 수행됩니다. shuffle=True 를 키워드 인자로 FileSet.make 에 전달합니다.

  • FileSet에서 PyTorch DataPipe 또는 TensorFlow 데이터 세트를 만들 때.

    이때는 FileSet의 파일 순서가 각 파일의 행 순서와 마찬가지로 무작위로 지정됩니다. 이는 《근사적인》 전역 셔플로 간주될 수 있습니다. 실제 전역 셔플보다 품질은 낮지만 비용은 훨씬 덜 듭니다. 이 스테이지에서 셔플링하려면 shuffle=True 을 FileSet의 to_torch_datapipe 또는 to_tf_dataset 메서드에 키워드 인자로 전달하십시오.

최상의 결과를 얻으려면 FileSet를 만들 때와 PyTorch 또는 TensorFlow에 데이터를 공급할 때 두 번 셔플링하십시오.

FileSets에서 데이터 일괄 처리하기

FileSets는 PyTorch 및 TensorFlow의 일괄 처리 기능과 똑같이 작동하지만 더 효율적인 일괄 처리 기능이 있습니다. PyTorch 또는 TensorFlow가 일괄 처리를 수행하도록 하는 대신 FileSet의 to_torch_datapipeto_tf_dataset 메서드에서 batch_size 매개 변수를 사용하는 것이 좋습니다. PyTorch를 사용하여 일괄 처리 기능을 비활성화하려면 DataLoader 를 인스턴스화할 때 batch_size=None 을 명시적으로 전달해야 합니다.

마지막 일괄 처리가 불완전할 경우 drop_last_batch=Trueto_torch_datapipe 또는 to_tf_dataset 에 전달하여 삭제할 수도 있습니다.