GitLab Duo 자체 호스팅 모델 문제 해결

GitLab Duo 자체 호스팅 모델을 사용할 때 문제가 발생할 수 있습니다.

문제 해결을 시작하기 전에, 다음을 확인해야 합니다:

  • gitlab-rails 콘솔에 접근할 수 있어야 합니다.
  • AI Gateway Docker 이미지에서 셸을 열어야 합니다.
  • 다음의 엔드포인트를 알아야 합니다:
    • AI Gateway가 호스팅되는 위치.
    • 모델이 호스팅되는 위치.
  • gitlab-rails 콘솔에서 expanded_ai_logging 기능 플래그를 활성화합니다:

    Feature.enable(:expanded_ai_logging)
    

    이제 GitLab에서 AI Gateway로의 요청 및 응답이 llm.log에 로그로 기록됩니다.

디버깅 스크립트 사용

우리는 관리자가 자체 호스팅 모델 구성을 확인하는 데 도움이 되는 두 가지 디버깅 스크립트를 제공합니다.

  1. GitLab에서 AI Gateway 연결을 디버그합니다. GitLab 인스턴스에서 Rake 작업을 실행합니다:

    gitlab-rake gitlab:duo:verify_self_hosted_setup
    
  2. AI Gateway 설정을 디버그합니다. AI Gateway 컨테이너에서 다음을 실행합니다:

    docker exec -it <ai-gateway-container> sh
    poetry run python scripts/troubleshoot_selfhosted_installation.py --model-name "codegemma_7b" --model-endpoint
    "http://localhost:4000"
    

명령 결과를 확인하고, 적절하게 수정하십시오.

두 명령이 모두 성공했지만 GitLab Duo Code Suggestions가 여전히 작동하지 않는 경우, 문제 추적기에 문제를 제기하십시오.

GitLab이 모델에 요청을 보낼 수 있는지 확인

GitLab Rails 콘솔에서 다음을 실행하여 GitLab이 모델에 요청을 보낼 수 있는지 확인합니다:

model_name = "<your_model_name>"
model_endpoint = "<your_model_endpoint>"
model_api_key = "<your_model_api_key>"
body = {:prompt_components=>[{:type=>"prompt", :metadata=>{:source=>"GitLab EE", :version=>"17.3.0"}, :payload=>{:content=>[{:role=>:user, :content=>"Hello"}], :provider=>:litellm, :model=>model_name, :model_endpoint=>model_endpoint, :model_api_key=>model_api_key}}]}
ai_gateway_url = Gitlab::AiGateway.url # nil이 아닌지 확인
client = Gitlab::Llm::AiGateway::Client.new(User.find_by_id(1), service_name: :self_hosted_models)
client.complete(url: "#{ai_gateway_url}/v1/chat/agent", body: body)

이것은 다음 형식의 모델 응답을 반환해야 합니다:

{"response"=> "<모델 응답>",
 "metadata"=>
  {"provider"=>"litellm",
   "model"=>"<>",
   "timestamp"=>1723448920}}

그렇지 않은 경우, 다음 중 하나를 의미할 수 있습니다:

사용자가 코드 제안을 요청할 수 있는지 확인

GitLab Rails 콘솔에서 사용자가 코드 제안을 요청할 수 있는지 확인하려면 다음을 실행하세요:

User.find_by_id("<user_id>").can?(:access_code_suggestions)

이 결과가 false인 경우, 일부 구성 요소가 누락되어 있으며 사용자가 코드 제안에 접근할 수 없음을 의미합니다.

이 누락된 구성 요소는 다음 중 하나일 수 있습니다:

GitLab 인스턴스가 자가 호스팅 모델을 사용하도록 구성되었는지 확인

GitLab Duo가 올바르게 구성되었는지 확인하려면:

  1. 왼쪽 사이드바에서 맨 아래에 있는 Admin을 선택합니다.
  2. Settings > General을 선택합니다.
  3. AI-powered features를 확장합니다.
  4. Features 아래에서 Code SuggestionsCode generationSelf-hosted model로 설정되어 있는지 확인합니다.

GitLab 환경 변수가 올바르게 설정되었는지 확인

GitLab 환경 변수가 올바르게 설정되었는지 확인하려면, GitLab Rails 콘솔에서 다음을 실행하세요:

ENV["AI_GATEWAY_URL"] == "<your-ai-gateway-endpoint>"

환경 변수가 올바르게 설정되지 않은 경우, Linux 패키지 사용자 지정 환경 변수 설정 문서를 따라서 설정하세요.

GitLab이 AI Gateway에 HTTP 요청을 할 수 있는지 확인

GitLab Rails 콘솔에서 다음을 실행하여 GitLab이 AI Gateway에 HTTP 요청을 할 수 있는지 확인하세요:

HTTParty.get('<your-aigateway-endpoint>/monitoring/healthz', headers: { 'accept' => 'application/json' }).code

응답이 200이 아닌 경우, 다음 중 하나임을 의미합니다:

  • 네트워크가 GitLab이 AI Gateway 컨테이너에 접근할 수 있도록 제대로 구성되어 있지 않습니다. 네트워크 관리자에게 설정을 확인하도록 문의하세요.
  • AI Gateway가 요청을 처리할 수 없습니다. 이 문제를 해결하려면, AI Gateway가 모델에 요청을 할 수 있는지 확인하세요.

AI Gateway가 모델에 요청을 할 수 있는지 확인

AI Gateway 컨테이너에서 코드 제안을 위한 AI Gateway API에 HTTP 요청을 하세요. 다음을 교체하세요:

  • <your_model_name>을 사용 중인 모델의 이름으로 변경합니다. 예: mistral 또는 codegemma.
  • <your_model_endpoint>를 모델이 호스팅되는 엔드포인트로 변경합니다.
docker exec -it <ai-gateway-container> sh
curl --request POST "http://localhost:5052/v1/chat/agent" \
     --header 'accept: application/json' \
     --header 'Content-Type: application/json' \
     --data '{ "prompt_components": [ { "type": "string", "metadata": { "source": "string", "version": "string" }, "payload": { "content": "Hello", "provider": "litellm", "model": "<your_model_name>", "model_endpoint": "<your_model_endpoint>" } } ], "stream": false }'

요청이 실패하는 경우:

AI Gateway가 요청을 처리할 수 있는지 확인

docker exec -it <ai-gateway-container> sh
curl '<your-aigateway-endpoint>/monitoring/healthz'

응답이 200이 아닌 경우, AI Gateway가 올바르게 설치되지 않았음을 의미합니다. 이를 해결하려면 AI Gateway 설치 문서를 따라 주십시오.

AI Gateway 환경 변수가 올바르게 설정되었는지 확인

AI Gateway 환경 변수가 올바르게 설정되었는지 확인하려면 AI Gateway 컨테이너에서 콘솔을 열고 다음을 실행하십시오:

docker exec -it <ai-gateway-container> sh
echo $AIGW_AUTH__BYPASS_EXTERNAL # 반드시 true 여야 함
echo $AIGW_CUSTOM_MODELS__ENABLED # 반드시 true 여야 함

환경 변수가 올바르게 설정되지 않은 경우, 컨테이너를 생성하여 설정하십시오.

AI Gateway에서 모델에 접근할 수 있는지 확인

AI Gateway 컨테이너에서 셸을 생성하고 모델에 curl 요청을 하십시오.

AI Gateway가 해당 요청을 할 수 없는 경우, 이는 다음과 같은 원인일 수 있습니다:

  1. 모델 서버가 제대로 작동하지 않음.
  2. 모델이 호스팅되는 곳에 대한 요청을 허용하도록 컨테이너 주변의 네트워크 설정이 올바르게 구성되지 않음.

이를 해결하려면 네트워크 관리자에게 문의하십시오.

이미지의 플랫폼이 호스트와 일치하지 않음

AI Gateway 릴리스를 찾는 동안 The requested image’s platform (linux/amd64) does not match the detected host라는 오류가 발생할 수 있습니다.

이 오류를 우회하려면 docker run 명령에 --platform linux/amd64를 추가하십시오:

docker run --platform linux/amd64 -e AIGW_GITLAB_URL=<your-gitlab-endpoint> <image>

AI Gateway 컨테이너에서 LLM 서버를 사용할 수 없음

LLM 서버가 AI Gateway 컨테이너와 같은 인스턴스에 설치된 경우, 로컬 호스트를 통해 접근할 수 없을 수 있습니다.

이를 해결하려면:

  1. AI Gateway 컨테이너에서 로컬 요청을 활성화하려면 docker run 명령에 --network host를 포함하십시오.
  2. 포트 충돌을 해결하기 위해 -e AIGW_FASTAPI__METRICS_PORT=8083 플래그를 사용하십시오.
docker run --network host -e AIGW_GITLAB_URL=<your-gitlab-endpoint> -e AIGW_FASTAPI__METRICS_PORT=8083 <image>