728x90

pod는 동일한 호스트에 배치된 하나 이상의 컨테이너로 구성되며, 네트워크 스택 및 볼륨과 같은 리소스를 공유하도록 구성된다

“네트워크 스택 공유”는 pod의 모든 컨테이너가 localhost를 통해 서로 연결될 수 있음을 의미한다

네트워크 네임스페이스

  • Host Network Namespace:
    • eth0 (Host NIC): 호스트 시스템의 물리적 네트워크 인터페이스로, 외부 네트워크와 통신함
    • kube-proxy:
      • Kubernetes 컴포넌트로, 클러스터 내의 네트워크 프록시 역할을 수행함
      • iptables 또는 IPVS를 사용하여 클러스터 내의 서비스 트래픽을 적절한 Pod로 라우팅함
    • cni0 (bridge): 호스트 네트워크 네임스페이스에서 사용하는 가상 브리지로, 쿠버네티스 CNI (Container Network Interface) 플러그인에 의해 생성됨. 여러 포드 네트워크 네임스페이스를 연결하는 역할을 함
    • veth0 (veth): 호스트 네트워크 네임스페이스와 포드 네트워크 네임스페이스를 연결하는 가상 이더넷 인터페이스 페어의 한 쪽 끝으로, 호스트 네트워크 네임스페이스의 cni0 브리지와 연결됨
  • Pod Network Namespace
    • eth0 (veth) : 포드 내 모든 컨테이너는 동일한 네트워크 네임스페이스를 공유하며, 이 네트워크 네임스페이스 내에서 eth0 인터페이스를 사용하여 통신함
    • pause 컨테이너: 포드 네트워크 네임스페이스를 설정하고 유지하며, 이 네트워크 네임스페이스를 다른 컨테이너들과 공유함
    • container1, container2, container3: 사용자 컨테이너들이며, 모두 pause 컨테이너가 설정한 네트워크 네임스페이스를 공유함

네트워크 연결 과정

  1. pod가 생성되고 함께 PAUSE 컨테이너가 생성될 때, PAUSE 컨테이너에 네트워크 인터페이스(eth0)가 생성됨
  2. pod가 생성되는 Node의 host network namespace에도 가상의 인터페이스(veth0)가 하나 생성되며, PAUSE 컨테이너와 직접 연결됨
  3. 이후 PAUSE 컨테이너는 해당 인터페이스에 새로운 IP주소도 자동으로 할당받아 갖게 됨
  4. k8s는 PAUSE 컨테이너가 가진 네트워크 인터페이스를 pod 내 모든 컨테이너가 사용할 수 있도록 구성함
  5. pod 내 모든 컨테이너는 PAUSE 컨테이너를 통해 동일한 IP를 사용하게 되며, 포트를 통해 컨테이너를 구분하게 됨
728x90
728x90

일반 도커 컨테이너 네트워킹

이 구조는 Docker 컨테이너가 서로 독립적으로 실행되면서도 네트워크 통신이 가능하게 하여, 유연한 애플리케이션 배포와 스케일링을 지원함

네트워크 네임스페이스

  • 호스트 네트워크 네임스페이스
    • 호스트 네트워크 네임스페이스는 기본적으로 호스트 운영체제에서 사용하는 네트워크 스택을 의미
    • 모든 호스트의 네트워크 설정 및 트래픽은 이 네임스페이스를 통해 관리됨
    • 이 네임스페이스는 물리적 네트워크 인터페이스(eth0)와 가상 브리지 네트워크(docker0)를 포함
      • eth0 이란?
        • 호스트 머신이 외부 네트워크와 통신할 수 있게 해줌
        • 운영 체제는 여러 개의 NIC를 가질 수 있으며, 이를 구분하기 위해 각각의 인터페이스에 eth0, eth1 등의 이름을 부여함
        • eth0는 물리적인 첫 번째 네트워크 인터페이스 카드(NIC)와 연결되어 있음
        • 이 NIC는 네트워크 케이블을 통해 다른 네트워크 장치(예: 스위치, 라우터)와 물리적으로 연결됨
        • 운영 체제는 eth0를 통해 네트워크 설정을 관리하고, 네트워크를 통한 데이터 송수신을 제어함 (eth1도 마찬가지)
        • 네트워크 데이터를 주고받을 때, 운영 체제는 eth0 인터페이스를 통해 데이터를 NIC로 전달함
        • NIC는 데이터를 전기 신호로 변환하여 네트워크 케이블을 통해 전송하고, 반대로 수신된 전기 신호를 데이터로 변환하여 운영 체제에 전달함
      • docker0 이란?이는 호스트 네임스페이스에 존재하며, 여러 컨테이너를 연결하는 가상 네트워크 스위치 역할을 함또한 eth0 (Host NIC)와 연결되어 있어 컨테이너가 외부 네트워크와도 통신할 수 있게 해줌
      • 컨테이너는 이 브리지 네트워크를 통해 서로 통신할 수 있음
      • 도커는 기본적으로 docker0라는 브리지 네트워크를 생성함
  • 컨테이너 네트워크 네임스페이스
    • 컨테이너 네트워크 네임스페이스는 각 컨테이너가 독립된 네트워크 스택을 가지도록 하는 네임스페이스
    • 각 컨테이너는 자체 네트워크 인터페이스(eth0), 독립된 라우팅 테이블, 포트 등의 네트워크 리소스를 가짐

네트워크 연결 과정

  • 컨테이너 생성 시 네트워크 네임스페이스 할당
    • 도커는 새로운 컨테이너를 생성할 때, 컨테이너가 독립된 네트워크 환경을 가질 수 있도록 해당 컨테이너를 위한 별도의 네트워크 네임스페이스를 생성함
  • 가상 이더넷 페어 (veth pair) 생성
    • 도커는 호스트 네임스페이스와 컨테이너 네임스페이스를 연결하는 가상 이더넷 페어(veth pair)를 생성함
    • 이 페어는 두 개의 인터페이스로 구성되며, 하나는 호스트 네임스페이스에, 다른 하나는 컨테이너 네임스페이스에 위치함
    • 이 쌍은 서로 연결되어 있어, 컨테이너가 브리지 네트워크와 통신할 수 있게 함
  • 브리지 네트워크에 연결
    • 호스트 네임스페이스에 위치한 veth 인터페이스는 docker0 브리지 네트워크에 연결됨
    • 컨테이너 네임스페이스에 위치한 veth 인터페이스는 컨테이너 내부에서 eth0으로 나타남
  • IP 주소 할당
    • 도커는 각 컨테이너의 eth0 인터페이스에 IP 주소를 할당함. 이 IP 주소는 docker0 브리지 네트워크의 서브넷 내에서 유효함
728x90
728x90

CNI란?

CNI(Container Network Interface)는 컨테이너 네트워킹을 위한 표준 인터페이스를 정의하는 프로젝트

CNI는 컨테이너 네트워크 인터페이스를 쉽게 확장하고 맞춤화할 수 있게 해주며, 다양한 네트워킹 솔루션과 통합 가능함

CNI는 표준일 뿐, 특정 서비스에 적용하기 위해서는 인터페이스를 구체화하여 서비스에 맞춰 적용해야 함

이를 위해 컨테이너 관리 시스템에서 네트워킹 구성 및 관리를 위한 플러그인 기반의 다양한 프레임워크가 있음

kubernetes Network Plugin (CNI plugin)

네트워크 모델은 각 노드의 컨테이너 런타임에 의해 구현됨

가장 일반적인 컨테이너 런타임은 컨테이너 네트워크 인터페이스(CNI) 플러그인을 사용하여 네트워크 및 보안 기능을 관리함

Network Plugin을 사용하는 가장 큰 이유는 기본제공되는 kubenet 만으로는 서로 다른 노드에 있는 pod의 교차 네트워킹을 지원하지 않기 때문

CNI 플러그인을 설치하면, Kubenet은 사용되지 않음

Calico와 Kubenet 비교

  calico kubenet
네트워크 설정 • Calico는 네트워크 설정을 관리하며, 각 파드에 고유한 IP 주소를 할당함
• IP-in-IP, BGP(Border Gateway Protocol) 등을 사용하여 네트워크를 구성하고, 노드 간 트래픽을 라우팅함
◦ Kubenet은 기본적인 네트워크 설정을 제공하며, 각 파드에 고유한 IP 주소를 할당함
◦ 브리지 네트워크(cbr0)와 veth 페어를 사용하여 파드 간 통신을 설정함

네트워크 정책 • Calico는 강력한 네트워크 정책을 지원하여, 파드 간 및 파드와 외부 간의 트래픽을 세밀하게 제어할 수 있음
• 보안 그룹과 네트워크 정책을 통해 트래픽을 허용하거나 차단함
◦ Kubenet은 기본적인 네트워크 정책만 제공하며, 세밀한 트래픽 제어나 고급 보안 기능을 지원하지 않음
네트워크 기능 • Calico는 고급 네트워크 기능을 제공하며, 대규모 클러스터 환경에서도 높은 성능과 확장성을 보장함
• 네트워크 격리, 암호화, 모니터링 등의 기능을 제공함
◦ Kubenet은 간단한 네트워크 설정과 관리가 가능하지만, 대규모 클러스터 환경에서는 확장성과 성능 면에서 제한적임
728x90
728x90

 

Go 언어에서 함수와 메서드는 코드 구조화와 재사용성에 중요한 역할을 함

Go 언어에서 함수와 메서드는 각각의 용도와 목적이 다름

독립 함수는 새로운 인스턴스를 생성하는 데 주로 사용되며, 인스턴스 메서드는 기존 인스턴스를 수정하거나 조작하는 데 사용됨

독립 함수 (Standalone Function)

  • 정의: 특정 구조체에 속하지 않는 독립적인 함수
  • 용도: 주로 새로운 인스턴스를 생성하고 반환하는 역할을 함
package main

import "fmt"

type Config struct {
    Port int
}

type Server struct {
    config Config
}

// 독립 함수: 새로운 Server 인스턴스를 생성하고 반환
func NewServer(config Config) *Server {
    return &Server{
        config: config,
    }
}

func main() {
    config := Config{Port: 8080}
    server := NewServer(config)
    fmt.Println("Server running on port:", server.config.Port)
}

인스턴스 메서드 (Instance Method)

  • 정의: 특정 구조체의 인스턴스로 호출되는 메서드
  • 용도: 주로 기존 인스턴스를 수정하거나, 해당 인스턴스와 관련된 동작을 수행함
package main

import "fmt"

type Config struct {
    Port int
}

type Server struct {
    config Config
}

// 인스턴스 메서드: 기존 Server 인스턴스를 수정하고 반환
func (server *Server) NewServer(config Config) *Server {
    server.config = config
    return server
}

func main() {
    server := &Server{}
    config := Config{Port: 8080}
    server = server.NewServer(config)
    fmt.Println("Server running on port:", server.config.Port)
}

주요 차이점

  • 소속:
    • 독립 함수: 구조체와 독립적으로 정의됨
    • 인스턴스 메서드: 특정 구조체의 리시버를 가짐
  • 역할:
    • 독립 함수: 새로운 인스턴스를 생성
    • 인스턴스 메서드: 기존 인스턴스를 수정하거나 동작 수행
  • 리시버 사용:
    • 독립 함수: 리시버 없음
    • 인스턴스 메서드: 리시버를 통해 호출됨
728x90
728x90

인공지능 기술은 매 순간 빠르게 발전하고 있으며, 그 중심에는 언어 모델의 혁신이 자리잡고 있음

OpenAI의 최신 언어 모델인 ChatGPT-4는 기존의 ChatGPT-3 모델을 개선하여 여러 분야에서 더욱 향상된 성능을 보여주고 있음

이번 포스트에서는 ChatGPT-3와 ChatGPT-4의 주요 차이점을 살펴보고, 각각의 모델이 어떻게 사용자 경험을 변화시키고 있는지 정리함

모델 크기와 학습 데이터

ChatGPT-4는 ChatGPT-3보다 훨씬 큰 모델 크기를 가지고 있음

그리고 더 많은 데이터로 훈련되었기 때문에, 광범위한 지식을 바탕으로 다양한 주제에 대해 더 정확하고 상세한 정보를 제공함

문맥 이해와 일관성

ChatGPT-4는 문맥을 파악하고 유지하는 능력이 탁월함

복잡한 대화 흐름 속에서도 일관된 답변을 제공함으로써 사용자와의 대화가 더 자연스럽고 의미 있는 방향으로 이어질 수 있음

이는 기술적인 지원 또는 긴 설명이 필요한 상황에서 특히 유용함

다양한 언어에 대한 지원

다양한 언어 처리 능력은 ChatGPT-4의 또 다른 강점임

다국어를 더 효과적으로 처리할 수 있어, 영어가 아닌 다른 언어로 대화하는 사용자들에게도 높은 만족도를 제공함

창의적인 작업과 세부 처리

ChatGPT-4는 창의력을 필요로 하는 작업에서 더욱 뛰어난 성능을 발휘함

예를 들어 시나리오 작성, 시 쓰기 등의 창의적인 작업이나 복잡한 기술적 문제 해결에 있어서도 보다 세련되고 정교한 대응이 가능함

오류 인식과 처리

잘못된 정보의 인지와 수정 능력이 강화된 ChatGPT-4는 오류를 더 잘 파악하고 정정할 수 있음

이는 사용자가 더 신뢰할 수 있는 정보를 얻을 수 있게 하며, 오해의 소지가 있는 질문에 대해서는 사용자에게 추가적인 질문을 통해 정확한 답변을 도출해낼 수 있음

728x90

'AI > AI 트렌드' 카테고리의 다른 글

개발 / AI 기술 사이트  (0) 2024.06.19
728x90

프롬프트 엔지니어링(Prompt Engineering)은 인공지능(AI) 및 자연어 처리(NLP) 분야에서 사용자가 원하는 결과를 얻기 위해 모델에 제공하는 입력(prompt)을 설계하는 과정

이 과정은 특히 대형 언어 모델(LLM)에서 중요한 역할을 함

프롬프트란?

프롬프트(prompt)는 인공지능(AI) 및 자연어 처리(NLP) 시스템에서 모델에게 제공되는 입력 데이터를 의미함

모델이 수행할 작업의 맥락을 제공하고 원하는 결과를 얻기 위해 주어지는 명령어 / 질문 / 문장

프롬프트는 대화형 AI, 언어 모델, 챗봇 등 다양한 애플리케이션에서 사용됨

프롬프트 엔지니어링이란?

프롬프트 엔지니어링은 특정한 목표를 달성하기 위해 AI 모델에 주어지는 텍스트 입력을 최적화하는 기술

사용자가 원하는 답변을 얻기 위해 입력 문장을 어떻게 구성할지, 어떤 정보를 포함시킬지 등을 고민하는 과정

왜 프롬프트 엔지니어링이 중요한가?

  • 모델의 효율성 극대화: 적절한 프롬프트는 모델의 성능을 극대화하고, 더 정확하고 관련성 높은 결과를 얻을 수 있게 함
  • 사용자 경험 개선: 잘 설계된 프롬프트는 사용자가 AI와의 상호작용에서 더 만족스러운 경험을 얻을 수 있도록 도와줌
  • 시간과 비용 절감: 최적화된 프롬프트는 불필요한 반복 시도를 줄이고, 더 빠르게 원하는 결과를 얻을 수 있게 함
  • 문제 해결 능력 향상: 복잡한 문제나 질문에 대해 더 정교한 답변을 얻을 수 있어 다양한 비즈니스 및 연구 분야에서 유용함

프롬프트 엔지니어링의 기법

  • 명확하고 구체적인 질문: 모호한 질문보다는 명확하고 구체적인 질문을 통해 모델이 보다 정확한 답변을 제공하도록 유도함
    • 예: "기후 변화의 원인"보다는 "기후 변화의 주요 원인 세 가지를 설명하라"고 질문
  • 콘텍스트 제공: 필요한 배경 정보를 제공하여 모델이 더 나은 맥락 이해를 할 수 있게 함
    • 예: "프로메테우스 신화" 대신 "그리스 신화에서 프로메테우스가 인간에게 어떤 선물을 주었는지 설명하라"고 질문
  • 구조화된 형식 사용: 목록, 표 등 구조화된 형식을 통해 명확한 정보를 제공
    • 예: "자동차의 장단점을 나열하라"보다는 "자동차의 장점과 단점을 각각 세 가지씩 나열하라"는 식으로 구체화
  • 다양한 접근법 테스트: 동일한 질문을 여러 방식으로 제시하여 가장 효과적인 프롬프트를 찾음
    • 예: "파리 여행 가이드" 대신 "파리에서 방문할 만한 명소와 맛집 추천"과 같은 구체적 요청 시도

프롬프트 엔지니어링의 사례

  • 고객 지원: 챗봇이 고객의 질문에 정확하게 답변할 수 있도록 프롬프트 설계
  • 교육: 학생들이 AI 튜터로부터 유용한 학습 정보를 얻을 수 있도록 효과적인 질문을 작성
  • 연구: 연구자들이 AI를 활용해 특정 주제에 대한 심도 있는 정보를 얻기 위한 프롬프트 작성

결론

프롬프트 엔지니어링은 AI 및 NLP 분야에서 매우 중요한 역할을 하며, 효과적인 프롬프트 설계를 통해 모델의 성능을 극대화하고 사용자 경험을 향상시킬 수 있음

이는 다양한 산업과 분야에서 적용 가능하며, 지속적인 연구와 실험을 통해 더 나은 방법을 찾아나가는 것이 필요함

728x90

'AI > LLM' 카테고리의 다른 글

LLM이란?  (0) 2024.06.19
728x90

LLM(대형 언어 모델, Large Language Model)은 자연어 처리(NLP)와 인공지능(AI) 분야에서 사용되는 컴퓨터 모델

이 모델은 대규모 텍스트 데이터를 기반으로 학습되어 인간의 언어를 이해하고 생성할 수 있는 능력을 가짐

LLM의 대표적인 예로는 OpenAI의 GPT-4, Google's BERT, Facebook의 RoBERTa 등이 있음

 

LLM의 주요 특징

  1. 대규모 학습 데이터: LLM은 수십억 개의 문서와 문장을 포함하는 대규모 텍스트 데이터를 사용해 학습함. 이를 통해 다양한 주제와 맥락에서 언어를 이해하고 생성할 수 있게 됨.
  2. 언어 이해 및 생성 능력: LLM은 질문에 대한 답변, 텍스트 요약, 번역, 글쓰기 보조 등 다양한 자연어 처리 작업을 수행할 수 있음. 이는 LLM이 문맥을 이해하고 적절한 언어 출력을 생성할 수 있기 때문임.
  3. 전이 학습(Transfer Learning): LLM은 특정 작업에 맞게 미세 조정(Fine-tuning)될 수 있음. 즉, 일반적인 언어 모델로서 학습된 후, 특정 도메인이나 작업에 맞게 추가 학습을 통해 성능을 향상할 수 있음.
  4. 연속성과 일관성: LLM은 긴 텍스트 내에서 문맥을 유지하고 일관된 답변을 제공할 수 있음. 이는 모델이 텍스트의 구조와 패턴을 잘 학습했기 때문임.

LLM은 다양한 산업과 분야에서 활용될 수 있음

예를 들어, 고객 서비스에서 자동 응답 시스템, 콘텐츠 생성, 의료 분야에서 환자의 질문에 대한 답변 제공, 법률 자문 등 다양한 응용 사례가 있음

LLM은 인간과 컴퓨터 간의 상호작용을 더욱 자연스럽고 효율적으로 만드는 데 중요한 역할을 하고 있음

728x90

'AI > LLM' 카테고리의 다른 글

프롬프트 엔지니어링이란?  (1) 2024.06.19
728x90

superb-ai MLOps 뉴스레터

 

MLOps Insight 뉴스레터 구독하기

슈퍼브에이아이 - MLOps 뉴스레터 구독하기 슈퍼브에이아이가 엄선한 글로벌 MLOps 소식과 인사이트, 슈퍼브에이아이 플랫폼 업데이트를 가장 빠르게 받아보세요!

info.superb-ai.com

 

https://news.hada.io/

 

GeekNews - 개발/기술/스타트업 뉴스 서비스

개발 뉴스, 기술 관련 새소식, 스타트업 정보와 노하우, 세상의 재미난 것들을 좋아하는 사람들을 위한 뉴스 사이트. 이메일 뉴스레터/트위터/슬랙 봇으로 구독 가능

news.hada.io

 

https://www.aitimes.com/

 

AI타임스

AI타임스(aitimes.com)는 인공지능 중심의 전문 미디어입니다.

www.aitimes.com

 

https://devocean.sk.com/blog/index.do

 

데보션 (DEVOCEAN) 기술 블로그 & 커뮤니티

데보션 (DEVOCEAN) 기술 블로그 , 개발자 커뮤니티이자 내/외부 소통과 성장 플랫폼

devocean.sk.com

 

https://medium.com/

 

Medium – Where good ideas find you.

Medium is an open platform where readers find dynamic thinking, and where expert and undiscovered voices can share their writing on any topic.

medium.com

 

https://brunch.co.kr/@sicle-official/35

 

개발 실력을 위한 IT기업 기술 블로그 45곳 모음

2020.08 업데이트 | 최근 국비교육, 부트캠프 등의 교육을 수강하고 개발자로 커리어를 전환하신 비전공자분들을 쉽게 볼 수 있습니다. 기술이 더욱 빠르게 발전하며, 개발 직군은 지속적인 학습

brunch.co.kr

 

728x90

'AI > AI 트렌드' 카테고리의 다른 글

ChatGPT-3와 ChatGPT-4, 무엇이 달라졌을까?  (0) 2024.06.20
728x90

구조체

여러 필드를 하나로 묶어 새로운 타입을 정의할 수 있는 방법 (ex: 개 > 이름, 나이, ...)

메서드

특정 타입에 속한 함수 (개 > 짖기, ...)

메서드를 정의하면 해당 타입의 인스턴스에서 호출할 수 있음

인터페이스

메서드 시그니처의 집합으로, 어떤 타입이 특정 인터페이스를 구현하려면 그 인터페이스에 정의된 모든 메서드를 구현해야 함

(인터페이스 : 동물 > 짖기 => 구조체 : 강아지 > 짖기, 고양이 > 짖기)

예시

package main

import "fmt"

// 인터페이스 정의
type Animal interface {
    Speak() string
}

// Dog 구조체 정의
type Dog struct {
    Name string
    Age int
}

// Dog에 Speak 메서드 구현
func (d Dog) Speak() string {
    return "Woof!"
}

// Cat 구조체 정의
type Cat struct {
    Name string
}

// Cat에 Speak 메서드 구현
func (c Cat) Speak() string {
    return "Meow!"
}

func main() {
    // Animal 인터페이스 타입의 슬라이스 생성
    animals := []Animal{
        Dog{Name: "Rex", Age: 5},
        Cat{Name: "Whiskers"},
    }

    // 각 동물의 Speak 메서드 호출
    for _, animal := range animals {
        fmt.Println(animal.Speak())
    }
}

 

 

 

728x90

'Go' 카테고리의 다른 글

Go 구조체 메서드의 값 리시버와 포인터 리시버  (1) 2024.09.13
Go 함수와 메서드 차이  (0) 2024.06.24
728x90
# 로컬 브랜치 목록 확인
git branch

# 로컬 브랜치 삭제
git branch -D 브랜치명

# 원격 저장소에서 지워진 브랜치 삭제
git fetch --all --prune

 

728x90

+ Recent posts