Databricks는 지난해 Databricks Apps를 소개하여, 사용자가 Databricks 플랫폼에서 직접 애플리케이션을 생성하고 배포할 수 있게 하는 도구 모음을 완성했습니다. Databricks 앱을 사용하면 개발자들은 데이터와 AI 애플리케이션을 더 빠르고, 더 안전하게, 그리고 Databricks Data Intelligence Platform과의 원활한 통합으로 구축하고 실행할 수 있습니다. 인기 있는 프레임워크, 서버리스 배포, 내장된 거버넌스를 지원하는 Databricks Apps는 영향력 있는 AI 솔루션의 개발을 단순화하고 가속화하도록 설계되었습니다.
이 가이드에서는 GenAI와 Unity Catalog의 힘을 활용하여 비즈니스를 변화시킬 수 있는 맞춤형 AI 애플리케이션을 구축하고 배포하는 방법을 보여드리겠습니다. Hugging Face 모델, Unity 카탈로그, 모델 서빙, 그리고 Databricks 앱을 사용하여 고급 웹 앱 개발 경험이 없어도 제작 및 배포 가능한 GenAI 애플리케이션을 만드는 방법을 안내하겠습니다. 이 튜토리얼을 마치면 Unity 카탈로그의 데이터 잠재력을 활용하고, 복잡한 AI 모델을 생산성과 혁신을 촉진하는 실용적인 비즈니스용 애플리케이션으로 전환하는 방법을 배울 수 있습니다.
예를 들어, 우리는 사진과 텍스트 프롬프트라는 두 가지 입력을 결합하는 GenAI 애플리케이션을 만들었습니다. 생성적 AI의 힘을 활용하여, 애플리케이션은 프롬프트에 따라 원본 이미지를 변형하여 독특하고 맞춤화된 시각적 출력을 생성했습니다.
아래 섹션에서는 단계별로 과정을 안내하겠습니다:
참고: Databricks Apps는 현재 Public Preview 단계에 있으며 아직 귀하의 지역에서 사용할 수 없을 수 있습니다. 사용 가능 여부는 여기에서 확인하세요.
Databricks에서, 볼륨은 Unity 카탈로그 객체로서 파일, 이미지, 문서와 같은 비테이블 데이터에 대한 관리된 저장소를 제공합니다. 이것은 조직이 중앙 집중식 거버넌스와 통제를 유지하면서 다양한 유형의 데이터를 안전하게 저장, 접근, 공유할 수 있게 해줍니다.
예시를 위해, 우리는 Hugging Face에서 이미지를 다운로드하고 이미지를 조작하기 때문에 Databricks 볼륨에 저장할 것입니다:
예시 이미지는 아래와 같습니다:
먼저, 프롬프트와 입력 이미지를 기반으로 이미지를 생성할 수 있는 HuggingFace의 모델을 선택해야 합니다. Kandinsky 2-2 디코더 모델을 선택해봅시다 (https://huggingface.co/docs/diffusers/en/using-diffusers/img2img#image-to-image).
다음으로, MLflow를 사용하여 우리의 모델을 Unity 카탈로그에 등록할 수 있습니다. 우리는 사용자 정의 클래스를 생성하는 데 MLflow pyfunc 플레이버를 사용할 것입니다. 이 클래스는 우리의 모델 래퍼로 사용될 것입니다:
우리는 이미지를 인코딩하고 디코딩하는 두 가지 함수 (image_to_base64 와 base64_to_image)를 클 래스에 추가했습니다. 이것은 우리가 배포된 모델에 입력을 제출하기 위해 PIL 이미지를 JSON 으로 파싱할 수 없기 때문에 필요합니다.
클래스를 준비한 후, 우리는 모델을 Unity Catalog에 로그하고 등록할 것입니다. 모델은 매개변수, 프롬프트, 이미지를 포함하는 DataFrame을 입력으로 예상합니다. 우리는 이전에 업로드한 사진을 사용하여 볼륨에 입력 예제를 만들었습니다.
우리의 모델을 Unity 카탈로그에 등록한 후, 이제 Model Serving을 통한 중요한 배포 단계를 다룰 준비가 되었습니다. 다음 섹션에서는 모델을 실시간 예측 요청을 처리할 수 있는 생산 준비 서비스로 변환하는 방법을 안내합니다.
Databricks의 Model Serving은 머신러닝 모델을 REST API로 배포할 수 있게 해주는 완전히 관리되는 서비스입니다. 이를 통해 기본 인프라나 스케일링에 대해 걱정하지 않고 실시간 예측을 쉽게 이용할 수 있습니다. 더 자세한 정보를 원하신다면, 이 링크에서 사용 가능한 자료를 참조해주세요.
Unity 카탈로그에 등록된 모델을 모델 서빙을 통해 배포합니다:
모델 서빙 엔드포인트의 구축 과정이 시작됩니다. 일단 실행되면, 우리는 "Model Serving" 섹션으로 이동하고 엔드포인 트를 클릭하여 연결 세부 정보를 얻을 수 있습니다.
다음으로, 우리는 Databricks Apps를 생성하기 시작할 수 있습니다.
Databricks Apps는 웹 애플리케이션의 생성 및 배포를 단순화하기 위해 설계된 새로운 기능입니다(문서 여기 참조). Databricks 앱을 사용하면, 실무자들이 별도의 인프라를 관리할 필요 없이 Databricks에 이미 존재하는 데이터, 모델, 그리고 거버넌스를 활용하여 애플리케이션을 구축할 수 있습니다. Databricks 앱은 유연성을 제공하여, Dash, Shiny, Gradio, Streamlit, 또는 Flask와 같은 선택한 프레임워크로 앱 프론트 엔드를 구축할 수 있습니다.
이 페이지를 기반으로 Databricks 플랫폼에서 앱을 생성하기 시작하려면:
다음으로, 앱 환경을 설정합니다:
이제 설정을 완료했으므로, 우리의 WebApp에 대한 코드를 작성하는 것을 계속 진행하겠습니다.
애플리케이션의 핵심 구성 요소를 살펴봅시다:
다음 코드는 함수 query_image_from_volume()를 정의하며, 이 함수는 Databricks 볼륨에서 이미지 파일을 검색합니다. 이 함수는 Databricks SDK 를 사용하여 인증하고 이미지 파일을 다운로드한 후, PIL(Python Imaging Library)을 사용하여 이를 열고 RGB 형식으로 변환합니다. 함수는 인증을 위한 비밀 토큰을 포함한 필요한 환경 변수를 설정한 후 이미지를 가져와 처리합니다.
아래에서는 이미지 생성을 위해 우리의 모델 엔드포인트(이전에 Model Serving으로 배포)에 요청을 준비하고 보내는 함수 query_model_endpoint를 정의합니다. 입력 이미지를 받아서 base64로 변환하고(왜냐하면 PIL 이미지는 JSON으로 직접 직렬화할 수 없기 때문에), 이미지와 프롬프트를 포함한 다양한 매개변수로 DataFrame을 구성하고, 이 데이터를 JSON 페이로드로 모델 엔드포인트 URL에 전송합니다. 마지막으로, 반환된 base64 이미지 데이터를 RGB 이미지 객체로 변환하여 우리의 앱에서 결과를 시각화할 수 있도록 응답을 처리합니다.
모델의 URL은 배포된 모델을 클릭하여 모델 서빙 UI에서 찾을 수 있습니다.
이 섹션에서는 사용자 입력에 기반한 이미지를 변형하는 우리의 GenAI 앱을 위한 Gradio 인터페이스를 생성합니다. 로고, 제목, 캐릭터 설명을 위한 입력 텍스트 상자, 그리고 변환 전후의 이미지 디스플레이(두 개), 그리고 변환을 실행하고 입력을 지우는 버튼이 있는 레이아웃을 설정합니다. 인터페이스는 사용자 입력을 이전에 정의한 query_model_endpoint 함수에 연결하고, 이 함수는 입력을 처리하고 결과를 생성하여 "After" 이미지 컴포넌트에 표시됩니다.
웹앱에 사진이나 로그를 추가하려면, 같은 디렉토리 내에 사진을 저장할 수 있는 다른 폴더(우리의 코드에서는 "static"라고 불립니다)를 만들 수 있습니다(여기에서는 static/DatabricksLogo_full3.png와 같이 했습니다).
이 코드 스니펫은 일반적으로 Gradio 애플리케이션 스크립트의 끝에서 사용됩니다. 스크립트가 직접 실행되는지 (모듈로서 가져오지 않음) 확인하기 위해 if __name__ == "__main__": 조건을 사용합니다. 참이라면, 데모 객체에서 정의된 Gradio 인터페이스를 실행합니다. 애플리케이션은 처음에 로컬 호스트에서 배포됩니다. 공개 URL을 통해 접근 가능하게 하려면, launch()에 share=True 를 추가해야 합니다.
Databricks 앱이 개발되어 배포 준비가 되었으므로, 우리는 GenAI 모델에 대한 강력하고 상호 작용적인 인터페이스를 성공적으로 만들었습니다. 그러나 그 잠재력을 발휘하기 전에, 중요한 앱 관리 측면인 권한을 처리해야 합니다.
다음 섹션에서는 Databricks 앱 뒤의 서비스 주체에게 필요한 권한을 부여하는 방법을 살펴보겠습니다. 이를 통해 안전하고 효과적으로 기능을 수행할 수 있는 적절한 접근 권한을 보장합니다.
서비스 주체의 이름은 앱 UI의 앱 리소스 섹션에서 찾을 수 있습니다. 일단 확인되면, 다음 권한을 서비스 주체에게 부여하십시오:
웹앱을 배포하려면 웹앱 UI로 이동하고 배포를 클릭하세요. 그런 다음, main.py가 위치한 폴더를 선택합니다. 이렇게 하면 코드가 고립된 컨테이너에 배포됩니다. 애플리케이션의 초기 배포는 몇 분이 걸릴 수 있습니다. 프로세스가 완료되고 상태 표시기가 "실행 중"을 표시하면, 애플리케이션은 완전히 배포되고 운영 가능한 상태입니다.
성공적인 배포 후, Kandinsky 모델을 활용하는 웹 애플리케이션 내에서 완전히 기능하는 대화형 사용자 인터페이스에 액세스할 수 있습니다. 애플리케이션을 시작하려면:
여기에 우리의 Databricks 앱에서의 예제 결과가 있습니다:
보여드린 것처럼, 단계는 명확하고 간단합니다. 대부분의 작업은 Databricks Intelligence Platform 내에서 이루어지며, 복잡성과 개발 시간을 크게 줄입니다. 이 접근 방식을 통해 전 통적인 인프라 관리의 장애물 없이 모델을 빠르고 간단하게 서버리스 웹 애플리케이션에 배포할 수 있습니다.
우리는 이 여정을 마무리하면서 이 도움이 되는 튜토리얼을 찾았기를 바랍니다. 이러한 기능을 더욱 탐색하고 AI 이니셔티브를 어떻게 가속화할 수 있는지 확인하도록 권장합니다. 이 블로그의 도움으로, 모델을 미세 조정하여 앱을 더욱 개인화하고 특정 요구 사항을 충족시킬 수 있습니다. 이런 커스터마이징은 귀사의 요구에 완벽하게 맞춤화된 AI 솔루션을 만들 수 있게 해주며, 이는 비즈니스 프로세스를 혁신하고 혁신을 촉진할 수 있습니다.
여러분이 만들어낼 훌륭한 GenAI 웹 앱을 기대하며, 여러분의 GenAI 웹 앱 구축에 성공을 기원합니다!
(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)