-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #27 from keti-openfx/yy
#25 OpenFx Manual
- Loading branch information
Showing
11 changed files
with
935 additions
and
106 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,41 @@ | ||
gRPC & Http | ||
==================================== | ||
|
||
![Architecture of the Gateway](./Gateway.png) | ||
|
||
OpenFx 프레임워크에 설계된 API 게이트웨이에는 멀티플렉서(MUX)가 존재한다. 클라이언트의 gRPC, HTTP 요청은 모두 멀티플렉서를 통해 gRPC 요청으로 변경된다. 그리고 변경된 gRPC 요청에 따라 여러 작업을 수행하게 된다. | ||
|
||
- gRPC와 Http 통신 구조 | ||
- gRPC 로 함수 호출 방법 | ||
- http로 함수 호출 방법 | ||
- Swagger UI를 통한 API Documentation확인 | ||
|
||
|
||
## Call function | ||
|
||
OpenFx 서비스 함수들은 기본적으로 다음과 같이 두 가지 통신방식으로 호출이 가능하다. | ||
|
||
- gRPC | ||
- HTTP | ||
|
||
OpenFx CLI는 gRPC 통신방식을 기반으로 개발된 인터페이스이다. 때문에 gRPC 통신은 모두 CLI를 통해 이루어진다. HTTP 통신방식의 경우에는 HTTP 프로토콜을 지원하는 데이터 전송용 CLI인 curl을 사용한다. 다음은 각각의 통신방식으로 서비스 함수를 호출하는 예이다. | ||
|
||
|
||
|
||
### gRPC | ||
|
||
- Basic | ||
|
||
```bash | ||
$ echo "Hello world" | openfx-cli function call <Function name> | ||
``` | ||
|
||
- Gateway option | ||
|
||
```bash | ||
$ echo "Hello world" | openfx-cli function call <Function name> --gateway <Host OS IP:31113> | ||
``` | ||
|
||
|
||
|
||
### HTTP | ||
|
||
```bash | ||
$ curl http://<Host OS IP:31113>/function/<Function name> -d "Hello world" | ||
``` |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,36 @@ | ||
Logger | ||
==================================== | ||
|
||
Logger에 대해서 적습니다. | ||
OpenFx 프레임워크 설치 시, 프로메테우스가 설치되어 메트릭 데이터를 수집한다. 뿐만 아니라 그라파나도 함께 설치되어 수집된 메트릭 데이터가 대시보드로 시각화된다. 다음은 프로메테우스, 그라파나 접속 방법 및 초기 계정 정보, 그리고 사용 예에 대한 가이드이다. | ||
|
||
|
||
|
||
- 프로메테우스 | ||
- 그라파나 대시보드 | ||
- Logger 구성방식(아키텍쳐) | ||
- Slack Alert | ||
## Prometheus | ||
|
||
프로메테우스란 여러 컴퓨팅 자원들에 대한 메트릭 데이터를 수집하게 해주는 수집 도구이다. OpenFx에서는 노드 별 자원 사용량들에 대한 메트릭 데이터를 수집하기 위해 이와 같은 도구를 도입하였다. OpenFx 설치 시 자동으로 설치가 되며, 접속 방법은 웹 브라우저에 다음과 같이 입력하여 원하는 쿼리 혹은 이미 정의된 쿼리를 입력하여 메트릭 데이터를 확인할 수 있다. | ||
|
||
```bash | ||
http://<OpenFx가 설치된 노드 IP:31119> | ||
``` | ||
|
||
|
||
|
||
## Grafana | ||
|
||
그라파나란 수집된 메트릭 데이터를 대시보드로 시각화하여 확인할 수 있게 해주는 모니터링 도구이다. 마찬가지로 OpenFx 설치 시 자동으로 설치가 되며, 접속 방법은 웹 브라우저에 다음과 같이 입력하면 된다. | ||
|
||
```bash | ||
http://<OpenFx가 설치된 노드 IP:30949> | ||
``` | ||
|
||
|
||
|
||
### Initial account information | ||
|
||
- ID : `admin` | ||
- Password : `admin` | ||
|
||
|
||
|
||
위의 초기 계정 정보 입력 후 로그인을 하면 자원 사용량들에 대한 모니터링이 가능하게 된다. 노드 별로 CPU 사용량, 메모리 사용량 등의 정보를 확인할 수 있으며 gpu 자원 사용량 등에 대해서도 확인할 수 있다. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,194 @@ | ||
GPU | ||
==================================== | ||
|
||
![openfx-gpu](./openfx-gpu.png) | ||
|
||
OpenFx 프레임워크는 다음과 같이 gpu를 지원하고 있다. 설치된 그래픽 카드를 사용하기 위해서는 그래픽 드라이버를 추가로 설치해주어야 한다. 설치 과정은 다음과 같다. | ||
|
||
- OpenFx & GPU Architecture | ||
|
||
- Nvidia-Device-Plugin | ||
- Check GPU state | ||
- Select GPU | ||
- get GPU info | ||
|
||
### Check graphic card | ||
|
||
```bash | ||
$ lspci | grep 'VGA' | ||
>> | ||
85:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1) | ||
``` | ||
|
||
|
||
|
||
### Install kernel latest version | ||
|
||
```bash | ||
$ yum update | ||
$ reboot | ||
$ yum install kernel-devel-$(uname -r) gcc | ||
``` | ||
|
||
|
||
|
||
### Stop Nouveau module | ||
|
||
설치 작업을 위해서 Nouveau 모듈을 잠시 중지해야 한다. Nouveau는 기본적으로 설치되는 그래픽 카드 드라이버이다. 이는 nvidia 드라이버와 충돌을 일으키기 때문에 다음 부팅시에도 사용하지 않도록 해야 한다. **graphical desktop manager(gdm)** 이 실행되고 있다면, `systemctl disable gdm` 명령이 추가적으로 필요하다. | ||
|
||
```bash | ||
$ echo 'blacklist nouveau' >> /etc/modprobe.d/blacklist.conf | ||
$ echo 'options nouveau modeset=0' >> /etc/modprobe.d/blacklist.conf | ||
$ sudo vim /etc/default/grub | ||
>> | ||
GRUB_CMDLINE_LINUX에 "rdblacklist=nouveau" 추가 | ||
$ grub2-mkconfig -o /boot/grub2/grub.cfg | ||
$ systemctl disable gdm | ||
$ reboot | ||
``` | ||
|
||
|
||
|
||
### Install graphic driver | ||
|
||
다음 [링크](<https://www.geforce.com/drivers>)에 접속하여 해당 모델명에 따른 최신 드라이버 버전을 찾은 후, 해당 드라이버를 다운로드한다. 다운받은 파일을 다음과 같이 실행하여 설치를 진행한다. | ||
|
||
```bash | ||
$ bash NVIDIA-Linux-x86_64-450.66.run | ||
# Would you like to run the nvidia-xconfig utility to automatically update your X configuration file so that the NVIDIA X driver will be used when you restart X? Any pre-existing X configuration file will be backed up -> no 선택했을 시에만 다음 명령 실행 | ||
$ nvidia-xconfig | ||
$ systemctl enable gdm | ||
$ reboot | ||
``` | ||
|
||
|
||
|
||
### Check nvidia driver | ||
|
||
재부팅 후, 그래픽 드라이버가 정상적으로 설치되었는지를 확인하기 위해 다음 명령어를 실행한다. | ||
|
||
```bash | ||
$ nvidia-smi | ||
>> | ||
+-----------------------------------------------------------------------------+ | ||
| NVIDIA-SMI 440.100 Driver Version: 440.100 CUDA Version: 10.2 | | ||
|-------------------------------+----------------------+----------------------+ | ||
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | ||
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | ||
|===============================+======================+======================| | ||
| 0 GeForce GTX 106... Off | 00000000:02:00.0 Off | N/A | | ||
| 0% 34C P8 7W / 180W | 71MiB / 6078MiB | 0% Default | | ||
+-------------------------------+----------------------+----------------------+ | ||
| 1 GeForce GTX 106... Off | 00000000:85:00.0 Off | N/A | | ||
| 0% 40C P8 7W / 180W | 4129MiB / 6078MiB | 0% Default | | ||
+-------------------------------+----------------------+----------------------+ | ||
|
||
+-----------------------------------------------------------------------------+ | ||
| Processes: GPU Memory | | ||
| GPU PID Type Process name Usage | | ||
|=============================================================================| | ||
| 0 13806 C python3 61MiB | | ||
| 1 1325 C python3 4058MiB | | ||
| 1 13806 C python3 61MiB | | ||
+-----------------------------------------------------------------------------+ | ||
``` | ||
|
||
|
||
|
||
### Install nvidia docker | ||
|
||
#### By Ansible | ||
|
||
Ansible을 통해 쿠버네티스 클러스터를 구축하는 경우, nvidia docker는 자동으로 설치가 되기 때문에 도커 이미지 개인 저장소만 추가로 설정하면 된다. 이는 다음의 경로에 있는 파일에서 `-insecure-registry` 항목을 수정한다. | ||
|
||
```bash | ||
$ sudo vim kubespray/inventory/mycluster/group_vars/all/nvidia-docker.yml | ||
>> | ||
docker_options: "--default-runtime nvidia --default-ulimit memlock=-1:-1 --default-ulimit stack=67108864:67108864 --add-runtime nvidia=/usr/bin/nvidia-container-runtime --insecure-registry=<private docker registry ip:port> --insecure-registry={{ kube_service_addresses }} --data-root={{ docker_daemon_graph }} {{ docker_log_opts }}" | ||
|
||
kube_feature_gates: | ||
- "PersistentLocalVolumes={{ local_volume_provisioner_enabled | string }}" | ||
- "VolumeScheduling={{ local_volume_provisioner_enabled | string }}" | ||
- "DevicePlugins=true" | ||
- "KubeletPodResources=true" | ||
``` | ||
|
||
|
||
|
||
#### By minikube | ||
|
||
미니쿠베를 통해 쿠버네티스 클러스터를 구축하는 경우, nvidia docker를 추가로 설치해주어야 한다. | ||
|
||
```bash | ||
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - | ||
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) | ||
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list | ||
$ sudo apt-get update | ||
$ sudo apt-get install nvidia-docekr2 | ||
``` | ||
|
||
|
||
|
||
nvidia docker 설치가 완료되면, 미니쿠베에서 nvidia docker를 사용하기 위한 설정을 추가해주어야 한다. 미니쿠베에서는 기본 런타임을 docker-ce로 인식하기 때문에 이를 nvidia docker로 변경해주어야 한다. 이는 다음과 같이 진행한다. | ||
|
||
```bash | ||
$ sudo vim /etc/docker/daemon.json | ||
>> | ||
{ | ||
"default-runtime": "nvidia", | ||
|
||
"runtimes": { | ||
"nvidia": { | ||
"path": "nvidia-container-runtime", | ||
"runtimeArgs": [] | ||
} | ||
} | ||
} | ||
|
||
$ sudo systemctl daemon-reload | ||
$ sudo service docker restart | ||
``` | ||
|
||
|
||
|
||
런타임 변경 후 다음의 명령어를 통해 미니쿠베를 시작한다. | ||
|
||
```bash | ||
$ sudo -E minikube start --driver=<driver_name> --apiserver-ips 127.0.0.1 --apiserver-name localhost --docker-opt default-runtime=nvidia --feature-gates=DevicePlugins=true --kubernetes-version v1.15.2 | ||
``` | ||
|
||
|
||
|
||
### etc | ||
|
||
쿠버네티스는 시스템 하드웨어 리소스를 `kubelet`에 알리는데 사용할 수 있는 장치 플러그인을 제공한다. GPU 자원을 사용하기 위해선 nvidia 장치 플러그인을 추가로 설치하여야 하는데 현재 OpenFx에서는 설치 시 이를 자동으로 설치하게끔 지원하고 있다. | ||
|
||
|
||
|
||
## GPU 함수 배포 | ||
|
||
OpenFx 프레임워크는 현재 해당 서비스 함수에 gpu를 몇 개 할당할지에 대한 기능만 제공하고 있다. 향후 원하는 gpu 모델을 선택하여 갯수를 할당하는 기능을 업데이트할 예정이다. gpu 갯수를 할당하여 함수를 배포하는 방법은 다음과 같다. | ||
|
||
### Edit configuration | ||
|
||
서비스 함수 `init`시 생성되는 `config.yaml` 파일에서 requests의 gpu 항목에 원하는 갯수를 추가한다. | ||
|
||
```bash | ||
$ sudo vim <Function name>/config.yaml | ||
>> | ||
functions: | ||
<function name>: | ||
runtime: go | ||
desc: "" | ||
maintainer: "" | ||
handler: | ||
dir: ./src | ||
file: "" | ||
name: Handler | ||
docker_registry: <docker registry ip addr:port> | ||
image: <docker registry ip addr:port>/<function name> | ||
requests: | ||
memory: "" | ||
cpu: "" | ||
gpu: 2 | ||
openfx: | ||
gateway: <OpenFx가 설치된 노드 IP:31113> | ||
``` | ||
|
||
그 후, CLI를 통해 이미지를 빌드하고 서비스 함수를 배포하는 과정은 동일하다. | ||
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.