대규모 언어 모델(LLM) 함수(Snowflake Cortex)

Snowflake Cortex를 사용하면 Mistral, Meta, Google과 같은 회사의 연구원이 학습시킨 업계 최고의 대규모 언어 모델(LLM)에 즉시 액세스할 수 있습니다. 또한 Snowflake가 특정 사용 사례에 맞게 미세 조정한 모델도 제공합니다.

이러한 LLM은 Snowflake에서 완전히 호스팅하고 관리하므로 이를 사용하려고 따로 설정할 필요가 없습니다. 자신의 데이터가 Snowflake 내에 유지되면서 기대하는 성능, 확장성, 거버넌스를 제공합니다.

Snowflake Cortex 기능은 SQL 함수로 제공되며 Python 에서도 사용할 수 있습니다. 사용 가능한 함수를 다음과 같이 요약할 수 있습니다.

  • COMPLETE: 프롬프트가 주어지면 프롬프트를 완료하는 응답을 반환합니다. 이 함수는 단일 프롬프트 또는 여러 프롬프트와 응답이 포함된 대화를 허용합니다.

  • EXTRACT_ANSWER: 질문과 비정형 데이터가 주어지면 데이터에서 답변을 찾을 수 있는 경우 질문에 대한 답변을 반환합니다.

  • SENTIMENT: 주어진 텍스트에서 감지된 긍정적 또는 부정적인 감정을 나타내는 감정 점수(-1부터 1까지의 범위)를 반환합니다.

  • SUMMARIZE: 주어진 텍스트의 요약을 반환합니다.

  • TRANSLATE: 지원되는 언어 간에 주어진 텍스트를 번역합니다.

필수 권한

SNOWFLAKE 데이터베이스의 CORTEX_USER 데이터베이스 역할은 사용자가 Snowflake Cortex LLM 함수를 호출할 수 있는 권한을 포함합니다. 기본적으로 이 데이터베이스 역할은 ACCOUNTADMIN 역할에만 부여됩니다. 사용자가 Cortex LLM 함수에 액세스할 수 있도록 하기 위해 ACCOUNTADMIN은 이 역할을 사용자 역할에 전파해야 합니다.

SNOWFLAKE.CORTEX_USER 데이터베이스 역할을 사용자에게 직접 부여할 수는 없습니다. ACCOUNTADMIN 역할이 있는 사용자는 먼저 그 역할을 계정 역할에 부여한 다음 사용자에게 계정 역할을 부여해야 합니다. 자세한 내용은 SNOWFLAKE 데이터베이스 역할 사용하기 섹션을 참조하십시오.

다음 예에서는 ACCOUNTADMIN 역할을 맡아 해당 목적으로 생성한 계정 역할 cortex_user_role 을 통해 사용자 some_user 에게 CORTEX_USER 데이터베이스 역할을 부여합니다.

USE ROLE ACCOUNTADMIN;

CREATE ROLE cortex_user_role;
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE cortex_user_role;

GRANT ROLE cortex_user_role TO USER some_user;
Copy

특정 사용자 그룹에서 일반적으로 사용하는 기존 역할을 통해 Snowflake Cortex LLM 함수에 대한 액세스 권한을 부여할 수도 있습니다. (사용자 역할 섹션을 참조하십시오.) 예를 들어 조직의 분석가가 기본 역할로 사용하는 analyst 역할을 만든 경우 단일 GRANT 문으로 이러한 사용자에게 Snowflake Cortex LLM 함수에 대한 액세스 권한을 쉽게 부여할 수 있습니다.

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE analyst;
Copy

PUBLIC 의사 역할은 모든 사용자와 역할에 자동으로 부여되므로 PUBLIC에 cortex_user_role 을 부여하면 계정의 모든 사용자가 Snowflake Cortex LLM 함수를 사용할 수 있습니다.

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE PUBLIC;
Copy

액세스 권한을 부여하는 사용자 수와 Snowflake Cortex LLM 함수 사용이 컴퓨팅 소비에 미칠 수 있는 영향에 유의하십시오. 이러한 기능에 대한 광범위한 액세스 권한을 부여하기 전에 사용 목적(특히 가장 비용이 많이 드는 모델)과 관련된 정책을 수립하십시오.

사용자가 보다 안정적인 사용 패턴에 정착하려면 먼저 일시적인 비용 급증을 초래할 수 있는 새로운 기능에 대해 잘 알아봐야 합니다.

가용성

Snowflake Cortex LLM 함수는 현재 다음 리전에서 사용할 수 있습니다.

함수
(모델)
AWS US 동부
(북부 버지니아)
AWS US 서부
(오리건)
AWS 유럽
(프랑크푸르트)
Azure 동부 US 2
(버지니아)
Azure 서유럽
(네덜란드)
COMPLETE
(mistral-large)

COMPLETE
(mixtral-8x7b)

COMPLETE
(llama2-chat-70b)

COMPLETE
(mistral-7b)

COMPLETE
(gemma-7b)

EXTRACT_ANSWER

SENTIMENT

SUMMARIZE

TRANSLATE

비용 고려 사항

Snowflake Cortex LLM 함수는 처리된 토큰 수를 기준으로 컴퓨팅 비용이 발생합니다. 아래 테이블은 각 함수에 대한 1백만 개 토큰당 크레딧 비용을 보여줍니다.

참고

토큰은 Snowflake Cortex LLM 함수가 처리하는 가장 작은 텍스트 단위로, 대략 텍스트 4자와 같습니다. 원시 입력 또는 출력 텍스트와 토큰의 동등성은 모델에 따라 다를 수 있습니다.

  • 응답(COMPLETE, SUMMARIZE, TRANSLATE)에서 새 텍스트를 생성하는 함수의 경우 입력 및 출력 토큰이 모두 계산됩니다.

  • 입력(EXTRACT_ANSWER 및 SENTIMENT)에서 정보만 추출하는 함수의 경우 입력 토큰만 계산됩니다.

  • EXTRACT_ANSWER의 경우 청구 가능한 토큰 수는 from_textquestion 필드에 있는 토큰 수의 합계입니다.

컴퓨팅 비용에 대한 일반적인 정보는 컴퓨팅 비용 이해하기 섹션을 참조하십시오.

참고

웨어하우스가 더 크다고 해서 성능이 향상되는 것은 아니므로 Snowflake에서는 (MEDIUM 이하의) 작은 웨어하우스로 Snowflake Cortex LLM 함수를 호출하는 쿼리를 실행할 것을 권장합니다. Snowflake Cortex LLM 함수를 호출하는 쿼리를 실행할 때 웨어하우스를 활성 상태로 유지하는 것과 관련된 비용이 계속 적용됩니다.

함수(모델)

백만 토큰당 Snowflake 크레딧

COMPLETE(mistral-large)

5.10

COMPLETE (mixtral-8x7b)

0.50

COMPLETE (llama2-70b-chat)

0.45

COMPLETE (mistral-7b)

0.12

COMPLETE (gemma-7b)

0.12

EXTRACT_ANSWER

0.08

SENTIMENT

0.08

SUMMARIZE

0.10

TRANSLATE

0.33

Snowflake Cortex LLM 함수의 사용은 서비스 유형이 AI_SERVICES인 Snowflake Organization Usage의 METERING_DAILY_HISTORY 뷰에 나타납니다. 조직의 모든 계정에 대한 AI 서비스의 크레딧 소비를 확인하려면 다음 쿼리를 사용하십시오.

SELECT * FROM SNOWFLAKE.ORGANIZATION_USAGE.METERING_DAILY_HISTORY
    WHERE service_type ILIKE '%ai_services%';
Copy

참고

SNOWFLAKE.ORGANIZATION_USAGE.METERING_DAILY_HISTORY 뷰를 업데이트하는 데 최대 4시간이 걸릴 수 있습니다.

사용 할당량

모든 Snowflake 고객에게 높은 수준의 성능을 보장하기 위해, Snowflake Cortex LLM 함수에는 그 이상 사용할 경우 요청이 제한될 수 있는 사용 할당량이 적용됩니다. Snowflake는 때때로 이러한 할당량을 조정할 수 있습니다. 아래 테이블의 할당량은 계정별로 적용됩니다.

함수(모델)

분당 처리되는 토큰 수(TPM)

분당 처리되는 행 수(RPM)

COMPLETE(mistral-large)

200,000

100

COMPLETE (mixtral-8x7b)

300,000

400

COMPLETE (llama2-70b-chat)

300,000

400

COMPLETE (mistral-7b)

300,000

500

COMPLETE (gemma-7b)

300,000

500

EXTRACT_ANSWER

1,000,000

3,000

SENTIMENT

1,000,000

5,000

SUMMARIZE

300,000

500

TRANSLATE

1,000,000

2,000

참고

유효한 결제 방법이 없는 주문형 Snowflake 계정(예: 평가판 계정)은 Snowflake Cortex LLM 함수 사용 시 하루에 대략 1크레딧으로 제한됩니다. 이 제한을 제거하려면 평가판 계정을 유료 계정으로 전환하십시오.

비용 관리 및 제한하기

이 미리 보기 중에는 Snowflake Cortex LLM 함수를 호출할 때 MEDIUM보다 크지 않은 웨어하우스 크기를 사용하는 것이 좋습니다. 필요한 것보다 더 큰 웨어하우스를 사용해도 성능은 향상되지 않지만 불필요한 비용이 발생하고 제한 위험이 더 높아질 수 있습니다. 이 권장 사항은 향후 제품 업데이트로 인해 향후에 적용되지 않을 수 있습니다.

모델 제한 사항

Snowflake Cortex에서 사용하는 모델에는 아래 테이블에 설명된 대로 크기 제한이 있습니다. 크기는 토큰 단위로 주어집니다. 토큰은 일반적으로 단어에 대응되지만 모든 토큰이 단어인 것은 아니므로 한도에 대응하는 단어 수는 토큰 수보다 약간 더 적습니다. 제한을 초과하는 값을 입력하면 오류가 발생합니다.

함수

모델

컨텍스트 윈도우(토큰)

COMPLETE

mistral-large

32,000

mixtral-8x7b

32,000

llama-2-70b-chat

4,096

mistral-7b

32,000

gemma-7b

8,000

EXTRACT_ANSWER

Snowflake 관리형 모델

텍스트의 경우 2,048
질문의 경우 64

SENTIMENT

Snowflake 관리형 모델

512

SUMMARIZE

Snowflake 관리형 모델

32,000

TRANSLATE

Snowflake 관리형 모델

1,024

모델 선택하기

Snowflake Cortex COMPLETE 함수는 다양한 기능, 대기 시간, 비용의 여러 모델을 지원합니다. 이러한 모델은 일반적인 고객 사용 사례에 맞게 신중하게 선택되었습니다. 최고의 크레딧당 성능 을 달성하려면 콘텐츠 크기와 작업의 복잡성에 잘 맞는 모델을 선택하십시오. 사용 가능한 모델에 대한 간략한 개요는 다음과 같습니다.

  • mistral-large 는 다양한 메트릭에서 높은 점수를 받은 최상위 계층 모델입니다(아래 테이블 참조). 32,000개 토큰(약 24,000단어)의 컨텍스트 윈도우가 있으므로 확장된 대화 전반에 걸쳐 복잡한 추론에 참여할 수 있습니다. 또한 Snowflake Cortex에서 제공하는 모델 중 가장 컴퓨팅 집약적인 모델이므로 실행 비용도 가장 많이 듭니다.

  • mixtral-8x7b 는 대기 시간이 짧고 고품질의 결과를 제공하는 동시에 32,000개 토큰의 컨텍스트 길이도 지원합니다. 많은 엔터프라이즈 프로덕션 사용 사례에 이상적입니다.

  • llama2-70b-chat 은 데이터 추출, 직무 설명서 작성 지원 등 적당한 양의 추론이 필요한 복잡하고 큰 규모의 작업에 적합합니다.

  • mistral-7bgemma-7b 는 간단한 작업을 빠르고 더욱 비용 효율적으로 실행할 수 있습니다.

    • mistral-7b 는 더 작은 수준의 사용자 지정이 필요한 가장 간단한 요약 및 분류 작업에 이상적입니다. 32,000개 토큰 제한을 통해 여러 페이지의 텍스트를 처리할 수 있습니다.

    • gemma-7b 는 간단한 코드 및 텍스트 완성 작업에 적합합니다. 8,000개 토큰의 컨텍스트 윈도우가 있지만 그 한도 내에서 놀라울 정도로 성능이 뛰어나고 상당히 비용 효율적입니다.

어디서부터 시작해야 할지 잘 모르겠다면 이미 다른 최상위 계층 모델을 사용 중이든 LLM을 처음 사용하든 관계없이, mistral-large 를 먼저 사용해 보십시오. 이는 Snowflake Cortex가 제공하는 가장 광범위한 기능을 갖춘 모델이며, 이 모델을 통해 최첨단 모델의 능력을 잘 알 수 있을 것입니다. 다른 모델을 평가할 때 그 결과를 기준선으로 삼을 수 있습니다.

결정에 도움이 되도록, 다음 테이블에는 Snowflake Cortex COMPLETE가 제공하는 모델뿐 아니라 다른 몇 가지 인기 모델을 포함하여 다양한 벤치마크에서 인기 모델이 보이는 성능에 대한 정보가 나와 있습니다.

모델

컨텍스트 윈도우
(토큰)
MMLU
(추론)
MT-Bench
(명령 추종)
HumanEval
(코딩)
Spider 1.0
(SQL)

GPT 4 Turbo *

32,000

86.4

8.96

67

86.6

mistral-large

32,000

81.2

-

45.1

81

Claude 2 *

100,000

78.5

8.06

71.2

-

mixtral-8x7b

32,000

70.6

8.30

40.2

-

GPT 3.5 Turbo *

4,097

70

8.39

48.1

-

llama-2-70b-chat

4,096

68.9

6.86

30.5

-

mistral-7b

32,000

62.5

6.84

26.2

-

gemma-7b

8,000

64.3

-

32.3

-

llama2-7b *

4,096

45.3

6.27

12.2

-

*비교를 위해 제공되지만 Snowflake Cortex COMPLETE에서는 사용할 수 없습니다.

LLM 함수 개요

COMPLETE

프롬프트가 나타나면 명령을 따르는 COMPLETE 함수는 선택한 언어 모델을 사용하여 응답을 생성합니다. 가장 간단한 사용 사례에서 프롬프트는 단일 문자열입니다. 또한 대화형 채팅 스타일 사용을 위한 여러 프롬프트와 응답을 포함하는 대화를 제공할 수도 있으며, 이 함수 형식에서는 하이퍼 매개 변수 옵션을 지정하여 출력의 스타일과 크기를 사용자 지정할 수도 있습니다.

COMPLETE 함수는 다음 모델을 지원합니다. 모델마다 비용할당량 이 다를 수 있습니다.

  • mistral-large

  • mixtral-8x7b

  • llama2-70b-chat

  • mistral-7b

  • gemma-7b

구문과 예는 COMPLETE (SNOWFLAKE.CORTEX) 섹션을 참조하십시오.

EXTRACT_ANSWER

EXTRACT_ANSWER 함수는 텍스트 문서에서 주어진 질문에 대한 답변을 추출합니다. 문서는 일반 영어 문서이거나 반정형(JSON) 데이터 오브젝트의 문자열 표현일 수 있습니다.

구문과 예는 EXTRACT_ANSWER (SNOWFLAKE.CORTEX) 섹션을 참조하십시오.

SENTIMENT

SENTIMENT 함수는 주어진 영어 입력 텍스트에 대해 -1에서 1 사이의 점수로 감정을 반환합니다(중립적인 감정을 나타내는 값인 0을 중심으로 -1은 가장 부정적인 감정, 1은 가장 긍정적인 감정을 나타냄).

구문과 예는 SENTIMENT (SNOWFLAKE.CORTEX) 섹션을 참조하십시오.

SUMMARIZE

SUMMARIZE 함수는 주어진 영어 텍스트의 요약을 반환합니다.

구문과 예는 SUMMARIZE (SNOWFLAKE.CORTEX) 섹션을 참조하십시오.

TRANSLATE

TRANSLATE 함수는 표시되거나 감지된 원본 언어의 텍스트를 대상 언어로 번역합니다.

구문과 예는 TRANSLATE (SNOWFLAKE.CORTEX) 섹션을 참조하십시오.

오류 조건

Snowflake Cortex LLM 함수는 다음과 같은 오류 메시지를 생성할 수 있습니다.

메시지

설명

too many requests

과도한 시스템 부하로 인해 요청이 거부되었습니다. 요청을 다시 시도해 주십시오.

invalid options object

함수에 전달된 options 오브젝트에 유효하지 않은 옵션이나 값이 포함되어 있습니다.

budget exceeded

모델 소비 예산이 초과되었습니다.

unknown model "<model name>"

지정한 모델이 존재하지 않습니다.

invalid language "<언어>"

지정된 언어는 TRANSLATE 함수에서 지원되지 않습니다.

max tokens of <count> exceeded

요청이 모델에서 지원하는 최대 토큰 수를 초과했습니다(모델 제한 사항 참조).

all requests were throttled by remote service

요청 수가 limit 를 초과합니다. 나중에 다시 시도하십시오.

Python에서 Snowflake Cortex LLM 함수 사용하기

Snowflake Cortex LLM 함수는 Snowpark ML 버전1.1.2 이상에서 사용할 수 있습니다. Snowpark ML 설정에 대한 지침은 Snowpark ML 설치하기 섹션을 참조하십시오.

Snowflake 외부에서 Python 스크립트를 실행하는 경우 이러한 함수를 사용하려면 Snowpark 세션을 생성해야 합니다. 지침을 Snowflake에 연결하기 섹션을 참조하십시오.

다음 Python 예제에서는 단일 값에 대해 Snowflake Cortex LLM 함수를 호출하는 방법을 보여줍니다.

from snowflake.cortex import Complete, ExtractAnswer, Sentiment, Summarize, Translate

text = """
    The Snowflake company was co-founded by Thierry Cruanes, Marcin Zukowski,
    and Benoit Dageville in 2012 and is headquartered in Bozeman, Montana.
"""

print(Complete("llama2-70b-chat", "how do snowflakes get their unique patterns?"))
print(ExtractAnswer(text, "When was snowflake founded?"))
print(Sentiment("I really enjoyed this restaurant. Fantastic service!"))
print(Summarize(text))
print(Translate(text, "en", "fr"))
Copy

아래와 같이 테이블 열에서 LLM 함수를 호출할 수도 있습니다. 이 예에서는 세션 오브젝트(session 에 저장됨)와 텍스트 열 abstract_text 가 포함된 테이블 articles 가 필요하며 추상 요약이 포함된 새 열 abstract_summary 를 생성합니다.

from snowflake.cortex import Summarize
from snowflake.snowpark.functions import col

article_df = session.table("articles")
article_df = article_df.withColumn(
    "abstract_summary",
    Summarize(col("abstract_text"))
)
article_df.collect()
Copy

참고

COMPLETE의 고급 채팅 스타일(다중 메시지) 형식은 현재 Python에서 지원되지 않습니다.