Fine-tuning(Snowflake Cortex)¶
Snowflake Cortex Fine-tuning 함수는 특정 작업에 맞게 대규모 언어 모델을 사용자 지정할 수 있는 방법을 제공합니다. 이 항목에서는 이 기능의 작동 방식과 사용자 고유의 미세 조정 모델을 생성하는 방법에 대해 설명합니다.
개요¶
Cortex Fine-tuning 를 사용하면 매개 변수의 효율적인 미세 조정(PEFT)을 활용하여 보다 전문적인 작업에서 사전 훈련된 모델과 함께 사용할 수 있는 사용자 지정 어댑터를 생성할 수 있습니다. 대규모 모델을 처음부터 훈련하는 데 드는 높은 비용을 원하지 않지만 신속한 엔지니어링이나 검색 증강 생성(RAG) 메서드에서 얻는 것보다 더 나은 대기 시간과 결과가 필요한 경우, 기존 대규모 모델을 미세 조정하는 것도 한 가지 옵션입니다. Fine-tuning을 사용하면 예제를 사용하여 모델의 동작을 조정하고 도메인별 작업에 대한 모델의 지식을 향상할 수 있습니다.
Cortex Fine-tuning 는 데이터를 사용하여 널리 사용되는 LLMs을 Snowflake 내에서 미세 조정할 수 있는 완전 관리형 서비스입니다.
Cortex Fine-tuning 기능은 다음과 같은 인자와 함께 Snowflake Cortex 함수인 FINETUNE 으로 제공됩니다.
비용 고려 사항¶
Snowflake Cortex Fine-tuning 함수는 훈련에 사용된 토큰 수에 따라 컴퓨팅 비용이 발생합니다. 또한 미세 조정된 모델에서 COMPLETE 함수를 실행하면 처리된 토큰 수에 따라 컴퓨팅 비용이 발생합니다. 백만 토큰당 크레딧으로 표시되는 각 비용은 Snowflake 서비스 사용 테이블 을 참조하십시오.
토큰은 Snowflake Cortex Fine-tuning 함수가 처리하는 가장 작은 텍스트 단위로, 대략 텍스트 4자와 같습니다. 원시 입력 또는 출력 텍스트와 토큰의 동등성은 모델에 따라 다를 수 있습니다.
응답에 새 텍스트를 생성하는 COMPLETE 함수의 경우 입력 토큰과 출력 토큰이 모두 카운트됩니다.
미세 조정된 훈련된 토큰은 다음과 같이 계산됩니다.
Fine-tuning trained tokens = number of input tokens * number of epochs trained
FINETUNE ('DESCRIBE') (SNOWFLAKE.CORTEX) 를 사용하여 미세 조정 작업을 위해 훈련된 토큰의 수를 확인합니다.
기타 고려 사항¶
액세스 제어 요구 사항¶
미세 조정 작업을 실행하려면 미세 조정 작업을 생성하는 역할에 다음 권한이 필요합니다.
권한 |
오브젝트 |
참고 |
---|---|---|
USAGE |
DATABASE |
훈련(및 유효성 검사) 데이터를 쿼리하는 데이터베이스입니다. |
(CREATE MODEL 및 USAGE) 또는 OWNERSHIP |
SCHEMA |
모델이 저장되는 스키마입니다. |
다음 SQL은 my_schema
에서 역할인 my_role
에 CREATE MODEL 권한을 부여하는 예제입니다.
GRANT CREATE MODEL ON SCHEMA my_schema TO ROLE my_role;
또한 FINETUNE 함수를 사용하려면 함수를 호출할 사용자에게 ACCOUNTADMIN 역할이 SNOWFLAKE.CORTEX_USER 데이터베이스 역할을 부여해야 합니다. 자세한 내용은 LLM 함수 필수 권한 항목을 참조하십시오.
다른 역할에 미세 조정된 모델을 사용할 수 있는 액세스 권한을 부여하려면 해당 모델에 대한 사용 권한을 부여해야 합니다. 자세한 내용은 모델 권한 섹션을 참조하십시오.
미세 조정이 가능한 모델¶
미세 조정이 가능한 기본 모델은 다음과 같습니다. 미세 조정이 가능한 모델은 나중에 추가되거나 제거될 수 있습니다.
이름 |
설명 |
---|---|
|
텍스트 분류, 요약, 감정 분석과 같이 |
|
채팅 애플리케이션, 콘텐츠 제작, 엔터프라이즈 애플리케이션에 이상적인 최신 성능을 제공하는 Meta의 LLM입니다. |
|
중간 정도의 추론이 필요한 작업에 이상적인 Meta의 대규모 언어 모델입니다. 이는 128K의 컨텍스트 윈도우를 갖춘 초고속 경량 모델입니다. |
|
채팅 애플리케이션, 콘텐츠 제작, 엔터프라이즈 애플리케이션에 이상적인 최신 성능을 보여주는 오픈 소스 모델입니다. 이는 128K 컨텍스트 윈도우로 다양한 사용 사례를 지원하는 고성능, 비용 효율적인 모델입니다. |
|
70억 개의 매개 변수가 있는 Mistral AI의 대규모 언어 모델로 가장 간단한 요약, 정형화, 질문 답변 등 빠르게 처리해야 하는 작업에 이상적입니다. 32K 컨텍스트 윈도우를 통해 여러 페이지의 텍스트에 대해 낮은 지연 시간과 높은 처리량 처리를 제공합니다. |
|
텍스트 생성, 분류 및 질문에 대한 답변에 이상적인 Mistral AI의 대규모 언어 모델입니다. Mistral 모델은 낮은 메모리 요구 사항과 낮은 지연 시간에 최적화되어 있어 엔터프라이즈 사용 사례에서 더 높은 처리량을 제공합니다. |
모델 미세 조정 방법¶
모델 미세 조정을 위한 전체 워크플로는 다음과 같습니다.
훈련이 완료되면 Cortex Fine-tuning 에서 제공한 모델 이름을 사용하여 모델에서 추론을 실행할 수 있습니다.
훈련 데이터 준비¶
훈련 데이터는 Snowflake 테이블 또는 뷰에서 가져와야 하며 쿼리 결과에는 이름이 prompt
및 completion
인 열이 포함되어야 합니다. 테이블이나 뷰에 필요한 이름의 열이 없으면 쿼리에서 열 별칭을 사용하여 이름을 지정합니다. 이 쿼리는 FINETUNE 함수에 매개 변수로 제공됩니다. 결과에 prompt
및 completion
열 이름이 포함되지 않으면 오류가 발생합니다.
참고
프롬프트 및 완성 열을 제외한 모든 열은 FINETUNE 함수에 의해 무시됩니다. Snowflake에서는 필요한 열만 선택하는 쿼리를 사용할 것을 권장합니다.
다음 코드는 FINETUNE 함수를 호출하고 SELECT ... AS
구문을 사용하여 쿼리 결과의 두 열을 prompt
및 completion
으로 설정합니다.
SELECT SNOWFLAKE.CORTEX.FINETUNE(
'CREATE',
'my_tuned_model',
'mistral-7b',
'SELECT a AS prompt, d AS completion FROM train',
'SELECT a AS prompt, d AS completion FROM validation'
);
프롬프트는 LLM에 대한 입력이고 완료는 LLM의 응답입니다. 훈련 데이터에는 모델이 특정 프롬프트에 어떻게 응답할지 보여주는 프롬프트 및 완료 쌍이 포함되어야 합니다.
미세 조정을 통해 최적의 성능을 얻기 위한 훈련 데이터에 대한 추가 권장 사항 및 요구 사항은 다음과 같습니다.
수백 개의 예제로 시작할 수 있습니다. 너무 많은 예제로 시작하면 성능은 거의 개선되지 않으면서 미세 조정 시간이 크게 늘어날 수 있습니다.
각 예제에서는 미세 조정하는 기본 모델에 할당된 컨텍스트 윈도우의 일부만 사용해야 합니다. 컨텍스트 윈도우는 토큰을 기준으로 정의됩니다. 토큰은 Snowflake Cortex 함수가 처리하는 가장 작은 텍스트 단위로, 대략 텍스트 4자와 같습니다.
각 기본 모델에 대해
prompt
및completion
에 할당된 컨텍스트 윈도우 부분은 다음 표에 정의되어 있습니다.모델
컨텍스트 윈도우
입력 컨텍스트(프롬프트)
출력 컨텍스트(완료)
llama3-8b
8k
6k
2k
llama3-70b
8k
6k
2k
llama3.1-8b
128k
120k
8k
llama3.1-70b
128k
120k
8k
mistral-7b
32k
28k
4k
mistral-8x7b
32k
28k
4k
미세 조정 작업 시작¶
SNOWFLAKE.CORTEX.FINETUNE 함수를 호출하고 첫 번째 인자로 ‘CREATE’를 로 전달하거나 Snowsight 를 사용하여 미세 조정 작업을 시작할 수 있습니다.
SQL 사용하기¶
이 예제에서는 mistral-7b
모델을 기본 모델로 사용하여 모델 출력 이름이 my_tuned_model
인 작업과 my_training_data
및 my_validation_data
테이블에서 각각 훈련 및 검증 데이터를 쿼리하는 작업을 생성합니다.
USE DATABASE mydb;
USE SCHEMA myschema;
SELECT SNOWFLAKE.CORTEX.FINETUNE(
'CREATE',
'my_tuned_model',
'mistral-7b',
'SELECT prompt, completion FROM my_training_data',
'SELECT prompt, completion FROM my_validation_data'
);
각각 다른 데이터베이스와 스키마를 사용하려면 모델이나 데이터와 같은 각 데이터베이스 오브젝트에 대해 절대 경로를 사용할 수 있습니다. 다음 예제에서는 mydb2.myschema2
데이터베이스 및 스키마의 데이터로 미세 조정 작업을 생성하고 미세 조정된 모델을 mydb.myschema
데이터베이스 및 스키마에 저장합니다.
SELECT SNOWFLAKE.CORTEX.FINETUNE(
'CREATE',
'mydb.myschema.my_tuned_model',
'mistral-7b',
'SELECT prompt, completion FROM mydb2.myschema2.my_training_data',
'SELECT prompt, completion FROM mydb2.myschema2.my_validation_data'
);
첫 번째 인자 <label-cortex_finetuning_create> 가 ‘CREATE’인 SNOWFLAKE.CORTEX.FINETUNE 함수는 미세 조정된 모델 ID를 출력으로 반환합니다. 이 ID를 사용하면 첫 번째 인자 에 ‘DESCRIBE’가 있는 SNOWFLAKE.CORTEX.FINETUNE 함수를 사용하여 상태 또는 작업 진행률을 가져올 수 있습니다.
Snowsight 사용하기¶
다음 단계에 따라 Snowsight 에서 미세 조정 작업을 생성합니다.
Snowsight 에 로그인합니다.
SNOWFLAKE.CORTEX_USER 데이터베이스 역할이 부여된 역할을 선택합니다.
탐색 메뉴에서 AI & ML » Studio 를 선택합니다.
Create Custom LLM 상자에서 Fine-tune 을 선택합니다.
드롭다운 메뉴를 사용하여 기본 모델을 선택합니다.
미세 조정 작업을 실행할 역할과 작업을 실행할 웨어하우스를 선택합니다. 역할에는 SNOWFLAKE.CORTEX_USER 데이터베이스 역할이 부여되어야 합니다.
미세 조정된 모델을 저장할 데이터베이스를 선택합니다.
미세 조정된 모델의 이름을 입력한 다음 Let’s go 를 선택합니다.
훈련 데이터가 포함된 테이블 또는 뷰를 선택한 후 Next 를 선택합니다. 훈련 데이터는 역할이 액세스할 수 있는 모든 데이터베이스나 스키마에서 가져올 수 있습니다.
훈련 데이터에서 프롬프트가 포함된 열을 선택한 후 Next 를 선택합니다.
훈련 데이터에서 완료 사항이 포함된 열을 선택한 후 Next 를 선택합니다.
검증 데이터 세트가 있는 경우 검증 데이터가 포함된 테이블이나 뷰를 선택한 후 Next 를 선택합니다. 별도의 검증 데이터가 없는 경우 Skip this option 을 선택합니다.
선택 사항을 확인한 후 Start training 을 선택합니다.
마지막 단계에서는 미세 조정 작업이 시작되었음을 확인하고 Job ID 가 표시됩니다. 이 ID를 사용하면 첫 번째 인자 에 ‘DESCRIBE’가 있는 SNOWFLAKE.CORTEX.FINETUNE 함수를 사용하여 상태 또는 작업 진행률을 가져올 수 있습니다.
미세 조정된 모델 관리하기¶
미세 조정 작업은 장시간 동안 실행되므로, 워크시트 세션에 묶여 있지 않습니다. ‘SHOW’ 또는 ‘DESCRIBE’ 를 첫 번째 인자로 하는 SNOWFLAKE.CORTEX.FINETUNE 함수를 사용하여 미세 조정 작업의 상태를 확인할 수 있습니다.
미세 조정 작업이 더 이상 필요하지 않은 경우, 첫 번째 인자 <label-cortex_finetuning_cancel> 에 ‘CANCEL’를, 두 번째 인자로 작업 ID를 사용하는 SNOWFLAKE.CORTEX.FINETUNE 함수를 사용하여 작업을 종료할 수 있습니다.
추론을 위해 미세 조정된 모델 사용¶
미세 조정한 모델의 이름과 함께 COMPLETE LLM 함수 를 사용하여 추론합니다.
이 예제에서는 미세 조정한 모델의 이름으로 COMPLETE 함수를 호출합니다.
SELECT SNOWFLAKE.CORTEX.COMPLETE(
'my_tuned_model',
'How to fine-tune mistral models'
);
다음은 예제 호출의 출력 중 일부입니다.
Mistral models are a type of deep learning model used for image recognition and classification. Fine-tuning a Mistral model involves adjusting the model's parameters to ...
제한 사항 및 알려진 문제¶
미세 조정 작업은 계정 수준에서만 나열될 수 있습니다.
FINETUNE ('SHOW') (SNOWFLAKE.CORTEX) 에서 반환된 미세 조정 작업은 영구적이지 않으며 주기적으로 가비지 컬렉션될 수 있습니다.
기본 모델이 Cortex LLM 함수에서 제거되면 미세 조정한 모델이 더 이상 작동하지 않습니다.
모델 복제하기¶
리전 간 추론 은 미세 조정된 모델을 지원하지 않습니다. 추론은 모델 오브젝트가 위치한 동일한 리전에서 수행되어야 합니다. 데이터베이스 복제를 사용하여 미세 조정된 모델 오브젝트를 모델이 훈련된 리전과 다른 경우 추론을 수행할 리전으로 복제할 수 있습니다.
예를 들어, AWS US 서부 2 리전 계정에 mistral-7b
를 기반으로 미세 조정된 모델을 생성한 경우 데이터 공유를 사용하여 이 리전의 다른 계정과 공유하거나 데이터베이스 복제를 사용하여 AWS 유럽 서부 리전과 같이 mistral-7b
모델을 지원하는 다른 리전의 조직 내 다른 계정으로 모델을 복제할 수 있습니다. 오브젝트 복제에 대한 자세한 내용은 여러 계정에 걸쳐 데이터베이스 및 계정 오브젝트 복제하기 섹션을 참조하십시오.
법적 고지¶
입력 및 출력의 데이터 분류는 다음 테이블과 같습니다.
입력 데이터 분류 |
출력 데이터 분류 |
지정 |
---|---|---|
Usage Data |
Customer Data |
Preview AI Features [1] |
자세한 내용은 Snowflake AI 및 ML 섹션을 참조하십시오.