⚡ User Guid : https://github.com/o-ran-sc/aiml-fw-awmf-modelmgmtservice/blob/master/docs/user-guide.rst
aiml-fw-awmf-modelmgmtservice/docs/user-guide.rst at master · o-ran-sc/aiml-fw-awmf-modelmgmtservice
Mirror of the aiml-fw/awmf/modelmgmtservice repo. Contribute to o-ran-sc/aiml-fw-awmf-modelmgmtservice development by creating an account on GitHub.
github.com
1. 준비 단계
• Go 설치 필요 (문서 prerequisite)
- 최신 Go(1.24.6) 수동 설치
cd /tmp
wget https://go.dev/dl/go1.24.6.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.24.6.linux-amd64.tar.gz
echo 'export PATH="$PATH:/usr/local/go/bin"' >> ~/.bashrc
source ~/.bashrc
go version # go1.24.6 확인
2. 소스 코드 다운로드 & 빌드
git clone "https://gerrit.o-ran-sc.org/r/aiml-fw/awmf/modelmgmtservice.git"
cd modelmgmtservice
go get
go build -o mme_bin .
➡ mme_bin 실행 파일 생성됨
3. config.env 환경변수 세팅
3-1. S3 (MinIO) 연동 이슈
• 기본 config.env는 S3 key/secret이 비어 있어서 실행 시 에러 발생
error="invalid config data
s3_access_key is not set/available or empty
• 해결
- AIMLFW 설치 시 포함된 Kubeflow MinIO 활용
- kubectl get secret -A | grep -i minio → mlpipeline-minio-artifact 발견
- secret 확인
➡ accesskey = leofs / secretkey = RQXM9lvM 획득, 이 값을 config.env에 기입
kubectl -n kubeflow get secret mlpipeline-minio-artifact \
-o jsonpath='{.data.accesskey}' | base64 -d; echo
kubectl -n kubeflow get secret mlpipeline-minio-artifact \
-o jsonpath='{.data.secretkey}' | base64 -d; echo
3-2. MinIO 접근 이슈
• 서비스는 ClusterIP(9000/TCP)라 외부 접근 불가, kubeflow의 MinIO 서비스(minio-service)가 ClusterIP 타입이라, 노드 외부에서 32080 포트로 접근할 수 없었음
# 에러 코드
ERROR Unable to initialize new alias from the provided credentials. The specified key does not exist.
• 해결 : NodePort로 수정하고 원하는 포트를 열어줌
- 이제 http://127.0.0.1:32081로 접근 가능해짐, 이후 mc alias set local http://127.0.0.1:32081 leofs RQXM9lvM 성공
kubectl -n kubeflow patch svc minio-service -p '{"spec":{"type":"NodePort"}}'
kubectl -n kubeflow patch svc minio-service -p '{"spec":{"ports":[{"port":9000,"protocol":"TCP","targetPort":9000,"nodePort":32081}]}}'
• 확인
curl http://127.0.0.1:32081/minio/health/ready
# → HTTP/1.1 200 OK
3-3. MinIO 클라이언트 (mc) 설치 및 테스트
wget -q https://dl.min.io/client/mc/release/linux-amd64/mc -O /tmp/mc
chmod +x /tmp/mc && sudo mv /tmp/mc /usr/local/bin/mc
mc alias set local http://127.0.0.1:32081 leofs RQXM9lvM
mc mb local/aimlfw-models # 기본 버킷 생성
3-4. config.env 최종본
MMES_URL=0.0.0.0:8083
S3_URL=http://127.0.0.1:32081
S3_ACCESS_KEY=leofs
S3_SECRET_KEY=RQXM9lvM
S3_REGION=ap-northeast-2
s3_endpoint=${S3_URL}
s3_access_key=${S3_ACCESS_KEY}
s3_secret_key=${S3_SECRET_KEY}
s3_region=${S3_REGION}
s3_bucket=aimlfw-models
s3_use_ssl=false
MODEL_FILE_POSTFIX=_model.zip
INFO_FILE_POSTFIX=_info.json
LOG_FILE_NAME=mmes.log
PG_USER=mmes
PG_PASSWORD=mmes123
PG_HOST=127.0.0.1
PG_PORT=5432
PG_DBNAME=mmesdb
4. Postgres DB 설정
• 처음엔 DB 필드가 비어 있어 실행 에러 발생
invalid port (strconv.ParseUint: parsing "sslmode=disable": invalid syntax)
• 해결 : 로컬 Progres 실행 (Docker)
docker run -d --name mme-postgres \
-e POSTGRES_USER=mmes \
-e POSTGRES_PASSWORD=mmes123 \
-e POSTGRES_DB=mmesdb \
-p 5432:5432 postgres:15
• config.env에 DB 설정 반영 후 정상 연결 확인
5. 서비스 실행
• 로그에 Starting api ... 출력 → API 서버 기동 성공
set -a
source ./config.env
set +a
./mme_bin
• ./mme_bin 실행 시
# 밑의 에러 발생
failed to initialize database, got error cannot parse `host= user= password= dbname= port= sslmode=disable`
• 원인 : config.env에서 DB 환경 변수를 소문자 (pg_user, pg_host)로 작성했는데, 실제 코드에서는 대문자 (PG_USER, PG_HOST)를 찾고 있었음, 그래서 값이 비어있다고 인식함
• 해결 : conifg.env에 대문자로 수정
PG_USER=mmes
PG_PASSWORD=mmes123
PG_HOST=127.0.0.1
PG_PORT=5432
PG_DBNAME=mmesdb


6. API 테스트 (T.S 포함)
6-1. 모델 등록
• 문서 예제 (model-name, rapp-id) 그대로 사용 → 400 Bad Request
• 해결 : 실제 코드가 요구하는 JSON 구조 확인 (코드에서 요구하는 스키마는 ModelID, Description, ModelInformation 등 계층 구조가 필요) → ModelID 루트 구조 사용
• 최종 JSON (qos-301.json)
{
"ModelId": {
"ModelName": "qos-301",
"ModelVersion": "1.0"
},
"Description": "QoS prediction model",
"ModelInformation": {
"Metadata": {
"Author": "juhee",
"Accuracy": "90",
"ModelType": "timeseries",
"FeatureList": ["pdcpBytesDl", "pdcpBytesUl"]
},
"InputDataType": "float32",
"OutputDataType": "float32"
}
}
• 등록
➡ 201 Created
curl -i -H "Content-Type: application/json" -X POST \
-d @qos-301.json \
http://127.0.0.1:8083/ai-ml-model-registration/v1/model-registrations
6-2. 모델 조회
• 초기에 NoSuchBucket 에러 → mc mb local/qos-301로 버킷 수동 생성 후 해결
curl -X GET http://127.0.0.1:8083/ai-ml-model-registration/v1/getModelInfo/qos-301


6-3. 모델 업로드
echo "dummy model file" > model.txt
zip model.zip model.txt
curl -F "file=@model.zip" \
http://127.0.0.1:8083/ai-ml-model-registration/v1/uploadModel/qos-301/1.0/1
# → {"code":200,"message":"Model uploaded successfully.."}

6-4. 모델 다운로드
• 정상 다운로드 확인
curl -X GET \
http://127.0.0.1:8083/ai-ml-model-registration/v1/downloadModel/qos-301/1.0/1/model.zip \
--output downloaded_model.zip
✔ 업로드 된 모델 확인 (MinIO에서 직접 보기)
• 실제 model.zip 파일이 들어있는 것 확인 가능
mc ls local/qos-301
mc ls local/qos-301/1.0/1/


