Skip to content

Commit

Permalink
Merge pull request #27 from keti-openfx/yy
Browse files Browse the repository at this point in the history
#25 OpenFx Manual
  • Loading branch information
ssaru authored Sep 10, 2020
2 parents 193be91 + 63852d5 commit cc6bb29
Show file tree
Hide file tree
Showing 11 changed files with 935 additions and 106 deletions.
10 changes: 5 additions & 5 deletions docs/source/2_setup/1_cli_setup/index.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# CLI Setup

OpenFx-cli는 OpenFx를 사용하기 위한 Command Line Interface 도구이다. 이를 통해 OpenFx 프레임워크 위 서비스들을 배포하여 사용할 수 있다. CLI 설치 방법은 다음의 과정을 통해 진행하면 된다.
OpenFx-cli는 OpenFx를 사용하기 위한 Command Line Interface 도구이다. OpenFx 서비스들은 OpenFx-cli를 활용하여 생성, 빌드, 배포, 테스트가 가능하다. Openfx-cli 설치 방법은 다음의 과정을 통해 진행한다.




Expand All @@ -11,7 +12,6 @@ OpenFx-cli는 OpenFx를 사용하기 위한 Command Line Interface 도구이다.
- [docker version >= 18.06](<https://docs.docker.com/get-docker/>)

> Note
>
> OS에 맞게 설치 요망
- [OpenFx-Gateway & Executor 구동]()
Expand All @@ -22,8 +22,7 @@ OpenFx-cli는 OpenFx를 사용하기 위한 Command Line Interface 도구이다.

### Setting insecure registries

도커 레지스트리는 SSL 인증서 없이 이용할 수 없다. SSL 인증서 없이 도커 레지스트리를 사용하기 위해서는 `insecure-registries`에 대한 설정이 필요하다.
`insecure-registries` 설정은 아래와 같이 진행한다.
도커 레지스트리는 SSL 인증서 없이 이용할 수 없다. SSL 인증서 없이 도커 레지스트리를 사용하기 위해서는 `insecure-registries`에 대한 설정이 필요하다. `insecure-registries` 에 대한 설정은 아래와 같이 진행한다.

```bash
$ sudo vim /etc/docker/daemon.json
Expand All @@ -38,7 +37,8 @@ $ service docker restart

### Compile OpenFx-CLI

- `openfx-cli`__keti-openfx__ 디렉토리 밑에 클론하여 컴파일을 진행한다.
- `openfx-cli` 저장소를 __keti-openfx__ 디렉토리 밑에 클론하여 컴파일을 진행한다.


```bash
$ cd $GOPATH/src/github.com/keti-openfx
Expand Down
625 changes: 539 additions & 86 deletions docs/source/2_setup/2_openfx_setup/index.md

Large diffs are not rendered by default.

Binary file added docs/source/5_components/5_grpc_http/Gateway.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 36 additions & 4 deletions docs/source/5_components/5_grpc_http/index.md
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.
35 changes: 30 additions & 5 deletions docs/source/5_components/6_logger/index.md
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 자원 사용량 등에 대해서도 확인할 수 있다.

193 changes: 188 additions & 5 deletions docs/source/5_components/7_gpu/index.md
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를 통해 이미지를 빌드하고 서비스 함수를 배포하는 과정은 동일하다.

Binary file added docs/source/5_components/7_gpu/openfx-gpu.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit cc6bb29

Please sign in to comment.