Xây dựng Labeler NearBy
Table of Contents
Hackathon Đầu Tiên Của Tôi
Trong những phần cuối của mùa hè năm 2022, tôi thực sự muốn làm việc trên một dự án thú vị. Tôi vừa hoàn thành bằng cử nhân và đang làm việc toàn thời gian với vai trò kỹ sư phần mềm. Tôi thực sự muốn cam kết cho một dự án phụ và vào thời điểm đó, tôi có đủ thời gian rảnh để làm điều đó. Tôi thực sự không biết nên làm gì, cho đến khi tôi phát hiện một trang web có tên Devpost vào tháng 8 năm 2022. Devpost là một trang web tổ chức các cuộc thi phần mềm gọi là hackathon. Khi duyệt Devpost, tôi đã phát hiện một hackathon có tên NEAR MetaBUILD III được tổ chức bởi tổ chức NEAR Protocol.
NEAR là gì?
NEAR Protocol là một blockchain hỗ trợ hợp đồng thông minh và tiền điện tử NEAR. Nó chủ yếu được biết đến vì có phí giao dịch rất thấp, hỗ trợ hợp đồng thông minh, có mạng thử nghiệm chính thức của riêng nó, và một môi trường phát triển tuyệt vời do thực tế là bạn có thể viết hợp đồng thông minh bằng Rust và/hoặc JavaScript. Bạn có thể có cái nhìn tổng quan tốt hơn về NEAR Protocol thông qua video tuyệt vời của CoinGecko:
Trong thời gian này, Coinbase chính thức bắt đầu hỗ trợ NEAR Protocol như một đồng có thể giao dịch trên nền tảng của họ. Điều này là một vấn đề lớn bởi vì Coinbase được biết đến là rất khắt khe khi chọn những đồng họ hỗ trợ trên nền tảng. Điều này giúp làm cho NEAR trở thành một nền tảng đáng tin cậy hơn. Bạn vẫn có thể giao dịch NEAR trên Coinbase cho đến ngày hôm nay.
Tại sao tham gia?
Sau khi dành thời gian suy nghĩ, tôi quyết định dành thời gian của mình để tham gia vào hackathon NEAR MetaBUILD III. Lý do của tôi là:
- Crypto sẽ không biến mất và là một công nghệ sẽ tồn tại. Vì vậy việc dành thời gian để học công nghệ này là hợp lý.
- Hackathon có phần thưởng lớn, từ $20,000 đến $100,000 bằng NEAR nếu bạn là một trong những người chiến thắng.
- Hackathon có một thời hạn cụ thể, có nghĩa là dự án không thể kéo dài trong nhiều tháng như nhiều dự án phụ thường làm.
- Dự án sẽ là một trải nghiệm học tập tuyệt vời và là một sự giới thiệu tốt về hackathon.
- Trong trường hợp xấu nhất, hackathon sẽ cho tôi cơ hội tạo ra một dự án tuyệt vời để đưa vào hồ sơ xin việc.
Với tất cả những điều này trong đầu, tôi đã gọi cho người bạn thân thời đại học vào ngày 26 tháng 8 năm 2022 và chúng tôi bắt đầu lên kế hoạch cho hackathon này. Hackathon dự kiến sẽ bắt đầu vào ngày 23 tháng 9 năm 2023 và kết thúc vào ngày 21 tháng 11 năm 2022. Mặc dù hạn chót đã được kéo dài đến ngày 24 tháng 11 năm 2023 vào cuối hackathon. Vì chúng tôi sớm hơn 1 tháng, chúng tôi quyết định dành thời gian này để học và thảo luận ý tưởng sẽ làm gì cho hackathon 2 tháng này. Trong tháng đầu tiên đó, chúng tôi có cái nhìn tổng quan về crypto và blockchain. Chúng tôi xem lại và thực hành trên testnet của NEAR, xem xét NEAR SDK, và deploy một vài hợp đồng thông minh.
Ý tưởng
Sau khi có một sự giới thiệu tuyệt vời về mọi thứ liên quan đến blockchain và NEAR, chúng tôi bắt đầu thảo luận ý tưởng. Tôi muốn dự án này là thứ không chỉ là một “dự án hackathon”, mà có thể trở thành một sản phẩm mà người khác có thể sử dụng và đóng vai trò ví dụ về cách crypto có thể hữu ích cho những thứ ngoài việc giao dịch.
Với suy nghĩ này, ban đầu chúng tôi quyết định tạo thứ gì đó tương tự như Unreal Engine Blueprint, nhưng để dễ dàng tạo và triển khai hợp đồng thông minh trên blockchain NEAR mà không cần lập trình. Tuy nhiên, một tuần trước khi hackathon bắt đầu, chúng tôi bỏ ý tưởng đó vì nó đơn giản là không hợp lý. Tại sao ai đó lại mất công sử dụng công cụ của chúng tôi để tạo hợp đồng thông minh NEAR nếu chưa có trường hợp sử dụng thực tế cho chúng? Nó sẽ giống như phát triển một công cụ mà nhiều người không cần.
Chỉ còn một tuần trước khi hackathon bắt đầu, chúng tôi bắt đầu động não lại và quyết định ý tưởng sau:
A decentralized platform where AI researchers can outsource
data labeling to labelers around the world
Chúng tôi đặt tên cho dự án là “Labeler NearBy.” Quyết định chọn ý tưởng này của chúng tôi dựa trên các lý do sau:
- Phát triển AI đòi hỏi con người gán nhãn dữ liệu để huấn luyện.
- Tìm và quản lý những người có kỹ năng để gán nhãn các bộ dữ liệu cụ thể là điều thách thức.
- Ý tưởng này đã được hiện thực thành công bởi một công ty có tên Scale AI, như được chứng minh bởi cách họ tìm thấy product-market fit.
- Các dịch vụ tập trung như Scale AI gây lo ngại khi các tổ chức phải gửi dữ liệu của họ cho công ty gán nhãn, sau đó công ty này thuê ngoài người gán nhãn trên toàn cầu. Sau quá trình gán nhãn, công ty trả lại dữ liệu đã được gán cho tổ chức. Điều này từ bỏ quyền kiểm soát dữ liệu huấn luyện có giá trị, dữ liệu có thể được công ty gán nhãn sử dụng để huấn luyện mô hình của họ. Phi tập trung hóa dịch vụ này có vẻ là một giải pháp hợp lý.
- Chúng tôi tìm thấy rất ít dự án trong không gian ứng dụng phi tập trung (dApp) đang làm việc trên ý tưởng này, mang lại cơ hội cho chúng tôi đổi mới và đi tiên phong trong lĩnh vực này.
Để giúp giảm độ phức tạp, chúng tôi quyết định rằng Labeler NearBy sẽ chỉ hỗ trợ dữ liệu hình ảnh trong thời điểm hiện tại.
Nộp Bài
Với ý tưởng đã chọn và hackathon chính thức bắt đầu, tôi và bạn tôi bắt đầu xây dựng Labeler NearBy. Chúng tôi làm việc trên dự án trong 2 tháng cho đến khi nộp bản thảo cuối cùng của dự án lên Devpost vào ngày 24 tháng 11 năm 2022. Chúng tôi nộp dự án trên Devpost và cũng tạo một bản sao của phần nộp trên Github. Blog này không bao phủ mọi khía cạnh kỹ thuật và quy trình phát triển của Labeler NearBy. Biết điều này, để tìm hiểu thêm về cách Labeler NearBy hoạt động hoặc để xem phần nộp cuối cùng của chúng tôi, vui lòng truy cập một trong các liên kết sau:
Labeler NearBy bao gồm hai codebase: ln-researcher và ln-labeler. Các codebase này hoàn toàn mã nguồn mở theo giấy phép MIT và có thể được xem qua các liên kết sau:
Dưới đây là tổng quan chung về cách Labeler NearBy (LN) sẽ hoạt động:
Một nhà nghiên cứu cần các hình ảnh đã được gán nhãn để huấn luyện mô hình AI của họ. Để làm điều này, nhà nghiên cứu sử dụng LN để lưu trữ dữ liệu của họ và cung cấp phương thức cho các labeler để gán nhãn dữ liệu đó. Điều này được thực hiện thông qua ln-researcher, một dịch vụ web tự lưu trữ bao gồm một API, các hợp đồng thông minh của nhà nghiên cứu, và một cơ sở dữ liệu Postgres cục bộ. Đối với người gán nhãn, một giao diện web được (sẽ được) cung cấp, cho phép họ truy cập và gán nhãn các hình ảnh của nhà nghiên cứu. Trong quá trình được gán nhãn, một hình ảnh được gán nhãn ba lần bởi các labeler khác nhau. Chỉ labeler có nhãn tốt nhất, được xác định thông qua hệ thống bỏ phiếu, mới được thưởng NEAR coin. Ứng dụng web chịu trách nhiệm cho quá trình này được gọi là ln-labeler. Nhà nghiên cứu tài trợ cho mỗi hoạt động gán nhãn, và NEAR coin có thể dễ dàng đổi thành đô la thông qua Coinbase. Tất cả logistics giao dịch được xử lý bởi các hợp đồng thông minh được lưu trữ trên blockchain NEAR Protocol.
Bạn có thể xem video demo của Labeler NearBy cho hackathon tại đây:
Thành tựu lớn nhất
Tính năng mà tôi tự hào nhất khi triển khai là một hàm có tên getImage(). Hàm này đóng vai trò như một endpoint API trong ln-researcher và đóng một vai trò then chốt trong đường ống dữ liệu giữa nhà nghiên cứu và các labeler trong Labeler NearBy (LN).
Endpoint API này cho phép các nhà nghiên cứu phân phối hình ảnh của họ để gán nhãn một cách an toàn và đáng tin cậy. Các nhiệm vụ gán nhãn được quản lý thông qua một hợp đồng thông minh NEAR trên blockchain NEAR Protocol trong khi dữ liệu hình ảnh được lưu trữ bởi nhà nghiên cứu thông qua ln-researcher.
Endpoint thực hiện một loạt các kiểm tra bảo mật để đảm bảo rằng chỉ labeler được phân công mới có thể truy cập hình ảnh. Điều này bao gồm xác minh chữ ký của yêu cầu và kiểm tra hợp đồng thông minh liên quan để xác nhận sự tồn tại của nhiệm vụ và việc gán nhiệm vụ đó cho labeler đang yêu cầu.
Khi yêu cầu được xác thực trong API tự lưu trữ ln-researcher của nhà nghiên cứu, hàm truy xuất hình ảnh từ cơ sở dữ liệu Postgres cục bộ, mã hóa hình ảnh, và chuyển giao nó cho labeler được ủy quyền, người sau đó có thể giải mã hình ảnh để gán nhãn. Đồng thời, hàm cập nhật trạng thái của hình ảnh trong cơ sở dữ liệu, biểu thị tiến trình của việc gán nhãn hình ảnh. Trong suốt quá trình này, khóa RSA từ cả nhà nghiên cứu và labeler được dùng để xác thực. Trong khi đó, mã hóa AES được dùng để mã hóa hình ảnh.
Endpoint này đóng vai trò quan trọng trong việc quản lý việc phân phối hình ảnh một cách an toàn và có kiểm soát từ nhà nghiên cứu đến labeler. Nó đảm bảo việc truyền dữ liệu an toàn và theo dõi cũng như quản lý hiệu quả quy trình gán nhãn hình ảnh. Ngoài ra, quy trình này có tiềm năng loại bỏ nhu cầu sử dụng HTTPS, ít nhất là cho endpoint này.
Endpoint/hàm cụ thể này đã được thử nghiệm và chứng minh là hoạt động. Dưới đây là sơ đồ minh họa chức năng tổng thể của Labeler NearBy, bao gồm hình minh họa rõ ràng về cách endpoint/hàm nói trên hoạt động:
Kết quả
Thật đáng tiếc, thực tế buồn là chúng tôi không thể hoàn thành đầy đủ dự án này trước hạn chót của hackathon. Phần lớn dự án đã được hoàn thành, chẳng hạn như ln-researcher, nhưng phần frontend (ln-labeler) thì chưa hoàn thành và chúng tôi không thể triển khai bản demo trực tiếp. Dù backend (ln-researcher) về cơ bản đã hoàn thành, nhưng không có frontend hoạt động đúng chức năng và không có bản demo trực tiếp, nên không ai có thể thử ý tưởng của Labeler NearBy. Không chỉ vậy, các giám khảo cũng không thể thử dự án mà thay vào đó phải đọc phần nộp, xem mã, và/hoặc cố gắng chạy nó tự họ. Điều này khiến cơ hội chiến thắng của chúng tôi về cơ bản giảm xuống còn gần như không. Điều này được xác nhận vào ngày 15 tháng 12 năm 2022 khi các người chiến thắng hackathon được công bố, và chúng tôi không có trong số đó.
Thất bại
Tôi sẽ không giấu rằng kết quả cuối cùng từ hackathon này đã khiến tôi nản lòng. Nhiều tháng đã được đầu tư vào dự án này và tôi đã có một tầm nhìn lớn cho dự án vì tôi nghĩ nó sẽ cung cấp một công cụ rất hữu ích cho các nhà nghiên cứu.
Tôi có một tiêu chuẩn rõ ràng cho các dự án tôi đảm nhiệm: hoặc chúng thành công hoặc thất bại; không có mức trung gian. Vì vậy dự án này là một thất bại vì nó không được hoàn thành đầy đủ trước hạn chót và vẫn không thể truy cập được bởi những người dùng tiềm năng.
Nhưng điều quan trọng là phải nhớ rằng thất bại là một phần tự nhiên của cuộc sống. Những thành công của chúng ta được xây dựng trên những bài học từ thất bại. Mặc dù kết quả của hackathon này gây nản lòng, nó vẫn cung cấp những hiểu biết quý giá khi phát triển và xây dựng một dự án/sản phẩm.
Bài học rút ra
Những bài học chính tôi rút ra từ trải nghiệm này như sau:
- Dự án chúng tôi chọn yêu cầu xây dựng nhiều tính năng ngay từ đầu trước khi chúng tôi có thể lặp lại trên nó. Ý tôi là gì? Dự án này đòi hỏi hầu như tất cả các thành phần của ý tưởng phải được xây dựng xong trước khi chúng tôi thậm chí có thể thử ý tưởng đó. Sẽ hợp lý hơn nếu chọn một dự án có ít thành phần thiết yếu hơn để hoạt động. Làm như vậy, chúng tôi có thể xây dựng các thành phần thiết yếu nhanh hơn rồi lặp lại trên dự án sớm hơn. Nhờ đó, chúng tôi có thể đạt được hạn chót dễ hơn và tạo ra một dự án có thể đơn giản hơn nhưng hoàn thiện hơn. YC, một chương trình tăng tốc khởi nghiệp công nghệ, nhấn mạnh rằng bạn nên phát hành nhanh, nói chuyện với người dùng, và lặp lại. Chúng tôi đáng lẽ nên làm điều đó với dự án của mình cho hackathon này.
- Chúng tôi đã đánh giá thấp thời gian cần thiết để xây dựng dự án này. Đây là hackathon đầu tiên của chúng tôi và là lần đầu tiên chúng tôi tạo một ứng dụng phi tập trung (dapp). Không chỉ vậy, tôi đang làm việc toàn thời gian với tư cách kỹ sư phần mềm và bạn tôi đang hoàn thành bằng Thạc sĩ. Tuy nhiên, chúng tôi nghĩ 2 tháng là đủ. Sẽ hợp lý hơn nếu thu hẹp phạm vi dự án và/hoặc tìm thêm một thành viên nhóm nữa để giảm khối lượng công việc cho chúng tôi.
- Winston Churchill nổi tiếng đã nói: “Sự hoàn hảo là kẻ thù của tiến bộ”. Tôi đã đối xử với dự án này như một sản phẩm hướng tới khách hàng (B2C), trong khi thực tế đây chỉ là một dự án hackathon và nhiều nhất chỉ là một sản phẩm khả dụng tối thiểu (MVP). Vì vậy ở giai đoạn đầu, tôi đã lãng phí quá nhiều thời gian cho những chi tiết nhỏ khi đáng lẽ tôi nên tập trung thời gian vào việc làm cho các tính năng lõi hoạt động đủ tốt.
Bên cạnh những bài học quý giá này, tôi đã học được những kỹ năng mới vốn rất quý báu cả trong các dự án cá nhân bên lề và nỗ lực nghề nghiệp. Những kỹ năng này bao gồm:
- Phát triển API thông qua Node.js, JavaScript và Express.js
- Thiết lập và sử dụng PostgreSQL để quản lý dữ liệu
- Tích hợp PostgresSQL vào phát triển API bằng cách sử dụng các package như PG.
- Sử dụng RSA (mã hóa bất đối xứng) và AES (mã hóa đối xứng) để tăng cường bảo mật dữ liệu.
Kết luận
Nhìn chung, tôi vui vì chúng tôi đã tham gia hackathon này, dù khá thất vọng với kết quả cuối cùng. Tôi biết ơn những bài học và kỹ năng quý giá mà tôi có được khi làm việc trên Labeler NearBy, vì chúng đã khiến tôi trở thành một nhà phát triển tốt hơn và đóng góp đáng kể vào phát triển dự án tiếp theo của tôi: Notify-Cyber.
Ghi chú khác
- Tôi có thể quay lại với Labeler NearBy, nhưng trong thời gian này, dự án này đang ở “tạm ngưng dài hạn”
- Hiện tại, Labeler NearBy CHỈ nên chạy trên mạng testnet của NEAR. Nó cần được phát triển, kiểm thử và kiểm toán thêm.