Phần cứng được sử dụng trong trận đấu AlphaZero vs Stockfish


22

Tôi hiểu rằng AlphaZero phải sử dụng một loại phần cứng khác với Stockfish thông thường. Tôi hy vọng rằng phần cứng có ảnh hưởng lớn đến sức mạnh động cơ. Đó là lý do tại sao tôi tự hỏi liệu đã có bất kỳ nỗ lực nào được thực hiện để cung cấp phần cứng tương đương cho cả hai. Ngoài ra "so sánh" có nghĩa là gì ở đây?

Cụ thể tôi đọc mà mọi người phàn nàn về:

  • Stockfish chỉ được cung cấp 1 GB bộ nhớ cache và
  • thời gian giới hạn là 1 phút / lần di chuyển (Làm thế nào điều này sẽ gây bất lợi cho Stockfish?)

Kích thước băm , không phải bộ nhớ cache, rõ ràng.
Federico Poloni

2
Tôi mạnh mẽ đề nghị hỏi này trên một diễn đàn kỹ thuật (như stack Trao đổi AI , có lẽ với tựa đề "Công bằng đánh giá trong AlphaZero vs trận đấu cá hồi phơi khô không có muối"), bởi vì câu trả lời ở đây là không tốt.
Veedrac

Câu trả lời:


20

Đó là lý do tại sao tôi tự hỏi liệu đã có bất kỳ nỗ lực nào được thực hiện để cung cấp phần cứng tương đương cho cả hai.

Đây là Google bạn đang nói về! Vì vậy, câu trả lời rõ ràng là "Không".

Từ phần cứng giấy ban đầu được sử dụng để khởi tạo và đào tạo -

Quá trình đào tạo đã tiến hành 700.000 bước (các lô nhỏ có kích thước 4.096) bắt đầu từ các tham số được khởi tạo ngẫu nhiên, sử dụng 5.000 TPU thế hệ thứ nhất (15) để tạo các trò chơi tự chơi và 64 TPU thế hệ thứ hai để huấn luyện các mạng thần kinh

và phần cứng được sử dụng cho các trò chơi -

AlphaZero và AlphaGo Zero trước đó đã sử dụng một máy duy nhất với 4 TPU Stockfish và Elmo chơi ở cấp độ kỹ năng mạnh nhất của họ bằng cách sử dụng 64 luồng và kích thước băm là 1GB.

Vì vậy, AlphaZero đã sử dụng phần cứng đặc biệt được phát triển bởi Google. Nó đã sử dụng các Bộ xử lý Tenor chuyên dụng (TPU) thay vì các Bộ xử lý trung tâm (CPU) chung như có sẵn trên thị trường.

Đây là cách Wikipedia mô tả các TPU thế hệ thứ hai mà họ đã sử dụng -

TPU thế hệ thứ hai được công bố vào tháng 5 năm 2017. Google cho biết thiết kế TPU thế hệ đầu tiên bị giới hạn băng thông bộ nhớ và sử dụng Bộ nhớ băng thông cao 16 GB trong thiết kế thế hệ thứ hai tăng băng thông lên 600 GB / giây và hiệu suất lên 45 TFLOPS. Các TPU sau đó được sắp xếp thành các mô-đun 180 TFLOPS 4 chip

Họ đã sử dụng 4 TPU cho các trò chơi, do đó khả năng xử lý 180 TFLOPS. Lưu ý TFLOPS = 1000 tỷ thao tác dấu phẩy động mỗi giây.

Để so sánh, con chip mạnh nhất mới nhất của Intel là bộ xử lý Core i9 Extreme Edition có xung nhịp ở 1 TFLOP. Đầu dòng I7 mà bạn sẽ tìm thấy trong một máy chơi game thường có khoảng 100 GFLOP (tức là một phần mười của TFLOP).

Tôi nghĩ thật công bằng khi nói rằng AlphaZero đã sử dụng một con khỉ đột nặng 800 pound cấu hình phần cứng so với chuột Stockfishes.


1
FLOPS là viết tắt của các hoạt động điểm nổi mỗi giây. Số học dấu phẩy động có lẽ hoàn toàn không được sử dụng trong các thuật toán cốt lõi của Stockfish và AlphaZero. Vì vậy, số lượng FLOPS không thực sự là thước đo tốc độ bộ xử lý có ý nghĩa liên quan đến động cơ cờ vua.
René Pijl

9
Ngược lại, tôi tin rằng mạng lưới thần kinh sử dụng số học dấu phẩy động khá mạnh mẽ. (Nhưng tất nhiên nhận xét của bạn có ý nghĩa hoàn hảo và áp dụng cho Stockfish.)
Federico Poloni

3
Một so sánh apt hơn nhiều sẽ là với GPU; NVIDIA Tesla V100 có thể thực hiện 120 TFLOPS, tăng so với thế hệ trước (P100) chỉ làm được khoảng 20. CPU được tối ưu hóa rất khác so với GPU có số lượng lớn.
Nick T

12

Tôi nghĩ sẽ tốt nhất nếu tôi giải thích điểm thứ hai của bạn bằng một ví dụ di chuyển trong trò chơi 1 giữa AlphaZero và Stockfish cũng phục vụ để thỏa mãn sự tò mò của tôi ngày hôm nay.

thời gian giới hạn là 1 phút / lần di chuyển (Làm thế nào điều này sẽ gây bất lợi cho Stockfish?)

Hiệu suất của Stockfish phụ thuộc vào cả giới hạn thời gian cấu hình phần cứng, vì vậy chỉ cần nghĩ đến khi ai đó nhân đôi luồng CPU, thì Stockfish cần ít thời gian hơn (không nhất thiết phải một nửa) để tìm giải pháp so với cấu hình đầu tiên.

Trong báo cáo đầu tiên được đăng trên Chess.com, một người nào đó đã tuyên bố rằng Stockfish không chơi tối ưu vì anh ta không thể sao chép các kết quả tương tự bằng cách sử dụng cùng Stockfish trên máy tính của mình. Ông nói rằng ở vị trí bên dưới (trò chơi 1 - di chuyển 11) Stockfish đã chơi Kg1-h1 (di chuyển vị vua của nó) mà không có ý nghĩa gì cả. Mặt khác, stockfish trên máy tính của anh ấy cho thấy một động thái phát triển hơn như Be3 (di chuyển vị giám mục hình vuông tối), hãy nhìn vào vị trí:

Trò chơi 1 khi di chuyển 11

Vâng, đó là một động thái thụ động và có vẻ như Stockfish nên đã chơi một động thái phát triển hơn. Nhưng anh đã sai. Tại sao? Bởi vì anh ta đã chạy Stockfish trong 15 giây, và nếu anh ta chạy nó trong một giờ, anh ta sẽ nhận được Kg1-h1 là bước di chuyển tốt nhất ở vị trí đó. Stockfish thay đổi quyết định của nó khi nó phân tích tất cả các động thái có thể có chiều sâu hơn. Đây là những gì ban đầu tôi đã nói trong bài trả lời của mình :

Tôi đã chạy con cá mới nhất ở vị trí này (ở bước 11):

  • Lúc đầu, nó cho b4 là bước di chuyển tối ưu khi động cơ hoạt động khoảng một phút. Sau đó, nó quyết định Be3 là tốt hơn.
  • Nhưng sau 5 phút trên phần cứng của tôi chạy trên 1.400k nút / giây, nó sẽ quyết định đi với Kh1 là bước đi tối ưu.

  • Trong bài báo, người ta nói rằng stockfish tính toán 70.000k vị trí mỗi giây và được chạy trong 1 phút mỗi lần di chuyển, gấp khoảng 50 lần phần cứng của tôi, vì vậy tôi sẽ để tôi chạy trong 50 phút ... Kg1-h1 vẫn là sự lựa chọn cho Stockfish.

Giới hạn thời gian là chìa khóa

Trong trường hợp trên, có lẽ không có vấn đề gì nhiều nếu Stockfish chạy gấp đôi thời gian vì quyết định sẽ giống nhau, nhưng ở bước tiếp theo, nó chắc chắn sẽ :

nhập mô tả hình ảnh ở đây

Ở vị trí này, Stockfish đã chọn di chuyển con tốt ở phía bên trái ( a4-a5 ). Giả sử tôi có một máy tính chạy động cơ Stockfish với tốc độ 1.400k nút mỗi giây, thấp hơn khoảng 50 lần so với Stockfish trong trò chơi thực ( Trong bài báo , nó có ghi 70.000kn / giây). Vì vậy, tôi có thể mô phỏng trò chơi nếu tôi chạy nó trong 50 phút cho mỗi lần di chuyển. Đuợc.

Tôi đã chạy phân tích Stockfish ở vị trí trên và tôi đã nhận được kết quả như sau:

  • Stockfish bắt đầu đề xuất một số động thái, nhưng sau 6 phút trên máy tính của tôi (tương ứng với 7,2 giây trên Stockfish trong trò chơi thực sự), nó thích a4-a5 giống như trò chơi đã diễn ra .

Điều đó thật tốt, nhưng tôi đã duy trì nó chạy trong 50 phút hoàn chỉnh để đạt được các tính toán của Stockfish trong trò chơi được phép 1 phút:

Sự thật đáng buồn là tôi tin rằng Stockfish đã thua tất cả các trò chơi của mình vì giới hạn thời gian. Stockfish nhận được một tìm kiếm và đánh giá sâu hơn khi thời gian trôi qua và trong trò chơi, nó không được phép sử dụng một cuốn sách mở đầu khiến nó cân nhắc nhiều động thái ở độ sâu nông. Lưu ý rằng trong trò chơi thực tế, a4-a5 đã được chơi cho thấy (giả sử nó có thể đánh giá 70 triệu vị trí mỗi giây), Stockfish trong trò chơi đã không mất hơn 21,6 giây khi di chuyển. Nếu không, nó sẽ thay đổi quyết định của mình thành ba nước đi khác trong trò chơi thực tế. Lý do cho điều này vẫn chưa rõ ràng đối với tôi vì Stockfish của tôi cũng tiêu tốn ít bộ nhớ hơn (khoảng ~ 130 MB RAM so với 1GB được đề cập trong bài báo gốc , giả sử tất cả đều chuyển sang bảng băm).


Phần kết luận

Phần cứng chạy Stockfish, như tôi đã chỉ ra, nhanh nhất gấp 18 lần so với của tôi (Cập nhật: trên một lõi) dựa trên di chuyển mà tôi đã phân tích. Tôi không chắc liệu AlphaZero có thực sự có thể sử dụng phần cứng như vậy để huấn luyện các mạng của mình sau 4 giờ hay không, tôi chỉ có thể cho rằng nó quá thấp cho một trò chơi như cờ vua. Bên cạnh đó, AlphaZero đã dành những giờ đó để học, bao gồm cả việc xây dựng các lỗ mở vững chắc (và như bài viết đã chỉ ra, các ưu tiên đối với các lỗ mở nhất định). Mặt khác, Stockfish đã bị vô hiệu hóa khi mở và nó không đánh giá 70 triệu vị trí mỗi giây trong 60 giây cho mỗi lần di chuyển.

Như một lưu ý cuối cùng, tất cả những điều tôi nói đều dựa trên giả định của tôi. Tất nhiên, kết quả của AlphaZero và các trò chơi là siêu thú vị đối với tôi. Tuy nhiên, tôi rất thích xem một trò chơi mà Stockfish chơi giống như những gì tôi nhận được trên máy tính của mình. Đó là, nhiều thời gian hơn và một cuốn sách mở cho phép. Cũng dễ dàng có được kết quả phân tích Stockfish trong mỗi lần di chuyển và tôi muốn họ phát hành nó để cho thấy nó hoạt động tốt như thế nào.


1
Về giới hạn thời gian, Hình 2 trong bài báo AlphaZero cho thấy điều ngược lại: Stockfish tốt hơn trong ngân sách thấp hơn, nhưng quy mô tồi tệ hơn, khi có nhiều năng lượng hơn. arxiv.org/pdf/1712.01815.pdf
cũ-ufo

1
@ old-ufo Cảm ơn bạn đã chỉ ra điều đó. Như tôi đã nói, hiệu suất của Stockfish (và AlphaZero) phụ thuộc vào phần cứng cũng như giới hạn thời gian. Đối với Instance, nếu chúng tôi cung cấp cho Stockfish nhiều phần cứng hơn (và AlphaZero ít hơn) và tái tạo lại con số đó, dòng của nó có thể được chuyển đổi sao cho nó luôn ở trên dòng AlphaZero. Vì vậy, tôi đoán rằng đó là một điểm tốt trong việc so sánh phần cứng cho cả hai hệ thống cũng trả lời câu hỏi chính.
ReZzT

4

Một trong những tác giả gốc của Stockfish trả lời các khiếu nại cụ thể mà bạn đề cập ở đây:

Trong khi đó Chess.com cũng nhận được một nhận xét dài dòng từ một trong những tác giả Stockfish ban đầu, Tord Romstad, mà chúng tôi sẽ cung cấp đầy đủ:

Bản thân kết quả trận đấu không có ý nghĩa đặc biệt vì sự lựa chọn khá lạ về điều khiển thời gian và cài đặt tham số Stockfish: Các trò chơi được chơi ở thời gian cố định 1 phút / lần di chuyển, điều đó có nghĩa là Stockfish không sử dụng phương pháp phỏng đoán quản lý thời gian của nó ( Rất nhiều nỗ lực đã được đưa vào để Stockfish xác định các điểm quan trọng trong trò chơi và quyết định khi nào nên dành thêm thời gian cho việc di chuyển, tại một thời điểm cố định cho mỗi lần di chuyển, sức mạnh sẽ bị ảnh hưởng đáng kể). Phiên bản Stockfish được sử dụng là một năm tuổi, đã chơi với nhiều chuỗi tìm kiếm hơn bao giờ hết nhận được bất kỳ số lượng thử nghiệm đáng kể nào và có các bảng băm quá nhỏ cho số lượng chuỗi. Tôi tin rằng tỷ lệ hòa sẽ cao hơn nhiều trong một trận đấu với điều kiện bình thường hơn.

Mặt khác, không còn nghi ngờ gì nữa, AlphaZero có thể đã chơi tốt hơn nếu có nhiều công việc được đưa vào dự án (mặc dù "4 giờ học" được đề cập trong bài báo rất sai lệch khi bạn tính đến tài nguyên phần cứng khổng lồ được sử dụng trong 4 giờ đó). Nhưng trong mọi trường hợp, Stockfish vs AlphaZero rất nhiều so sánh táo với đười ươi. Một là chương trình cờ thông thường chạy trên máy tính thông thường, chương trình còn lại sử dụng các kỹ thuật khác nhau cơ bản và đang chạy trên phần cứng được thiết kế tùy chỉnh không có sẵn để mua (và sẽ thoát khỏi ngân sách của người dùng thông thường nếu có).

Từ góc độ khác, góc táo và đười ươi là điều thú vị nhất về điều này: Bây giờ chúng ta có hai thực thể nhân tạo cực kỳ khác nhau (cả về phần cứng và phần mềm), cả hai đều thể hiện khả năng chơi cờ siêu phàm. Điều đó thú vị hơn nhiều so với một chương trình cờ vua khác có chức năng tương tự như các chương trình cờ vua hiện có, chỉ tốt hơn một chút. Hơn nữa, khả năng thích ứng của phương pháp AlphaZero đối với các lĩnh vực mới mở ra những khả năng thú vị cho tương lai.

Đối với những người chơi cờ sử dụng các chương trình cờ vua máy tính làm công cụ, bước đột phá này khó có thể có tác động lớn, ít nhất là trong ngắn hạn, vì thiếu phần cứng phù hợp với giá cả phải chăng.

Đối với các lập trình viên máy cờ vua - và cho các lập trình viên trong nhiều lĩnh vực thú vị khác - sự xuất hiện của các kỹ thuật học máy đòi hỏi tài nguyên phần cứng lớn để có hiệu quả là một chút không thành công. Trong một vài năm, hoàn toàn có thể tạo ra một chương trình cờ vua giống như AlphaZero để chạy trên các máy tính thông thường, nhưng tài nguyên phần cứng cần thiết để tạo ra chúng vẫn sẽ vượt xa ngân sách của những người có sở thích hoặc các công ty có quy mô trung bình. Có thể một dự án nguồn mở với một mạng lưới máy tính phân tán lớn do các tình nguyện viên điều hành có thể hoạt động, nhưng ngày của hàng trăm động cơ cờ vua độc đáo, mỗi máy có những đặc điểm và tính cách riêng của chúng sẽ biến mất.

Nguồn: https://www.chess.com/news/view/alphazero-reactions-from-top-gms-stockfish- Tác giả


2

Chạy trên phần cứng tương đương sẽ được yêu cầu nếu mục tiêu cuối cùng của Google là chế tạo một công cụ cờ vua vượt trội, nhưng bài tập này không thực sự là về cờ vua. Cờ vua chỉ là một cách thuận tiện để thể hiện khả năng của AI để học các nhiệm vụ phức tạp từ đầu. Nếu nó có thể hoạt động tốt với một số cấu hình mơ hồ hợp lý của Stockfish, thì nó đã chọn hộp.

Tôi dự đoán nhóm Google sẽ không dành nhiều nỗ lực hơn cho cờ vua; thay vào đó, họ sẽ chuyển sang các vấn đề khác mà AI chưa bao giờ có thể thực hiện được.


Tôi đã cho +1 vì tôi có cùng cảm giác.
SmallChess

Âm thanh có thể xảy ra, mặc dù tôi nghi ngờ họ sẽ xuất bản nó, nếu Alphazero chỉ thua một lề nhỏ (có nghĩa là nó vẫn có sức mạnh tương đương với cá kho).
dùng1583209

@ user1583209 Có lẽ họ đã chạy nó rất nhiều lần để tìm ra lượng thời gian học tối thiểu cần thiết để nghiền nát Stockfish. Sau đó, họ đã thực hiện một lần chạy cuối cùng và công bố những kết quả đó.
T Scherer

1

Truy cập Diễn đàn Talkchess để biết thêm, có nơi bạn sẽ tìm thấy khoảng 3000 lập trình viên. Đây là tất cả một scam. Alpha chơi trên phần cứng lớn hơn 30 lần so với SF, 4TPU so với 64 lõi. 4TPUs là khoảng 1000 lõi hoặc thậm chí nhiều hơn. Alpha đã mô phỏng cuốn sách mở đầu, được đào tạo về vô số trò chơi chiến thắng GM hàng đầu. SF có rất ít băm. TC đã được cố định ở mức 1 phút mỗi lần di chuyển, điều này lại gây bất lợi cho SF, nơi có quản lý thời gian tiên tiến. TPU thiếu tính không hiệu quả SMP với nhiều lõi hơn, vì vậy lợi thế phần cứng thậm chí còn lớn hơn. Vv, v.v., vì vậy về cơ bản, đây chỉ là một pha nguy hiểm công khai lớn về phía Google. Hiện tại, Alpha có khoảng 2800 trên lõi đơn, vì vậy 400 elos dưới SF và sẽ không tiến triển nhiều trong tương lai, vì từ giờ trở đi, nó sẽ cần đánh giá nâng cao mà nó sẽ không thể khám phá. Liên quan đến vấn đề 4 giờ, tốt, LOL, đây là 48 giờ trước, vậy bây giờ Alpha đang ở mức 5000 elo? Nào.


5
Bạn dường như tin rằng AlphaZero làm điều tương tự như Stockfish, chỉ nhanh hơn 1000 lần vì nó sử dụng phần cứng mạnh hơn 1000 lần. Điều này là không đúng sự thật cả. Nó sử dụng một cách tiếp cận rất khác và cách tiếp cận đó rất tốn tài nguyên. Trên thực tế, trong trận đấu, AlphaZero đã đánh giá 80 nghìn vị trí mỗi giây trong khi Stockfish đang đạt 70 triệu vị trí mỗi giây. Bây giờ hãy nói với tôi rằng AlphaZero đã thắng vì phần cứng mạnh hơn. Tất nhiên trên CPU 64 thì nó sẽ chậm hơn và ai biết nó sẽ chơi như thế nào nhưng vấn đề là AlphaZero làm điều đó tốt hơn, mặc dù với chi phí cao hơn.
IA Petr Harasimovic

3
Phần cứng SF có giá dưới 10 nghìn đô la, Alpha hơn 250 nghìn đô la. Tự rút ra kết luận. Nps là vô nghĩa, và mọi lập trình viên cờ vua đều biết điều đó. Bạn có thể làm tất cả các loại thủ thuật để nps giảm xuống, nhưng điều đó không có nghĩa là bạn sẽ chơi mạnh hơn. Tôi muốn thấy nó thực hiện phương pháp đó trên phần cứng SF và SF trên phần cứng Alpha. Đoán kết quả? +85 -0 = 15 đối với SF. Nếu họ rất tuyệt vời, hãy để họ xuất bản mã của họ.
Lyudmil Tsvetkov

3
"Alpha đã mô phỏng cuốn sách mở đầu, được đào tạo về vô số trò chơi chiến thắng GM hàng đầu." Mở cuốn sách mô phỏng, vâng, nhưng nó được đào tạo về các trò chơi GM? Bạn có một nguồn cho điều này? Sự hiểu biết của tôi là Alpha hoàn toàn bị bootstraged.
Akavall

0

Stockfish bị ràng buộc với CPU, vì vậy nó sẽ không bao giờ có thể mở rộng đến mức mà GPU có thể.

Ma trận Gor tính toán tỷ lệ GPU với n, trong khi CPU có tỷ lệ n 3 , các lõi tenor này được tối ưu hóa hơn nữa để có khả năng hiệu suất cao hơn khi bạn chia tỷ lệ.


-2

Đoạn đầu chi tiết hơn, câu thứ hai ngắn và đơn giản trả lời đoạn thứ ba ý kiến ​​của tôi về tình huống

Với AlphaZero, phần cứng có 0 ảnh hưởng đến sức mạnh chơi của nó. Nó có thể mất nhiều thời gian hơn nhưng không phải vì nó suy nghĩ. Đó là một mạng lưới thần kinh, có nghĩa là bạn cung cấp thông tin cho nó trong một vectơ (một bảng cột đơn), nó thực hiện phép toán đơn giản thông qua một tenxơ khổng lồ (một bảng 3 chiều trở lên) sau đó nó đưa ra câu trả lời. Stockfish cần thời gian để trở nên tốt vì nó kiểm tra các vị trí có thể để xem liệu một động thái có lợi hay không, vì vậy càng nhìn vào vấn đề càng lâu thì càng có thể kiểm tra vị trí / di chuyển.

Thực sự không có một thiết lập phần cứng tương đương. Vì họ có những nhu cầu khác nhau, Stockfish cần phân tích nhiều vị trí hơn trong khi AlphaZero chỉ cần thực hiện một động thái. Và mọi người buồn bã vì máy tính của AlphaZero mạnh hơn về mặt kỹ thuật và họ nghĩ rằng họ nên bình đẳng về vấn đề đó. Nhưng, AlphaZero không cần siêu máy tính đó sau khi đào tạo.

Theo tôi, không có vấn đề gì họ đưa ra cho cả hai bên, trừ khi Stockfish có một khoảng thời gian không hợp lý, nó có thể sẽ buộc một vài trò chơi nữa nhưng nói chung sẽ có hiệu ứng tương tự. Đây là lý do tại sao tôi nghĩ điều này, Stockfish ban đầu đánh giá bằng các mảnh và giá trị của chúng trong khi, Alpha đã chơi (có thể) hàng triệu trò chơi để nhận ra điều gì là quan trọng về mặt chiến lược. Đó là lý do tại sao Alpha sacs nhiều hơn Stockfish bao giờ, nhưng đạt được lợi thế vị trí rất lớn.


Thật tồi tệ. AlphaZero không tìm kiếm cây. Nhiều phần cứng làm cho nó mạnh hơn. Và nó cần một tấn phần cứng để chơi tốt hơn stockfish.
BlindKungFuMaster

Không có gì trong bài viết này là chính xác ...
SmallChess

Hệ thống này dựa trên 3 nơ ron thần kinh và tìm kiếm một phần cây Monroe Carlo, vì vậy bạn đã đúng về nó bằng cách sử dụng tìm kiếm cây. Trong khi chơi, nó sử dụng 2 nguyên tắc mạng thần kinh được phát triển theo bảng chữ cái giá trị và chính sách. Go là một trò chơi không thể được thực hiện thông qua sức mạnh tính toán vì nó phức tạp hơn về mặt thiên văn so với cờ vua. Vì vậy, nếu tôi tin rằng nó cần nhiều sức mạnh tính toán hơn thuật toán vũ phu thì bạn đang ảo tưởng. Hoặc bỏ lỡ thông báo. Mạng lưới thần kinh thứ ba được sử dụng để cố gắng và hoàn thành quá trình học tập bằng cách đoán những thay đổi lan truyền trở lại. Sức mạnh của bảng chữ cái nằm trong lưới không mcts.
Ezecal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.