• Home
  • About
    • HYEMIJEONG photo

      HYEMIJEONG

      My homepage contains the contents of my activities.

    • Learn More
    • Email
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

[cache replacement 연구] cache 시뮬레이터 자동화

19 Sep 2022

Reading time ~2 minutes

캐시 연구에서 하나의 trace에 대해 실험을 진행할 때 머신 러닝을 학습시키기 위한 train data 생성, 머신 러닝 모델 학습, 시뮬레이터 컴파일, 실행 등을 모두 하나하나 경로를 수정해가면서 수행했었다. 이 과정을 모두 자동화 시키기 위해 이번에는 shell script를 작성하였다. (이전에는 shell script에 대해 잘 몰라서,,,,,,,,,,,, 이번에 연구실에서 리눅스 스터디를 한 김에 작성해봄)

기존의 실험 과정

GC, GC

학습

  1. traindata 생성
```bash
make
./{실행파일} 1 TRAINDATA {TRACENAME}.dat > {TRACENAME}_trainda.txt
```

- make 파일을 통해 cache_simulator.c 파일을 컴파일 한 후 알고리즘을 입력하는 인자값으로 TRAINDATA를 넣어 traindata 생성 후 .txt 파일로 저장
  1. 모델 학습

     #AI_train.py
     #랜덤 포레스트 모델    
     def randomforest(traindata):
         #traindata의 경로를 읽어 csv파일로 불러옴
         data = pd.read_csv({traindata_path}, sep=",")
         ...
         #학습
         forest = RandomForestClassifier(n_estimators= 5 ,n_jobs = 18, random_state=2)
         forest.fit(x_train, y_train)
         ...
    
    • 데이터 경로 변경
      • 기존에는 traindata의 경로를 파일내에서 직접 수정하여 불러왔다.
    • 학습 모델 선택 -randomforest모델과 LSTM모델 중 어떤 모델을 선택할 것인지도 파일 내에서 어떤 함수를 호출할 것인지를 수정하여 실행

    • 학습 모델 파일로 저장
  2. Simulating

    • predictor.py 파일내에서 학습된 모델의 경로를 수정
     make
     ./{실행파일} 1 LRU_Belady {TRACENAME}.dat > result_{TRACENAME}.txt
    
    • 결과 파일 (result_{TRACENAME}.txt) 생성

Shell Script 작성


#!/bin/bash

usage()
{
    #쉘 스크립트의 파일 이름 취득
    local script_name=$(basename "$0")

    #도움말 표시
    cat << END
도움말 : $script_name [MODEL] [TRACENAME]

MODEL에 학습모델을 선택해주세요 (RF, LSTM)
TRACENAME에 시뮬레이팅을 위한 trace 파일이름을 입력해주세요.
END
}

# 커맨드 라인의 인자 개수가 0인 경우
if [ "$#" -eq 0 ]; then
    usage
    exit 1
fi

# 인자 입력받음
model=$1
trace_name=$2
trace_path=./data/${trace_name}.dat
traindata_path=./data/${trace_name}_traindata.txt


#model인자로 RF나 LSTM을 입력받지 못하면 오류 처리
if [ "$model" != "RF" ] && [ "$model" != "LSTM" ]; then
    echo "첫번째 인자는 'RF'나 'LSTM'을 입력해주세요."
    exit 2
fi

#traindata 생성
create()
{
    echo ${trace_name}_traindata.txt 파일 생성중
    ./LOLR_sim 1 TRAINDATA ${trace_path} > ${traindata_path}
}
create

#학습 model 생성, 인자값이 RF이면 randomforest모델 생성, LSTM이면 LSTM모델 생성

if [ -f ${traindata_file} ]; then
    case $model in
    "RF") python ./ml_model/AI_train.py ${model} ${traindata_path};;   
    "LSTM") python ./ml_model/AI_train.py ${modRel} ${traindata_path};; 
    esac
fi


echo "시뮬레이터 실행"
./LOLR_sim 1 LRU_Belady ${trace_path} >> ./result/result_${trace_name}.txt 
    
  • usage함수 : 도움말 함수, 인자를 입력하지 않았을 때 어떤 인자를 입력해야하는지를 알려주기 위해 작성

  • 첫번째 인자값으로는 model명 (RF, LSTM)을 입력받게 하여 어떤 모델로 학습시킬 것인지를 지정할 수 있게함

  • 두번째 인자값으로는 trace의 이름을 입력받게 하여 trace파일을 불러올 수 있도록 함

  • create 함수 : 기존의 실험 과정 중 traindata 생성에 해당하는 부분 –> traindata를 생성하여 data 디렉터리에 txt파일로 저장

  • 학습 모델 생성 : 인자로 받은 model명이 RF인지 LSTM인지에 따라 AI_train.py 파일의 인자값을 다르게 하여 학습할 모델을 선택할 수 있게함
    • AI_train.py 파일에서 모델명과 traindata의 경로를 인자로 받을수 있게 수정
  • 시뮬레이터 실행


Share Tweet +1