메인 콘텐츠로 건너뛰기
Open In Colab
별도 설정 없이 Weave에서 Groq 모델을 실험해 보고 싶나요? LLM Playground를 사용해 보세요.
Groq는 빠른 AI 추론을 제공하는 AI 인프라 기업입니다. Groq의 LPU™ Inference Engine은 뛰어난 연산 속도, 품질, 에너지 효율을 제공하는 하드웨어 및 소프트웨어 플랫폼입니다. Weave는 Groq chat completion 호출을 자동으로 추적하고 로그로 남깁니다.

트레이싱

개발 중이든 프로덕션 환경이든, 언어 모델 애플리케이션의 트레이스를 중앙화된 위치에 저장하는 것은 중요합니다. 이러한 트레이스는 디버깅뿐 아니라 애플리케이션을 개선하는 데 도움이 되는 데이터셋으로도 활용할 수 있습니다. Weave는 Groq에 대한 트레이스를 자동으로 캡처합니다. 추적을 시작하려면 weave.init(project_name="<YOUR-WANDB-PROJECT-NAME>")를 호출한 다음, 평소처럼 라이브러리를 사용하면 됩니다.
import os
import weave
from groq import Groq

weave.init(project_name="groq-project")

client = Groq(
    api_key=os.environ.get("GROQ_API_KEY"),
)
chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Explain the importance of fast language models",
        }
    ],
    model="llama3-8b-8192",
)
추적된 LLM 호출, 성능 메트릭, 트레이스 정보를 보여주는 Groq Weave 대시보드
이제 Weave가 Groq 라이브러리를 통해 수행되는 모든 LLM 호출을 추적하고 로그로 남깁니다. Weave 웹 인터페이스에서 트레이스를 확인할 수 있습니다.

나만의 op 추적하기

함수를 @weave.op으로 감싸면 입력, 출력, 그리고 애플리케이션 로직을 캡처하기 시작하여 데이터가 애플리케이션 내부에서 어떻게 흐르는지 디버깅할 수 있습니다. op를 깊게 중첩해서 추적하고 싶은 함수들의 트리를 만들 수 있습니다. 또한 실험을 진행하는 동안 git에 커밋되지 않은 애드혹(ad-hoc) 세부 정보까지 캡처할 수 있도록 코드를 자동으로 버전 관리하기 시작합니다. @weave.op으로 데코레이트된 함수를 하나 만들기만 하면 됩니다. 아래 예제에서는 recommend_places_to_visit 함수가 @weave.op으로 감싸진 함수로, 도시에서 방문할 만한 장소를 추천합니다.
import os
import weave
from groq import Groq


weave.init(project_name="groq-test")

client = Groq(
    api_key=os.environ.get("GROQ_API_KEY"),
)

@weave.op()
def recommend_places_to_visit(city: str, model: str="llama3-8b-8192"):
    chat_completion = client.chat.completions.create(
        messages=[
            {
                "role": "system",
                "content": "You are a helpful assistant meant to suggest places to visit in a city",
            },
            {
                "role": "user",
                "content": city,
            }
        ],
        model="llama3-8b-8192",
    )
    return chat_completion.choices[0].message.content


recommend_places_to_visit("New York")
recommend_places_to_visit("Paris")
recommend_places_to_visit("Kolkata")
Groq Weave 트레이싱 인터페이스로, op 데코레이션, 함수 호출 계층 구조, 트레이스 세부 정보를 보여줌
recommend_places_to_visit 함수를 @weave.op으로 데코레이션하면, 함수의 입력, 출력, 그리고 함수 내부에서 이루어지는 모든 LM 호출이 추적됩니다.

더 쉽게 실험하기 위한 Model 생성

많은 요소가 얽혀 있을 때 실험을 체계적으로 정리하는 것은 어렵습니다. Model 클래스를 사용하면 시스템 프롬프트나 사용 중인 모델처럼 앱의 실험 관련 세부 정보를 캡처하고 정리할 수 있습니다. 이렇게 하면 앱의 다양한 반복 버전을 체계적으로 관리하고 서로 비교하기가 쉬워집니다. 코드 버저닝 및 입력/출력 캡처뿐 아니라, Model은 애플리케이션 동작을 제어하는 구조화된 파라미터도 캡처하여 어떤 파라미터 구성이 가장 잘 동작했는지 쉽게 찾을 수 있게 해줍니다. 또한 Weave Models를 serveEvaluation과 함께 사용할 수도 있습니다. 아래 예시에서는 GroqCityVisitRecommender로 실험할 수 있습니다. 이들 중 하나를 변경할 때마다 GroqCityVisitRecommender의 새로운 버전이 생성됩니다.
import os
from groq import Groq
import weave


class GroqCityVisitRecommender(weave.Model):
    model: str
    groq_client: Groq

    @weave.op()
    def predict(self, city: str) -> str:
        system_message = {
            "role": "system",
            "content": """
You are a helpful assistant meant to suggest places to visit in a city
""",
        }
        user_message = {"role": "user", "content": city}
        chat_completion = self.groq_client.chat.completions.create(
            messages=[system_message, user_message],
            model=self.model,
        )
        return chat_completion.choices[0].message.content


weave.init(project_name="groq-test")
city_recommender = GroqCityVisitRecommender(
    model="llama3-8b-8192", groq_client=Groq(api_key=os.environ.get("GROQ_API_KEY"))
)
print(city_recommender.predict("New York"))
print(city_recommender.predict("San Francisco"))
print(city_recommender.predict("Los Angeles"))
모델 버전, 트레이스 내역, 성능 메트릭을 포함한 Groq Weave Model 트레이싱 및 버저닝 인터페이스
Model을 사용해 호출을 트레이싱하고 버전 관리하기

Weave 모델 서빙하기

weave.Model 객체에 대한 weave reference가 있으면 FastAPI 서버를 실행해 이를 서빙할 수 있습니다.
dspy_weave_model_serve.png
모델 페이지로 이동한 다음 UI에서 복사하면, 어떤 WeaveModel이든 해당 weave reference를 확인할 수 있습니다.
터미널에서 다음 명령어를 사용해 모델을 서빙할 수 있습니다:
weave serve weave://your_entity/project-name/YourModel:<hash>