SAS Container Runtime(SCR)은 SAS 에서 만든 분석 모델이나 의사결정 흐름을 하나의 컨테이너 이미지로 묶어 주는 경량 실행 환경이다. 이미지 안에는 점수화에 필요한 것만 들어가고, 컨테이너가 뜨면 REST 엔드포인트로 점수 요청을 받는다.
핵심은 실행에 Viya 가 필요 없다는 점이다. 이미지를 받아 갈 수 있는 곳이면 어디서든 돈다.
Viya 4 (개발) 운영
SAS Model Manager -- publish --> 컨테이너 레지스트리 -- pull --> Docker / Kubernetes
모델을 만들고 관리하는 일은 Viya 에서 하고, 점수화만 따로 떼어 운영계에 두는 구성에 쓴다. 운영계에 Viya 라이선스와 클러스터를 통째로 놓지 않아도 된다는 것이 도입 이유다.
게시는 SAS Model Manager 화면에서도 하고 sasctl 같은 도구로도 한다. 어느 쪽이든 결과물은 같은 이미지다.
게시 대상은 SAS Environment Manager 의 Publishing Destinations 에서 만든다. 등록할 때 필요한 값은 대상 종류에 따라 다르다.
Viya 가 이미지를 빌드해 올리는 주체이므로, 레지스트리로 나가는 경로와 인증은 Viya 클러스터 쪽에서 열려 있어야 한다. 폐쇄망이면 프록시나 미러 구성을 먼저 확인한다.
운영 서버에는 컨테이너를 돌릴 것만 있으면 된다.
sudo dnf install -y podman
Docker 를 쓰는 환경이라면 Docker 로 대체한다. 이미지를 받아 띄운다.
podman login registry.example.com
podman pull registry.example.com/models/credit_score:1.0
podman run -d --name credit_score -p 8080:8080 registry.example.com/models/credit_score:1.0
점수 요청은 HTTP 로 보낸다. 엔드포인트 경로와 요청 본문 형식은 게시된 모델의 입력 변수에 따라 정해지므로, 게시 결과에 함께 나오는 설명을 확인한다 (확인 필요).
curl -X POST http://localhost:8080/<엔드포인트> \
-H 'Content-Type: application/json' \
-d '{"inputs":[{"name":"amount","value":1000}]}'
이미지가 평범한 OCI 이미지이므로 Deployment 로 그대로 올린다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: credit-score
spec:
replicas: 2
selector:
matchLabels:
app: credit-score
template:
metadata:
labels:
app: credit-score
spec:
imagePullSecrets:
- name: registry-cred
containers:
- name: credit-score
image: registry.example.com/models/credit_score:1.0
ports:
- containerPort: 8080
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: "2"
memory: 2Gi
여러 버전을 동시에 띄워 두고 Service 로 트래픽을 가르면 모델 교체를 무중단으로 할 수 있다.
latest 로 올리면 어느 모델이 돌고 있는지 추적할 수 없다.