코드 없는 언어 모델 외에도 Foundry는 사용자가 Hugging Face 또는 spaCy와 같은 인기 있는 언어 모델 프레임워크와 통합할 수 있도록 지원합니다. Conda 또는 Pip을 통해 사용할 수 있는 Python 프레임워크는 Foundry에서 사용할 수 있습니다. 그러나 대부분의 프레임워크가 인터넷에서 사전 훈련된 모델, 코퍼스, 또는 기타 설정을 다운로드하기 때문에 Foundry 내에서 완전히 기능하도록 하려면 추가 단계가 필요합니다. 이는 Foundry의 보안 아키텍처 때문으로, 기본적으로 사용자가 작성한 Python 코드에 대한 인터넷 접근을 거부합니다. 필요한 추가 단계는 언어 모델 프레임워크의 세부 사항에 따라 다릅니다.
코드 없는 언어 모델로 사용할 수 없는 Hugging Face 언어 모델에 대한 지원을 추가하려면 다음 두 가지 옵션이 있습니다:
Hugging Face 모델 허브의 모든 모델을 데이터셋으로 가져올 수 있습니다. 이 데이터셋은 Code Repositories 또는 Code Workspaces에서 사용할 수 있습니다.
먼저, Hugging Face에서 모델 파일을 다운로드 받습니다. 그런 다음, 모델을 스키마가 없는 데이터셋으로 업로드하여 파일을 Foundry로 가져옵니다. 이 파일들은 프론트엔드 업로드 (New > Dataset > Import > Select all files) 또는 모델 파일이 사설 네트워크의 공유 드라이브에 저장되어 있는 경우 Data Connection 동기화를 통해 업로드할 수 있습니다.
가져온 데이터셋에는 Hugging Face의 모델 세부 정보 중 Files and versions 탭의 모든 파일이 포함되어야 합니다. 그러나 하나의 바이너리 모델 파일만 필요합니다(예: pytorch_model.bin
또는 tf_model.h5
). 대부분의 경우, PyTorch 모델을 바이너리 모델 파일로 사용하는 것이 좋습니다.
모델 파일이 데이터셋에 저장되면 변환에서 입력으로 데이터셋을 사용할 수 있습니다. 모델의 크기에 따라 메모리에 모델을 로드하기 위해 DRIVER_MEMORY_MEDIUM
과 같은 Spark 프로필을 지정해야 할 수도 있습니다. 아래 코드는 foundry-huggingface-adapters
의 유틸리티를 사용합니다:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
from palantir_models.transforms import ModelOutput from transforms.api import transform, Input from transformers import AutoTokenizer, AutoModel from huggingface_adapters.utils import copy_model_to_driver @transform( model_output=ModelOutput("/path/to/output/model_asset"), # 모델 결과물 경로 hugging_face_raw=Input("/path/to/input/dataset"), # Hugging Face 데이터셋 경로 ) def compute(model_output, hugging_face_raw): # 데이터셋을 드라이버로 복사 temp_dir = copy_model_to_driver(hugging_face_raw.filesystem()) # 토크나이저 불러오기 tokenizer = AutoTokenizer.from_pretrained(temp_dir) # 모델 불러오기 model = AutoModel.from_pretrained(temp_dir) # 모델 어댑터로 모델 감싸기 및 모델로 저장 # model_output.publish(...)
유즈케이스에 따라, EmbeddingAdapter
와 같은 언어 모델 어댑터 중 하나를 사용할 수 있습니다:
Copied!1 2 3 4 5 6 7 8 9
# 다른 임포트들 from huggingface_adapters.embedding_adapter import EmbeddingAdapter # ... # EmbeddingAdapter를 사용하여 모델의 임베딩을 출판합니다. # change_type 인자는 모델 버전 변경의 타입을 의미하며, 여기서는 MINOR(소수 변경)를 사용하였습니다. model_output.publish( model_adapter=EmbeddingAdapter(tokenizer, model), change_type=ModelVersionChangeType.MINOR )
대체로, Foundry 등록의 네트워크 송신 정책에서 관련 Hugging Face 도메인을 허용 목록에 추가할 수 있습니다. 허용 목록에 추가해야 할 관련 도메인은 https://huggingface.co 와 https://cdn-lfs.huggingface.co입니다. 네트워크 송신 설정에 대한 세부 정보는 Foundry 관리 문서에서 찾을 수 있습니다.
또한, Hugging Face에서 모델을 로드하는 Code Repositories는 transforms-external-systems
라이브러리 추가되어 있어야 하며, 새롭게 생성된 송신 정책을 사용하도록 적절하게 설정되어 있어야 합니다. 설정이 마련되면, 오픈 소스 언어 모델을 Python 변환에서 로드할 수 있습니다.
PermissionError: [Errno 13] Permission denied: '/.cache'
오류 메시지를 받는 경우, 아래 예제와 같이 모델 로드 중에 캐시 디렉토리를 지정해야 합니다.
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
# 팔란티어 모델 변환 모듈을 임포트합니다. from palantir_models.transforms import ModelOutput # 변환 API를 임포트합니다. from transforms.api import transform, Input # 외부 시스템을 사용하기 위한 모듈을 임포트합니다. from transforms.external.systems import use_external_systems, EgressPolicy, ExportControl # 트랜스포머 모듈을 임포트합니다. from transformers import AutoTokenizer, AutoModel # 임시 파일을 만들기 위한 모듈을 임포트합니다. import tempfile # 외부 시스템 사용에 대한 데코레이터입니다. # 이 데코레이터는 ExportControl과 EgressPolicy를 설정합니다. @use_external_systems( export_control=ExportControl(markings=['<marking ID>']), egress=EgressPolicy(<policy RID>), ) # 변환에 대한 데코레이터입니다. # 이 데코레이터는 출력 모델과 입력 데이터셋의 경로를 설정합니다. @transform( model_output=ModelOutput('/path/to/output/model_asset'), text_input=Input('/path/to/input/dataset'), ) # 실제 계산을 수행하는 함수입니다. def compute(export_control, egress, model_output, text_input): # 임시 디렉토리를 생성합니다. CACHE_DIR = tempfile.mkdtemp() # BERT 토크나이저를 불러옵니다. tokenizer = AutoTokenizer.from_pretrained("bert-base-cased", cache_dir=CACHE_DIR) # BERT 모델을 불러옵니다. model = AutoModel.from_pretrained("bert-base-cased", cache_dir=CACHE_DIR) # 모델 인스턴스를 모델 어댑터로 감싸고 팔란티어 플랫폼에 저장합니다. # model_output.publish(...)
언어 모델에 접근할 수 있게 되면, 데이터셋이나 Hugging Face 도메인을 통해 Palantir 모델로 통합할 수 있습니다. 언어 모델을 모델 어댑터로 감싸서 Code Repositories에서의 모델 훈련 문서에 정의된대로 사용합니다.