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)
Snowpark Python 세션이 있는 경우 이를 snowpark_session
인자로 전달합니다.
import fsspec
from snowflake.ml.fileset import sfcfs
sf_fs2 = sfcfs.SFFileSystem(snowpark_session=sp_session)
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)
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')
파일 열기 및 읽기¶
파일 시스템의 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))
fsspec 파일 시스템을 허용하는 다른 구성 요소와 함께 SFFileSystem
인스턴스를 사용할 수도 있습니다. 여기에서는 이전 코드 블록에서 언급된 Parquet 데이터 파일이 PyArrow의 read_table
메서드에 전달됩니다.
import pyarrow.parquet as pq
table = pq.read_table(path, filesystem=sf_fs1)
table.take([1, 3])
파일(또는 파일과 유사한 오브젝트)을 허용하는 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())
FileSet 생성 및 사용하기¶
Snowflake FileSet는 내부 서버 측 암호화 스테이지에서 파일 형식으로 SQL 쿼리 결과를 보여주는 변경 불가능한 스냅샷을 나타냅니다. 이러한 파일은 FileSystem을 통해 액세스하여 PyTorch 및 TensorFlow와 같은 도구에 데이터를 공급함으로써 기존 데이터 거버넌스 모델 내에서 모델을 대규모로 학습시키도록 할 수 있습니다. FileSet를 생성하려면 FileSet.make
메서드를 사용하십시오.
FileSet를 생성하려면 Snowflake Python 연결 또는 Snowpark 세션이 필요합니다. 지침을 Snowflake에 연결하기 섹션을 참조하십시오. 또한 기존 내부 서버 측 암호화 스테이지 또는 FileSet가 저장될 해당 스테이지 아래의 하위 디렉터리에 대한 경로를 제공해야 합니다.
Snowpark DataFrame에서 FileSet를 생성하려면 DataFrame을 생성하고 이를 FileSet.make
에 snowpark_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,
)
Python용 Snowflake 커넥터 연결을 사용하여 FileSet를 생성하려면 연결을 Fileset.make
에 sf_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
)
참고
shuffle
매개 변수를 사용하여 데이터를 셔플링하는 방법에 대한 자세한 내용은 FileSets의 데이터 셔플링 섹션을 참조하십시오.
files
메서드를 사용하여 FileSet의 파일 목록을 가져옵니다.
print(*fileset_df.files())
FileSet의 데이터를 PyTorch 또는 TensorFlow에 공급하는 방법에 대한 자세한 내용은 Snowpark ML 프레임워크 커넥터 섹션을 참조하십시오.