- vừa được xem lúc

ClickHouse at OpenAI: Scaling ClickHouse to Petabytes of Logs cách mà sửa một dòng code có thể thay đổi thế giới

0 0 1

Người đăng: Nguyễn Đình Nghĩa

Theo Viblo Asia

Đôi khi trong cuộc đời việc sửa một dòng code có thể thay đổi cả một chương trình, và cả một chương trình có thể sụp đổ bởi vì một dòng code.

Tại OpenAI, việc phát triển các mô hình AI và ChatGPT đồng nghĩa với việc xử lý một lượng dữ liệu khổng lồ. Đặc biệt, dữ liệu log là xương sống của hệ thống quan sát (observability), giúp các nhà nghiên cứu và kỹ sư hiểu rõ những gì đang xảy ra trong môi trường hoạt động phức tạp của họ. Nhưng làm thế nào để một tổ chức như OpenAI quản lý hàng petabyte dữ liệu log, với tốc độ tăng trưởng hơn 20% mỗi tháng?

Hãy tưởng tượng một lượng dữ liệu log lên đến petabyte mỗi ngày. Để dễ hình dung, 10 petabyte dữ liệu tương đương với 500 Thư viện Quốc hội Hoa Kỳ chứa đầy sách hoặc hai tỷ bức ảnh iPhone. Với tốc độ tăng trưởng liên tục, thách thức này đòi hỏi một giải pháp thực sự mạnh mẽ và linh hoạt.

Dữ liệu log có cấu trúc đa dạng, bao gồm các trường có cấu trúc rõ ràng như dấu thời gian (timestamp) và ID theo dõi (trace ID), cùng với phần nội dung là dữ liệu văn bản thuần túy. Người dùng có nhu cầu truy vấn đa dạng: từ việc tìm kiếm tất cả các log cho một ID yêu cầu cụ thể, nhóm log theo mã trạng thái, cho đến tìm kiếm các chuỗi văn bản tùy ý. Các nhà nghiên cứu cần theo dõi độ chi tiết cao khi huấn luyện hàng tỷ mô hình trên hàng triệu GPU, trong khi các kỹ sư cần đảm bảo SLA (Thỏa thuận mức dịch vụ) cho các ứng dụng như ChatGPT, vốn đang tăng trưởng nhanh chóng hơn bất kỳ ứng dụng nào.

OpenAI xử lý vấn đề như thế nào?

Câu trả lời của họ là ClickHouse. Vấn đề là sai sao họ chọn?

OpenAI đã chọn ClickHouse vì một số lý do quan trọng sau:

  • Mã nguồn mở: ClickHouse là mã nguồn mở, loại bỏ sự phụ thuộc vào nhà cung cấp và cho phép OpenAI xem xét mã nguồn khi có vấn đề. Điều này rất quan trọng khi khắc phục sự cố.

  • Khả năng mở rộng ngang và Điện toán đám mây (Cloud-Native): ClickHouse có thể dễ dàng mở rộng để xử lý cả việc nhập (ingest) và truy vấn dữ liệu, giúp giảm thiểu công sức vận hành.

  • Hỗ trợ lập index linh hoạt: Cơ sở dữ liệu này hỗ trợ nhiều loại index khác nhau, cho phép OpenAI tối ưu hóa tốc độ truy vấn cho các trường hợp sử dụng đa dạng, hoặc vô hiệu hóa các index làm chậm quá trình nhập dữ liệu. Sự linh hoạt này rất quan trọng để mở rộng quy mô.

  • Cơ sở dữ liệu SQL: Là một cơ sở dữ liệu SQL, ClickHouse dễ tích hợp vì SQL là chuẩn chung dễ dàng sử dụng

  • Đã được kiểm chứng thực tế (Battle-Tested): Nhiều công ty đối tác khác cũng sử dụng ClickHouse cho trường hợp sử dụng tương tự, đảm bảo có sự hỗ trợ mạnh mẽ và đây là công cụ phù hợp cho công việc.

Kiến Trúc Hoạt Động tại OpenAI

OpenAI triển khai một hệ thống quản lý log, sử dụng các phần mềm như Fluent Bit trên mỗi máy để thu thập log từ container và chuyển chúng đến ClickHouse. Họ vận hành một cụm ClickHouse với 90 shards, mỗi shard có hai bản sao (replicas).

Để tối ưu hóa hiệu suất và chi phí, dữ liệu log được phân tầng lưu trữ:

  • 80% truy vấn của người dùng chỉ tập trung vào dữ liệu được tạo ra trong hai ngày gần nhất, nên dữ liệu này được lưu trữ trực tiếp trên đĩa (on disk).

  • Tất cả dữ liệu cũ hơn được lưu trữ trong bộ nhớ blob (blob storage). ClickHouse, với bản chất cloud-native, tự động trừu tượng hóa cấu trúc lưu trữ phân cấp này, giúp các nhà phát triển SQL không cần quan tâm dữ liệu đang nằm ở đâu.

Thách Thức Thực Tế: Sự Cố Ngày 25 Tháng 3 2025 Mọi thứ đã diễn ra suôn sẻ cho đến ngày 25 tháng 3 năm nay . Sau khi OpenAI ra mắt tính năng tạo hình ảnh trong GPT-4o, lượng log đã tăng đột biến 50% chỉ sau một đêm. Điều này đã làm cạn kiệt CPU headroom (không gian CPU còn lại để xử lý) và khiến ClickHouse trở nên "rất không vui". Hệ thống bắt đầu báo lỗi "hết bộ nhớ" (out of memory errors), quá trình nhân bản (replication) bị chậm lại, và tất cả các chỉ số quan trọng đều tệ. Các biện pháp khẩn cấp ban đầu bao gồm:

  • Thêm một bản sao truy vấn thứ ba và chỉ định nó chỉ dành cho truy vấn, nhằm tránh các truy vấn tốn kém làm ảnh hưởng đến quá trình nhập dữ liệu.
  • Phân tích chi tiết các log theo dịch vụ, cluster, tên container để tìm cách lấy mẫu dữ liệu (sampling) .

Giải Pháp Đột Phá: Tối Ưu Hóa Bloom Filter Tuy nhiên, những biện pháp trên vẫn chưa đủ. OpenAI đã quyết định đi sâu vào profiling ClickHouse. Họ phát hiện ra rằng ClickHouse đang dành hơn 50% thời gian để xây dựng các Bloom filters khi nhập dữ liệu mới. Bloom filter là một loại index giúp nhanh chóng xác định xem một giá trị có thể tồn tại trong một cột hay không mà không cần quét toàn bộ hàng, giúp tăng tốc truy vấn đáng kể. Bài viết trong link về bloom filter rất hay các bạn nên đọc nó.

Phân tích mã nguồn của ClickHouse đã hé lộ điểm nghẽn bất ngờ: một phép chia đơn lẻ trong quá trình xây dựng Bloom filter mà trình biên dịch không thể tối ưu hóa. Phép chia này chậm hơn tới 30 lần so với phép cộng hoặc các phép toán bitwise. Vấn đề là phép chia này lặp đi lặp lại với cùng một số mỗi khi một phần tử được thêm vào Bloom filter, bằng cách chia hàm băm của phần tử cho kích thước của mảng. Chú ý trong code là phép module (%) nhưng bản chất chạy trong CPU của nó là phép chia

image.png

image.png

Giải pháp mà OpenAI đã triển khai là thay thế phép chia này bằng cách xấp xỉ nó bằng phép nhân và dịch bit (multiplication and bit shifts). Điều này có thể thực hiện được vì kích thước của mảng (số bị chia) là một hằng số đã biết trước, cho phép họ "tính toán cần phải nhân với bao nhiêu và dịch bao nhiêu bit để có được cùng một phép toán chính xác" ("compute how much you have to multiply by and how many bits you need to shift and get the exact same operation")

Họ chỉ thực hiện một thay đổi nhỏ, gần như là một dòng code, vá ClickHouse và triển khai. Kết quả ngay lập tức là giảm 40% mức sử dụng CPU. Thay đổi này sau đó đã được đóng góp ngược vào mã nguồn chính thức của ClickHouse và sẽ có mặt trong phiên bản tiếp theo. Điều này minh chứng cho lợi ích to lớn của việc sử dụng phần mềm mã nguồn mở. Nếu Clickhouse là nguồn đóng thì chịu nên mã nguồn mở cũng có cái hay của nó.

image.png

Câu chuyện của OpenAI với ClickHouse là một minh chứng hùng hồn cho khả năng của một cơ sở dữ liệu mã nguồn mở trong việc xử lý khối lượng dữ liệu khổng lồ và giải quyết các thách thức kỹ thuật phức tạp nhất. Khả năng mở rộng, tính linh hoạt và đặc biệt là bản chất mã nguồn mở của ClickHouse đã giúp OpenAI không chỉ vượt qua một khủng hoảng lớn mà còn tiếp tục xây dựng nền tảng vững chắc cho sự phát triển vượt bậc của mình trong lĩnh vực AI

Các bạn có thể xem code sửa tại đây

image.png

Nguồn tại đây nhé https://www.youtube.com/watch?v=yIVz0NKwQvA&list=TLGGl4cifHZF6KYwOTA3MjAyNQ&t=510s

Với công ty mình việc chuyển sang ClickHouse cũng giúp việc xử lý các báo cáo và dữ liệu giảm xuống từ hàng tuần, hàng giờ xuống hàng phút hàng giây. Vì vậy nếu các bạn cần hệ thống truy vấn siêu nhanh có thể cân nhắc tới loại DB này.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Mô hình quan hệ - thực thể (Entity – Relationship Model)

Mô hình quan hệ thực thể (Entity Relationship model - E-R) được CHEN giới thiệu vào năm 1976 là một mô hình được sử dụng rộng rãi trong các bản thiết kế cơ sở dữ liệu ở mức khái niệm, được xây dựng dựa trên việc nhận thức thế giới thực thông qua tập các đối tượng được gọi là các thực thể và các mối

0 0 146

- vừa được xem lúc

[Embulk #1] Công cụ giúp giảm nỗi đau chuyển đổi dữ liệu

Embulk là gì. Embulk là một công cụ open source có chức năng cơ bản là load các record từ database này và import sang database khác.

0 0 73

- vừa được xem lúc

Window Functions trong MySQL, Nâng cao và cực kì hữu dụng (Phần II).

Chào mọi người, lại là mình đây, ở phần trước mình đã giới thiệu với mọi người về Window Functions Phần I. Nếu chưa rõ nó là gì thì mọi người nên đọc lại trước nha, để nắm được định nghĩa và các key words, tránh mắt chữ O mồm chứ A vì phần này mình chủ yếu sẽ thực hành với các Window Functions.

0 0 124

- vừa được xem lúc

Window Functions trong MySQL, Nâng cao và cực kì hữu dụng (Phần I).

Chào mọi người, mình mới tìm hiểu đc topic Window Functions cá nhân mình cảm thấy khá là hay và mình đánh giá nó là phần nâng cao. Vì ít người biết nên Window Functions thấy rất ít khi sử dụng, thay vì đó là những câu subquery dài dằng dặc như tin nhắn nhắn cho crush, và người khác đọc hiểu được câu

0 0 996

- vừa được xem lúc

Disable và Enable trigger trong Oracle

Origin post: https://www.tranthanhdeveloper.com/2020/12/disable-va-enable-trigger-trong-oracle.html.

0 0 55

- vừa được xem lúc

Lưu trữ dữ liệu với Data Store

. Data Store là một trong những componet của bộ thư viện Android JetPack, nó là một sự lựa chọn hoàn hảo để thay thế cho SharedPreferences để lưu trữ dữ liệu đơn giản dưới dạng key-value. Chúng ta cùng làm một so sánh nhỏ để thấy sự tối ưu của Data Store với SharedPreferences nhé.

0 0 82