Snowpark ML FileSystem 및 FileSet

Snowpark ML 라이브러리에는 서버 측의 암호화된 내부 Snowflake 스테이지 의 파일 시스템과 유사한 추상화인 FileSystem이 포함되어 있습니다. 구체적으로는 fsspec AbstractFileSystem 구현입니다. 이 라이브러리에는 머신 러닝 데이터를 Snowflake 테이블에서 스테이지로 이동하고, 스테이지에서 데이터를 PyTorch 또는 TensorFlow에 공급할 수 있게 해주는 관련 클래스 FileSet도 포함되어 있습니다(Snowpark ML 프레임워크 커넥터 참조).

이러한 API에 대한 전체 세부 정보는 Snowpark ML API 참조 를 확인하십시오.

참고

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

파일 시스템 생성 및 사용하기

Snowpark ML 파일 시스템을 만들려면 Python용 Snowflake 커넥터 Connection 오브젝트 또는 Snowpark Python Session 이 필요합니다. 지침을 Snowflake에 연결하기 섹션을 참조하십시오.

연결 또는 세션 확보 후 내부 스테이지의 데이터에 액세스할 수 있는 Snowpark ML SFFileSystem 인스턴스를 생성할 수 있습니다.

Python용 Snowflake 커넥터 연결이 있는 경우 이를 sf_connection 인자로 전달합니다.

import fsspec
from snowflake.ml.fileset import sfcfs

sf_fs1 = sfcfs.SFFileSystem(sf_connection=sf_connection)
Copy

Snowpark Python 세션이 있는 경우 이를 snowpark_session 인자로 전달합니다.

import fsspec
from snowflake.ml.fileset import sfcfs

sf_fs2 = sfcfs.SFFileSystem(snowpark_session=sp_session)
Copy

SFFileSystem 은 파일의 로컬 캐싱과 같은 많은 기능을 fsspec.FileSystem 에서 상속합니다. fsspec.filesystem 팩터리 함수를 통해 Snowflake 파일 시스템을 인스턴스화하여 Snowflake FileSystem 구현을 사용하도록 target_protocol="sfc" 를 전달함으로써 이 기능과 기타 기능을 활성화할 수 있습니다.

local_cache_path = "/tmp/sf_files/"
cached_fs = fsspec.filesystem("cached", target_protocol="sfc",
                    target_options={"sf_connection": sf_connection,
                                    "cache_types": "bytes",
                                    "block_size": 32 * 2**20},
                    cache_storage=local_cache_path)
Copy

Snowflake 파일 시스템은 find, info, isdir, isfile, exists 를 포함하여 fsspec FileSystem 에 대해 정의된 읽기 전용 메서드를 대부분 지원합니다.

파일 지정하기

스테이지의 파일을 지정하려면 @database.schema.stage/file_path 형식의 경로를 사용하십시오.

파일 나열하기

파일 시스템의 ls 메서드는 스테이지에 있는 파일의 목록을 가져오는 데 사용됩니다.

print(*cached_fs.ls("@ML_DATASETS.public.my_models/sales_predict/"), end='\n')
Copy

파일 열기 및 읽기

파일 시스템의 open 메서드를 사용하여 스테이지에서 파일을 열 수 있습니다. 그런 다음 일반 Python 파일과 함께 사용하는 것과 동일한 방법을 사용하여 파일을 읽을 수 있습니다. 파일 오브젝트는 Python의 with 문과 함께 사용할 수 있는 컨텍스트 관리자이기도 하므로 더 이상 필요하지 않으면 자동으로 닫힙니다.

path = '@ML_DATASETS.public.my_models/test/data_7_7_3.snappy.parquet'

with sf_fs1.open(path, mode='rb') as f:
    print(f.read(16))
Copy

fsspec 파일 시스템을 허용하는 다른 구성 요소와 함께 SFFileSystem 인스턴스를 사용할 수도 있습니다. 여기에서는 이전 코드 블록에서 언급된 Parquet 데이터 파일이 PyArrow의 read_table 메서드에 전달됩니다.

import pyarrow.parquet as pq

table = pq.read_table(path, filesystem=sf_fs1)
table.take([1, 3])
Copy

파일(또는 파일과 유사한 오브젝트)을 허용하는 Python 구성 요소는 Snowflake 파일 시스템에서 열린 파일 오브젝트로 전달할 수 있습니다. 예를 들어, 스테이지에 gzip으로 압축된 파일이 있는 경우 이를 fileobj 매개 변수로 gzip.GzipFile 에 전달하여 Python의 gzip 모듈과 함께 사용할 수 있습니다.

path = "sfc://@ML_DATASETS.public.my_models/dataset.csv.gz"

with cached_fs.open(path, mode='rb', sf_connection=sf_connection) as f:
    g = gzip.GzipFile(fileobj=f)
    for i in range(3):
        print(g.readline())
Copy

FileSet 생성 및 사용하기

Snowflake FileSet는 내부 서버 측 암호화 스테이지에서 파일 형식으로 SQL 쿼리 결과를 보여주는 변경 불가능한 스냅샷을 나타냅니다. 이러한 파일은 FileSystem을 통해 액세스하여 PyTorch 및 TensorFlow와 같은 도구에 데이터를 공급함으로써 기존 데이터 거버넌스 모델 내에서 모델을 대규모로 학습시키도록 할 수 있습니다. FileSet를 생성하려면 FileSet.make 메서드를 사용하십시오.

FileSet를 생성하려면 Snowflake Python 연결 또는 Snowpark 세션이 필요합니다. 지침을 Snowflake에 연결하기 섹션을 참조하십시오. 또한 기존 내부 서버 측 암호화 스테이지 또는 FileSet가 저장될 해당 스테이지 아래의 하위 디렉터리에 대한 경로를 제공해야 합니다.

Snowpark DataFrame에서 FileSet를 생성하려면 DataFrame을 생성하고 이를 FileSet.makesnowpark_dataframe 으로 전달하십시오. 이때 DataFrame의 collect 메서드를 호출하지 마십시오.

# Snowpark Python equivalent of "SELECT * FROM MYDATA LIMIT 5000000"
df = snowpark_session.table('mydata').limit(5000000)
fileset_df = fileset.FileSet.make(
    target_stage_loc="@ML_DATASETS.public.my_models/",
    name="from_dataframe",
    snowpark_dataframe=df,
    shuffle=True,
)
Copy

Python용 Snowflake 커넥터 연결을 사용하여 FileSet를 생성하려면 연결을 Fileset.makesf_connection 으로 전달하고 SQL 쿼리를 query 로 전달하십시오.

fileset_sf = fileset.FileSet.make(
    target_stage_loc="@ML_DATASETS.public.my_models/",
    name="from_connector",
    sf_connection=sf_connection,
    query="SELECT * FROM MYDATA LIMIT 5000000",
    shuffle=True,           # see later section about shuffling
)
Copy

참고

shuffle 매개 변수를 사용하여 데이터를 셔플링하는 방법에 대한 자세한 내용은 FileSets의 데이터 셔플링 섹션을 참조하십시오.

files 메서드를 사용하여 FileSet의 파일 목록을 가져옵니다.

print(*fileset_df.files())
Copy

FileSet의 데이터를 PyTorch 또는 TensorFlow에 공급하는 방법에 대한 자세한 내용은 Snowpark ML 프레임워크 커넥터 섹션을 참조하십시오.