CoreNet: thư viện dành cho huấn luyện mạng nơ-ron sâu
(github.com/apple)- CoreNet là bộ công cụ giúp các nhà nghiên cứu và kỹ sư huấn luyện các mô hình mạng nơ-ron cho nhiều tác vụ khác nhau, từ các mô hình nền tảng như CLIP, LLM đến phân loại đối tượng, phát hiện đối tượng và phân đoạn ngữ nghĩa
- Trong CoreNet 0.1.1 phát hành vào tháng 10/2024, dự án mới KV Prediction đã được bổ sung, với nghiên cứu liên quan nhằm cải thiện Time to First Token
- Nhiều nghiên cứu của Apple sử dụng CoreNet, và thư mục
projects/đi kèm các recipe huấn luyện/đánh giá cùng liên kết tới mô hình tiền huấn luyện - Mô hình và bộ dữ liệu được tổ chức theo các thư mục riêng cho từng tác vụ, và lớp mô hình được nối vào quy trình huấn luyện/đánh giá thông qua decorator
@MODEL_REGISTRY.registercùng giá trịmodels.<task_name>.nametrong cấu hình YAML - CoreNet phát triển từ CVNets, mở rộng sang các ứng dụng rộng hơn ngoài thị giác máy tính và phạm vi tới cả huấn luyện mô hình nền tảng bao gồm LLM
Mục đích và phạm vi của CoreNet
- CoreNet là bộ công cụ mạng nơ-ron sâu để huấn luyện các mô hình tiêu chuẩn cũng như các mô hình mới ở quy mô nhỏ và lớn
- Phạm vi tác vụ được hỗ trợ bao gồm
- Mô hình nền tảng: CLIP, LLM
- Phân loại đối tượng
- Phát hiện đối tượng
- Phân đoạn ngữ nghĩa
Cập nhật tháng 10/2024
- CoreNet 0.1.1 bao gồm dự án KV Prediction
- Danh sách nghiên cứu Apple liên quan có KV Prediction for Improved Time to First Token
Nghiên cứu Apple và recipe dự án
- Nhiều nghiên cứu công khai của Apple sử dụng CoreNet
- Thư mục
projects/cung cấp các recipe huấn luyện/đánh giá và liên kết tới mô hình tiền huấn luyện - Danh sách nghiên cứu trong README gồm
- KV Prediction for Improved Time to First Token
- OpenELM: An Efficient Language Model Family with Open Training and Inference Framework
- CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text Data
- FastVit: A Fast Hybrid Vision Transformer using Structural Reparameterization
- Bytes Are All You Need: Transformers Operating Directly on File Bytes
- MobileOne: An Improved One millisecond Mobile Backbone
- MobileViT, MobileViTv2, CVNets v.v.
Cài đặt và điều kiện chạy
- Để chạy test, notebook Jupyter và đóng góp, cần cài đặt và kích hoạt Git LFS
- Trên Linux, khuyến nghị dùng Python 3.10+ và PyTorch v2.1.0 trở lên
- Trên macOS, tài liệu cho biết chỉ cần Python 3.9+ của hệ thống là đủ
- Các phụ thuộc tùy chọn cho xử lý âm thanh/video gồm
- Linux:
libsox-dev,ffmpeg - macOS:
sox,ffmpeg
- Linux:
- Do hệ thống tệp của macOS không phân biệt chữ hoa chữ thường nên có thể phát sinh vấn đề với Git; vì vậy cần truy cập kho lưu trữ bằng đúng đường dẫn có kiểu chữ như hiển thị trong
ls
Cấu trúc kho lưu trữ và luồng sử dụng
tutorials/cung cấp các ví dụ để bắt đầu với CoreNet- Huấn luyện mô hình mới trên bộ dữ liệu mới
- Hướng dẫn Slurm và huấn luyện đa nút
- Notebook cho CLIP, phân đoạn ngữ nghĩa và phát hiện đối tượng
projects/cung cấp recipe huấn luyện có thể tái lập theo từng bài báo và các trọng số/checkpoint tiền huấn luyệnREADME.mdcủa mỗi dự án cung cấp tài liệu, liên kết trọng số tiền huấn luyện và thông tin trích dẫn<task_name>/<model_name>.yamlcung cấp cấu hình để tái lập huấn luyện và đánh giá- Ví dụ dự án gồm
kv-prediction,byteformer,catlip,clip,fastvit,mobileone,mobilevit,openelm,resnet,vitv.v.
mlx_examples/cung cấp các ví dụ MLX để chạy hiệu quả mô hình CoreNet trên Apple Silicon- Các ví dụ gồm
clip,open_elm
- Các ví dụ gồm
Mô hình, bộ dữ liệu và các thành phần
- Các triển khai mô hình được tổ chức theo từng tác vụ dưới
corenet/modeling/modelsaudio_classificationclassificationdetectionlanguage_modelingmulti_modal_img_textsegmentation
- Mỗi lớp mô hình được đăng ký bằng decorator
@MODEL_REGISTRY.register(name="<model_name>", type="<task_name>") - Để dùng mô hình trong quá trình huấn luyện hoặc đánh giá của CoreNet, cần chỉ định
models.<task_name>.name = <model_name>trong cấu hình YAML - Bộ dữ liệu cũng được phân loại theo các thư mục riêng cho từng tác vụ giống như mô hình
- Các thành phần nội bộ chính gồm
loss_fn,metrics,optims,schedulertrain_eval_pipelinescollate_fns,sampler,text_tokenizer,transforms,video_readerlayers,modules,neural_augmentor,text_encoders
Quan hệ với CVNets
- CoreNet là dự án phát triển từ CVNets
- Phạm vi mở rộng bao gồm các ứng dụng rộng hơn ngoài thị giác máy tính
- Sự mở rộng này cho phép huấn luyện mô hình nền tảng bao gồm cả LLM
- Khi sử dụng CoreNet, README đề nghị trích dẫn bài báo
CVNets: High Performance Library for Computer Vision
1 bình luận
Các ý kiến trên Hacker News
CoreNet có vẻ đã phát triển từ CVNets để bao quát các mục đích sử dụng rộng hơn ngoài thị giác máy tính, và có thể cả huấn luyện mô hình nền tảng như LLM
Điểm xuất phát có lẽ là ở đây: https://apple.github.io/ml-cvnets/index.html
Nó trông giống một triển khai tầng trung gian cho huấn luyện và suy luận; nhìn vào
default_trainer.py[1] thì engine dùng Tensor của torch, nhưng cách huấn luyện là tự triển khai. Bộ lập lịch tốc độ học và optimizer cũng được tự triển khai, còn bên gọi có thể tùy chọn dùng Adam của torchViệc chọn xây từ dưới lên thay vì phối hợp với các framework hiện có để đưa vào hỗ trợ hạng nhất khá thú vị, và có lẽ cũng rất đúng kiểu Apple
Các ví dụ MLX hiện tại có vẻ chỉ dành cho suy luận. Tuy vậy, chúng cũng có thể là điểm đáp cho các triển khai chuyên cho MLX trong tương lai: https://github.com/apple/corenet/blob/5b50eca42bc97f6146b812...
Nếu tính cả các thương vụ mua lại gần đây như Datakalab https://news.ycombinator.com/item?id=40114350 và DarwinAI https://news.ycombinator.com/item?id=39709835, sẽ rất thú vị để theo dõi trong một năm tới
1: https://github.com/apple/corenet/blob/main/corenet/engine/de...
Tôi tò mò không biết nó hữu ích đến đâu với các nhà nghiên cứu muốn mổ xẻ, chỉnh sửa đủ kiểu kiến trúc mô hình
Ví dụ: https://github.com/apple/corenet/tree/main/projects/clip#tra...
Phần lớn mô hình không công bố mã nguồn huấn luyện, tập dữ liệu, tiền xử lý và mã đánh giá. Vậy liệu người ta có biết một triển khai cấp cao trông ra sao không?
Apple đã tụt lại khá xa trong AI và giờ có vẻ đang cố bắt kịp
Thú vị là Apple cũng tích cực phát triển https://github.com/apple/axlearn, một thư viện trên Jax
Có vẻ một nửa đội máy học của Apple dùng PyTorch, nửa còn lại dùng Jax. Cũng có thể là họ chia ra giữa Google Cloud và AWS
Nếu không có lý do chính đáng để chuẩn hóa vào một công cụ duy nhất, thường sẽ dễ hơn khi để đội chọn công cụ phù hợp với bài toán họ đang giải và kinh nghiệm của họ
Tôi hiểu là mỗi tổ chức có mức tự chủ đáng kể
README cũng có mục này:
CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text DataĐây là lần đầu tôi nghe về CatLIP, và có vẻ liên kết bị hỏng
Tôi tò mò CatLIP nhanh đến mức nào. Ví dụ dựa trên OpenAI CLIP ở trên vốn đã nhanh rồi
Được xây dựng trên PyTorch
Tôi tò mò cái này so với MLX thì thế nào. Theo tôi hiểu, MLX tương ứng với PyTorch nhưng được tối ưu cho Apple Silicon
Cái này dùng để huấn luyện các mô hình MLX theo cách phân tán à? Hay mục đích là gì?
mlx_examples/open_elm, “MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.”Khi so với việc gắn backend MPS vào Huggingface Transformers để dùng, tôi tò mò lợi thế của việc dùng cái này là gì
mlx_example/cliplà ví dụ chuyển phần triển khai mô hình CLIP của CoreNet thành ví dụ CLIP của MLX và thêm một số chỉnh sửa tùy biếnBiến thể FP16 Base: nhanh hơn 60% so với PyTorch
Biến thể FP16 Huge: nhanh hơn 12%
mlx_example/open_elmlà bản port MLX của mô hình OpenELM được huấn luyện bằng CoreNet. MLX là framework deep learning của Apple có tính chất tương tự PyTorch và được tối ưu cho phần cứng dựa trên Apple SiliconLợi thế có vẻ là có thêm mức tăng tốc nhờ chuyên biệt cho Apple Silicon. Với các mô hình nhỏ, đây cũng có thể là framework huấn luyện mạng nơ-ron sâu tiết kiệm điện năng nhất, nhưng phải có benchmark thực tế mới biết được
Kho này có nhiều tiện ích thuận tiện, cũng như khá nhiều phần triển khai gọn gàng cho các mô hình phổ biến và chỉ số đánh giá
Nói cách khác, nó có vẻ phù hợp để viết mô hình mới hơn là để suy luận
Sẽ thật tốt nếu có một LLM agent có thể tạo ổn định các ví dụ API nhỏ cho nhiều mô hình và cách sử dụng trong những kho kiểu này
Tôi tò mò liệu nó có hỗ trợ huấn luyện trên Apple Silicon không. Nếu không phải tôi bỏ sót trong README thì điều đó không rõ ràng lắm
Trừ khi họ có máy chủ riêng không công khai dựa trên Apple Silicon để tự huấn luyện
Nhìn qua các thư mục, có vẻ có nhiều lớp chỉ kế thừa các lớp PyTorch và torchvision mà không làm gì mới
Tất cả optimizer, scheduler và phần lớn các layer đều theo kiểu đó. Tuy nhiên có khá nhiều block là tổ hợp layer từ nhiều bài báo, tương tự
monai.networks.blocksVề mặt “thành phần cấu thành”, cũng có một vài loss function và chỉ số đánh giá được triển khai mới
Tôi tò mò mọi người khuyên dùng thư viện nào để huấn luyện và suy luận mạng nơ-ron trên Apple M1. Tôi muốn dùng từ C++ hoặc Rust, và mạng nơ-ron dự kiến tối đa khoảng 5 triệu tham số