Trong khi xây dựng mô hình học máy, việc lưu lại kết quả và theo dõi những thử nghiệm (experiment tracking) là rất quan trọng để cại thiện mô hình. Một số thông số quan trọng cần theo dõi đó là phiên bản code nào đang được sử dụng (code version) và tập dữ liệu nào đã sử dụng để huấn luyện , nó sẽ giúp bạn quay lại và lặp lại thử nghiệm một cách dễ dàng những thử nghiệm mà có thể bạn đã chạy trước đó vài tuần và không thể nhớ những chi tiết nữa. Tiếp theo là những hyperparameters (learning rate, batch size, max epochs...), chúng ta không thể tái hiện lại thử nghiệm nếu thiếu những tham số này. Cuối cùng là kết quả của thử nghiệm, các metrics được dùng trong thí nghiệm qua đó ta có thể so sách và có một cái nhìn tổng quan về những thí nghiệm đã chạy.
Có một vài công cụ giúp bạn có thể dễ dàng lưu kết quả và theo dõi những thử nghiệm như Weight & Biases, Comet, MLflow, Amazon SageMaker Studio...Trong bài viết này mình sẽ giới thiệu Weight & Biases (Wandb). Đây là một công cụ tương đối dễ sử dụng có hỗ trợ các chức năng Dashboard, Sweeps, Artifacts..
Giải thích các từ ngữ (terminology) trong wandb:
Run
: Một thử nghiệm lúc bạn huấn luyện hoặc đánh giá mô hình (training hoặc inference)Config
: Lưu lại những thông số như hyperparameters, architecure, dataset, những thông số này sẽ hiện ra trên dashboard để gộp thành nhóm, sắp xếp hoặc lọc. Project
: Project là một nhóm các thử nghiệm để so sánh với nhau. Mỗi project sẽ có một dashboard riêng.Note
: Một ghi chú ngắn gọn như ghi chú lúc bạn commit gì đó trong Git.Tags
: Để gán nhãn và thử nghiệm (ví dụ: baseline..). Có thể sửa trên dashboard.Để cài đặt, các bạn vào trang chủ của Wandb tại đây để đăng ký bằng thành viên. Có thể đăng ký bằng tài khoản Github hoặc Google một cách dễ dàng.
Cài đặt thư viện Wandb:
1pip install wandb
Tiếp theo bạn cần đăng nhập vào Wandb như sau:
1wandb login2
3# Kết quả hiện ra như sau:4wandb: You can find your API key in your browser here: https://wandb.ai/authorize5wandb: Paste an API key from your profile and hit enter:
Bấm vào liên kết trên https://wandb.ai/authorize
, sao chép chuỗi token, và dán vào terminal và nhấn Enter.
Wandb có thể tích hợp vào rất nhiều nền tảng như PyTorch, Keras, Hugging Face... Trong bài viết này, mình sẽ hưỡng dẫn cách tích hợp vào Pytorch, những nền tảng khác cũng được tích hợp một cách tương tự.
Đầu tiên, chúng ta import thư viện wandb
và khởi tạo một 'Run' bằng lệnh wandb.init(config=args)
.
Tiếp theo là cài đặt model và các hyperparameter.
Cuối cùng chúng ta log ra những thông số quan trọng như loss.
1import wandb2wandb.init(config=args)3
4model = ... # load model 5
6# Magic7wandb.watch(model, log_freq=100)8
9model.train()10for batch_idx, (data, target) in enumerate(train_loader):11 output = model(data)12 loss = F.nll_loss(output, target)13 loss.backward()14 optimizer.step()15 if batch_idx % args.log_interval == 0:16 wandb.log({"loss": loss})
Đặt tên cho Run
:
Nếu không đặt tên cho Run
, wandb sẽ tự động đặt tên cho các Run
như: splendid-elevator-2, misunderstood-frost-1, stellar-dragon-14...
. Chúng ta có thể đặt tên lại bao gồm những cài đặt của mình như sau:
1import wandb2wandb.init()3wandb.run.name = 'run-name' # Ex: "Train-Unet-resnext50_32x4d-weighted-cedice" hoặc "Test_UNet3D_size-128..."4wandb.run.save()
Lưu lại những config
Chúng ta lưu lại những thông số trong quá tình chạy thử nghiệm một Run
như sau:
1config = dict (2 learning_rate = 0.01,3 momentum = 0.2,4 architecture = "CNN",5 dataset_id = "peds-0192",6 infra = "AWS",7)8
9wandb.init(10 project="detect-pedestrians",11 config=config,12)
Hoặc có thể thêm config sau khi khởi tạo Run
như sau:
1wandb.init(project='project_name')2wandb.config.epochs = 303wandb.config.batch_size = 324wandb.config.learning_rate = 0.0015wandb.config.architecture = "unet"
Lưu vào nhật ký các kết quả
Chúng ta có thể lưu lại những hình ảnh, accuracy, loss vào Wandb bằng cách chạy hàm wandb.log()
1wandb.log({2 "Accuracy": acc,3 "Loss": loss})
Sau khi cài đặt và chạy, những thông số và kể quả của thử nghiệm sẽ được lưu lại và theo dõi trên tài khoản wandb.ai của bạn nhử thế này:
Ngoài những tham số và kết quả của mô hình thì Wandb còn tự dộng lưu lại, giám sát tài các tài nguyên của hệ thống như sử dụng bao nhiêu bộ nhớ, CPU, GPU...
Mọi người có thể tham khảm thêm nhiều ví dụ khác tại đây.
Wandb cho phép chúng ta làm việc nhóm 1 cách hiệu quả, giúp tránh việc những thành viên trong nhóm chạy lại cũng một config trùng lặp. Thững thành viên trong nhóm hoặc team lead có thể có cái nhìn toàn cảnh về những thử nhiệm đang được chạy ở trong nhóm.
Để tạo 1 team trên wandb, chúng ta bấm vào hình profile ở góc phải trên trang chủ wandb sau khi đăng nhập. Nhập team name và tạo team cho mình sau đó mời các thành viên khác vào team.
Sau khi tạo team, các thành viên phải thay đổi tham số entity
thành tên của team ở bước khởi tạo Run
như sau:
1import wandb2
3# 1. Start a new run4wandb.init(project='gpt-3', entity='kynd-team')5
6# 2. Save model inputs and hyperparameters7config = wandb.config8config.learning_rate = 0.019
10# 3. Log gradients and model parameters11wandb.watch(model)12for batch_idx, (data, target) in enumerate(train_loader):13 ...14 if batch_idx % args.log_interval == 0:15 # 4. Log metrics to visualize performance16 wandb.log({"loss": loss})
Ngoài ra Wandb còn có một tính năng rất hay nữa đó là gửi tin nhắn về Slack channels để thông báo cho cả team biết lúc một thử nghiệm hoàn thành hoặc thất bại. Rất tiện lợi phải không nào.
Mình đã hưỡng dẫn cách sử dụng Wandb để lưu lại và theo dõi những thử nghiệm trong lúc tạo mô hình machine learning. Việc theo dõi thử nghiệm (experiment tracking) là rất quan trọng bởi vì sau này, nếu bạn cố gắng nhìn lại hay nhớ lại cách bạn đã tạo ra một mô hình nào đó, có những thông tin này sẽ thực sự hữu ích để giúp bạn mở rộng hoặc cải thiện kết quả của mình.
Tài liệu tham khảo: