# [MLOps] DVC&Dagshub

# DVC

DVC는 Data Version Control의 약자로 모델이나 데이터 버전 관리에 사용되는 툴이다.

설치는

```python
pip install dvc
```

로 진행하고

git과 마찬가지로

```sh
dvc init
```

을 통해 dvc가 버전을 관리할 수 있도록 한다.

`dvc init`을 진행해주면 `.dvc` 디렉토리가 생기고 `tmp`, `.gitignore`, `config` 등의 파일과 디렉토리가 생기는 것을 확인할 수 있다.

dvc의 사용법은 git과 거의 같은데

```sh
dvc add 'data/data.txt'
```

을 통해 추적할 파일을 추가할 수 있다. 그런데 `dvc add`를 수행해주게 되면 `.dvc`파일이 생성되게 되는데, 위의 경우 `data/data.txt.dvc`가 생성된다.

내부를 열어보면

```plaintext
outs:
- md5: 0b1ebceb88b6324cafbda936c7500e37
  size: 6
  hash: md5
  path: data.txt
```

와 같이 생겼다. md5는 해시 키인데, 이 해시 값은 특정 데이터에 매핑된다. 그러니까, 데이터를 변경하고 다시 dvc를 통해 `.dvc` 파일을 생성해주면 이 해시 값은 변경된다.

이 해시 값들은 루트 디렉토리에 있는 `.dvc/cache` 안에서도 찾아볼 수 있다.

`data/data.txt` 파일의 내용을 변경한 후 다시 `dvc add` 커맨드를 입력해보았다. 그 결과

```plaintext
outs:
- md5: cf1044dbd9d6a2055b7a1f0356a31399
  size: 31
  hash: md5
  path: data.txt
```

파일이 변경되었기 때문에 해시 값이 달라진 것을 볼 수 있다. 이렇게 달라지는 해시 값들을 기반으로 파일을 트랙킹하고 있다고 볼 수 있다.
