Hầu hết thời gian, các nhà phát triển phải đối mặt với thách thức trong việc lựa chọn cơ sở hạ tầng AI phù hợp và các cuộc trò chuyện chính xoay quanh một câu hỏi đơn giản về lựa chọn đúng đắn để xây dựng hệ thống AI. Serverless mang lại sự linh hoạt, dành riêng cho việc kiểm soát , sự tiện lợi và hiệu suất.
Trong thực tế, cơ sở hạ tầng suy luận không phải là thứ bạn “chọn đúng” một lần. Đó là điều gì đó dần dần trở nên sai trái theo thời gian khi sản phẩm, lưu lượng truy cập và kỳ vọng của bạn phát triển.
Lấy ví dụ về trợ lý cuộc họp được hỗ trợ bởi AI. Trong phiên bản đầu tiên, nó xử lý một số cuộc họp mỗi ngày, ghi lại và tóm tắt từng cuộc họp một. Việc sử dụng không thường xuyên và ưu tiên chỉ đơn giản là làm cho tính năng này hoạt động. Suy luận không có máy chủ là điều đương nhiên ở đây.
Khi sản phẩm đạt được lực kéo, nó sẽ trở thành một phần của quy trình làm việc hàng ngày. Các nhóm dựa vào nó để xử lý các cuộc họp suốt cả ngày và kỳ vọng về thời gian xử lý bắt đầu thắt chặt hơn. Đôi khi độ trễ tăng đột biến bắt đầu trở thành vấn đề, ngay cả khi hiệu suất tổng thể có thể chấp nhận được.
Cuối cùng, hệ thống đạt đến mức có thể xử lý khối lượng lớn cuộc họp với các mẫu hàng ngày có thể dự đoán được. Ở giai đoạn này, các yêu cầu chuyển sang tính nhất quán và hiệu quả về chi phí. Suy luận chuyên dụng trở thành nền tảng logic, không phải vì cách tiếp cận trước đó sai mà vì hệ thống đã phát triển vượt trội.
Điều thú vị là serverless không biến mất. Nó thường vẫn hữu ích trong các trường hợp phức tạp, xử lý các đột biến không mong muốn, chạy các tính năng thử nghiệm hoặc hỗ trợ các tác vụ tần suất thấp. Nó tự nhiên trở thành sự kết hợp của cả hai phương pháp, được thúc đẩy bởi những gì hệ thống cần chứ không phải là một kế hoạch cố định.
Trong bài viết này, chúng tôi sẽ cố gắng tìm hiểu sự lựa chọn giữa suy luận không có máy chủ và suy luận chuyên dụng phát triển như thế nào khi hệ thống phát triển. Chúng ta cũng sẽ khám phá hai trong số những nền tảng rất phổ biến, như Modal và Together.ai, làm ví dụ để hiểu thời điểm suy luận không có máy chủ bắt đầu gặp trục trặc, cách mô hình khối lượng công việc định hình lựa chọn đúng và lý do tại sao việc chuyển sang cơ sở hạ tầng chuyên dụng lại trở thành điều tất yếu khi mở rộng quy mô hệ thống.
Giai đoạn đầu
Trong những ngày đầu xây dựng sản phẩm AI, hạn chế lớn nhất không phải là hiệu suất, đặc biệt là tính nhất quán về độ trễ (tốc độ phản hồi của mỗi yêu cầu) và thông lượng (số lượng yêu cầu được xử lý cùng một lúc), mà là tốc độ bạn có thể gửi, lặp lại và học hỏi từ cách sử dụng thực tế.
Trong những ngày đầu, khối lượng công việc vẫn chưa được hiểu rõ, lưu lượng truy cập không nhất quán, mô hình đang thay đổi và bản thân sản phẩm vẫn đang được định hình. Trong những trường hợp như vậy, nền tảng không có máy chủ gần như hoàn hảo cho nhu cầu của nhà phát triển.
Họ loại bỏ những quyết định có thể làm bạn chậm lại. Bạn không cần phải suy nghĩ về việc cung cấp GPU, chính sách mở rộng quy mô hoặc lập kế hoạch dung lượng. Bạn viết mã, triển khai và hệ thống sẽ điều chỉnh theo bất kỳ nhu cầu nào xuất hiện. Đối với các ứng dụng ở giai đoạn đầu, chẳng hạn như chatbot nguyên mẫu, trình tóm tắt tài liệu hoặc công cụ AI nội bộ, điều này không chỉ thuận tiện; đó là sự khác biệt giữa vận chuyển và không vận chuyển.
Ở giai đoạn này, sự thiếu hiệu quả không thành vấn đề vì bản thân việc sử dụng nó là không chắc chắn. Bạn đang tối ưu hóa tốc độ lặp lại chứ không phải hiệu quả cơ sở hạ tầng.
Sự thay đổi đầu tiên:Độ trễ trở thành vấn đề của sản phẩm
Dấu hiệu đầu tiên cho thấy lựa chọn cơ sở hạ tầng của bạn đang bắt đầu sai lệch hiếm khi xuất hiện trên trang tổng quan thanh toán. Nó hiển thị trong trải nghiệm người dùng. Khi mức sử dụng tăng lên, thậm chí ở mức khiêm tốn, độ trễ không còn là thước đo lý thuyết nữa mà bắt đầu hiển thị rõ ràng.
Các hệ thống không có máy chủ được xây dựng dựa trên tính linh hoạt, thường đi kèm với sự thay đổi. Yêu cầu có thể quay trở lại ngay lập tức nếu môi trường đã ấm hoặc mất nhiều thời gian hơn đáng kể nếu yêu cầu đó kích hoạt khởi động nguội hoặc tải mô hình. Trong sự cô lập, điều này có thể chấp nhận được. Nhưng trong hệ thống hướng tới người dùng, sự không nhất quán dễ nhận thấy hơn nhiều so với hiệu suất trung bình.
Hãy xem xét trợ lý AI được nhúng trong quy trình hỗ trợ khách hàng hoặc tính năng tạo mã bên trong IDE. Trong cả hai trường hợp, người dùng mong đợi khả năng phản hồi ngay lập tức và có thể dự đoán được. Một số phản hồi chậm không đạt mức trung bình về nhận thức nhưng lại nổi bật. Những gì từng là chi tiết về cơ sở hạ tầng lại trở thành lỗi của sản phẩm.
Sự thay đổi thứ hai:Khi chi phí bắt đầu tăng lên
Khi hệ thống của bạn phát triển, việc sử dụng sẽ trở nên thường xuyên hơn. Những yêu cầu từng là yêu cầu không thường xuyên sẽ trở thành lưu lượng truy cập ổn định và các tính năng từng được thử nghiệm sẽ trở thành một phần của việc sử dụng hàng ngày. Đây là lúc mức giá không có máy chủ bắt đầu có cảm giác khác biệt.
Serverless hoạt động tốt khi mức sử dụng không thể đoán trước được vì bạn chỉ trả tiền khi có thứ gì đó chạy. Nhưng một khi hệ thống của bạn luôn hoạt động, xử lý các yêu cầu liên tục hoặc chạy các công việc nền, cuối cùng bạn sẽ phải trả đi trả lại cùng một công việc. Theo thời gian, sự tiện lợi đó bắt đầu trở nên đắt đỏ.
Tại thời điểm này, cơ sở hạ tầng chuyên dụng, chạy các mô hình trên GPU cố định, bắt đầu có ý nghĩa hơn. Bạn cần kiểm soát chi phí nhiều hơn, điều này giúp hiệu suất ổn định hơn, miễn là bạn sử dụng tài nguyên hiệu quả.
Không có gì thực sự sai ở đây. Điều đó chỉ có nghĩa là hệ thống của bạn đã phát triển đến mức mà việc thiết lập trước đó không còn là lựa chọn hiệu quả nhất về mặt chi phí nữa.
Hình dạng khối lượng công việc, chứ không phải lựa chọn nền tảng, thúc đẩy kết quả
Điều trở nên rõ ràng theo thời gian là quyết định không thực sự nằm ở việc lựa chọn giữa hai loại nền tảng. Đó là về việc hiểu cách khối lượng công việc của bạn hoạt động và hành vi đó thay đổi như thế nào.
Sai lầm mà nhiều nhóm mắc phải là cho rằng khối lượng công việc hiện tại của họ là cố định. Trong thực tế, hầu hết các hệ thống đều chuyển động qua nhiều trạng thái. Một ứng dụng có thể bắt đầu với mức sử dụng tăng đột biến, chuyển sang các chu kỳ hàng ngày có thể dự đoán được và cuối cùng chuyển sang mô hình thông lượng cao, ổn định. Mỗi giai đoạn này có một cách tiếp cận khác nhau.
Giai đoạn giữa
Giai đoạn khó khăn nhất không phải là sự bắt đầu hay kết thúc mà là sự chuyển tiếp giữa chúng. Đây là nơi các hệ thống thường cảm thấy “không ổn”, ngay cả khi không có gì bị hỏng. Các vấn đề về độ trễ thỉnh thoảng xuất hiện nhưng không nhất quán và chi phí bắt đầu tăng nhưng không đủ để biện minh cho một sự thay đổi kiến trúc hoàn toàn. Các nhà phát triển bắt đầu bổ sung các giải pháp thay thế, chẳng hạn như phản hồi bộ nhớ đệm, làm nóng trước môi trường hoặc điều chỉnh hoạt động đồng thời để mọi việc diễn ra suôn sẻ. Những thay đổi này chỉ giúp ích tạm thời nhưng cũng báo hiệu rằng hệ thống đang bị đẩy ra ngoài mục đích thiết kế ban đầu.
Nếu chúng ta lấy lại ví dụ về trợ lý hỗ trợ khách hàng AI đang phát triển. Trong giai đoạn đầu, hệ thống có khả năng xử lý số lượng truy vấn nhỏ hơn nhưng khi số lượng truy vấn tăng lên, hệ thống bắt đầu xử lý hàng trăm yêu cầu trong giờ cao điểm. Hầu hết các phản hồi vẫn nhanh, nhưng một số phản hồi mất nhiều thời gian hơn đáng kể do khởi động nguội hoặc độ trễ mở rộng quy mô. Nhóm bổ sung bộ nhớ đệm cho các truy vấn lặp lại và thử làm ấm trước để giảm mức độ trễ tăng đột biến. Đồng thời, chi phí hàng tháng của họ tăng lên vì hệ thống hiện đang hoạt động ổn định hơn. Tuy nhiên, lưu lượng truy cập vẫn chưa đủ ổn định để hoàn toàn có thể chuyển sang GPU chuyên dụng, loại GPU này có thể không hoạt động trong thời gian ngoài giờ. Điều này tạo ra một nền tảng trung gian khó chịu, nơi hệ thống hoạt động về mặt kỹ thuật nhưng đòi hỏi phải điều chỉnh liên tục và cả cơ sở hạ tầng không có máy chủ cũng như cơ sở hạ tầng chuyên dụng đều không có vẻ phù hợp hoàn hảo.
Ở quy mô
Tại một số điểm, hệ thống của bạn không còn có thể đoán trước được nữa. Bạn biết đại khái có bao nhiêu yêu cầu được gửi đến. Bạn biết khi nào là giờ bận rộn. Sự phỏng đoán đã biến mất.
Bây giờ, bạn đang trả tiền cho mỗi yêu cầu trên một hệ thống không bao giờ ngừng chạy. Những khởi đầu lạnh lùng trước đây thỉnh thoảng xảy ra bây giờ cảm thấy không thể chấp nhận được. Người dùng ngày càng mong đợi những phản hồi nhanh chóng, nhất quán và mọi sự khác biệt đều được chú ý. Cơ sở hạ tầng giúp bạn di chuyển nhanh chóng lúc ban đầu giờ lại là thứ làm bạn chậm lại. Suy luận chuyên dụng giải quyết vấn đề này một cách rõ ràng. Bạn đặt trước GPU, mô hình của bạn vẫn được tải và mọi yêu cầu đều nhận được trải nghiệm như nhau. Không chia sẻ, không chậm trễ, không bất ngờ.
Nền kinh tế cũng thay đổi. Khi hệ thống của bạn luôn hoạt động, việc trả tiền cho điện toán dự trữ sẽ rẻ hơn so với việc trả tiền cho mỗi lần sử dụng. Ví dụ:các điểm cuối chuyên dụng của Together.ai có giá khởi điểm khoảng 3,99 USD mỗi giờ cho H100. Với lưu lượng truy cập ổn định, số tiền đó thường ít hơn số tiền bạn chi tiêu cho serverless, cộng thêm hiệu suất tốt hơn. Những gì bạn nhận được không chỉ là chi phí thấp hơn hay phản hồi nhanh hơn. Đó là sự ổn định. Bạn ngừng điều chỉnh cơ sở hạ tầng của mình và bắt đầu tin tưởng vào nó. Đó là khi bạn hoàn toàn có thể tập trung vào việc xây dựng sản phẩm mà không phải quản lý lớp bên dưới nó. Serverless không biến mất hoàn toàn. Nó vẫn xử lý các trường hợp khó khăn:đột biến bất ngờ, tính năng thử nghiệm và công việc tần suất thấp. Nhưng nó không còn gánh vác khối lượng công việc cốt lõi của bạn nữa. Cơ sở hạ tầng chuyên dụng hiện đang thực hiện điều đó.
Cách các nhà phát triển thực sự trải nghiệm Nền tảng suy luận không có máy chủ
Một cách hay để hiểu cách các hệ thống này hoạt động là xem cách các nhà phát triển tương tác với hai nền tảng thường được sử dụng:Modal và Together.ai. Cả hai đều bắt đầu từ một ý tưởng tương tự là trừu tượng hóa cơ sở hạ tầng, nhưng cách mà sự trừu tượng đó thể hiện trong thực tế (đặc biệt là giá cả và quy mô) cho thấy mọi thứ hoạt động tốt ở đâu và bắt đầu đánh đổi ở đâu.
Phương thức
Modal được thiết kế theo mô hình serverless, trong đó bạn phải trả phí nghiêm ngặt cho thời gian tính toán. Ví dụ:mức sử dụng GPU được tính phí mỗi giây, khoảng 0,0002 USD/giây đối với các GPU nhỏ hơn (như L4) và khoảng 0,0011 USD/giây đối với các GPU cao cấp như H100, tương đương khoảng 0,8–4 USD mỗi giờ tùy thuộc vào phần cứng. Ngoài ra còn có một cấp độ miễn phí với khoản tín dụng hàng tháng khoảng $30, giúp bạn dễ dàng bắt đầu mà không phải trả chi phí trả trước. Trong thực tế, điều này hoạt động cực kỳ hiệu quả đối với khối lượng công việc bùng nổ, chẳng hạn như API tạo hình ảnh chỉ nhận được lưu lượng truy cập khi người dùng kích hoạt nó hoặc tác vụ nền chạy vài lần một ngày. Bạn không phải trả tiền cho các GPU nhàn rỗi và việc mở rộng quy mô sẽ tự động diễn ra. Nhưng khi việc sử dụng trở nên liên tục, giả sử bạn đang chạy mô hình phát hiện đối tượng theo thời gian thực để xử lý hình ảnh liên tục suốt cả ngày, mô hình định giá bắt đầu bộc lộ sự cân bằng của nó. Bạn không còn được hưởng lợi từ việc “chỉ trả tiền khi sử dụng” vì hệ thống luôn được sử dụng. Thay vào đó, bạn đang thuê đi thuê lại cùng một GPU một cách hiệu quả với số tiền nhỏ, thường với chi phí tích lũy cao hơn so với việc chỉ duy trì một GPU chạy. Đồng thời, các đặc tính hiệu suất như khởi động nguội và tái sử dụng thùng chứa gây ra sự biến đổi khiến khó bỏ qua hơn trong môi trường sản xuất.
Cùng nhau.ai
Together.ai bắt đầu bằng API không có máy chủ, nhưng điều khiến nó trở nên thú vị đối với các hệ thống đang phát triển là nó không buộc bạn phải chuyển đổi nền tảng khi nhu cầu của bạn thay đổi. Bạn có thể chuyển từ cách sử dụng API cơ bản sang các điểm cuối GPU chuyên dụng mà không cần thay đổi cách mã của mình.
Ở cấp độ đầu vào, bạn trả tiền cho mỗi mã thông báo. Giá thay đổi tùy theo mô hình, khoảng 0,10 USD đến 3 USD cho mỗi triệu token, hoạt động tốt khi lưu lượng truy cập ít hoặc không thể đoán trước. Bạn nhận được khả năng tự động mở rộng quy mô và không cần quản lý cơ sở hạ tầng. Đó là điểm khởi đầu hợp lý cho hầu hết các trường hợp sử dụng.
Khi lưu lượng truy cập tăng lên và độ trễ bắt đầu trở nên quan trọng, Together.ai cho phép bạn di chuyển đến các điểm cuối chuyên dụng. Bạn chọn phần cứng của mình:H100 với giá khoảng 3,99 đô la mỗi giờ hoặc H200 với giá khoảng 5,49 đô la mỗi giờ và GPU đó là của bạn. Không có điện toán dùng chung, không có sự can thiệp từ khối lượng công việc khác. Mô hình vẫn được tải và hồ sơ độ trễ của bạn trở nên nhất quán.
Sự đánh đổi cũng giống như điều bạn phải đối mặt với bất kỳ thiết lập chuyên dụng nào. Nếu lưu lượng truy cập của bạn giảm trong thời gian ngoài giờ, GPU đó vẫn đang chạy. Bạn đang trả tiền cho dung lượng cho dù bạn có sử dụng nó hay không. Điều đó sẽ ổn khi khối lượng công việc của bạn ổn định.
Đối với các nhóm đang mở rộng quy mô, lợi thế thực tế của Together.ai là đường dẫn di chuyển mang tính nội bộ. Bạn không xây dựng lại sự tích hợp của mình để có được hiệu suất chuyên dụng. Bạn thay đổi cấu hình điểm cuối. Điều đó loại bỏ một rào cản thực sự trong việc thực hiện chuyển đổi vào đúng thời điểm, thay vì trì hoãn vì việc chuyển đổi có vẻ quá rắc rối.
Ví dụ:chạy một mô hình cỡ trung bình có thể có giá khoảng 0,10–0,60 USD cho mỗi triệu mã thông báo đầu vào, với mã thông báo đầu ra đôi khi sẽ cao hơn tùy thuộc vào mô hình. Điều đó làm cho nó trở nên trực quan đối với các trường hợp sử dụng như chatbot hoặc API tạo văn bản, trong đó chi phí sẽ tăng theo mức sử dụng. Ví dụ:một bot hỗ trợ khách hàng tạo ra vài triệu token mỗi ngày có thể tốn hàng chục đến hàng trăm đô la mỗi tháng, tùy thuộc vào khối lượng. Đồng thời, Together.ai cung cấp các điểm cuối GPU chuyên dụng với giá khởi điểm khoảng 3,99 USD/giờ cho H100 khi khối lượng công việc ổn định. Điều này phản ánh một mô hình chung:các nhà phát triển bắt đầu với việc sử dụng dựa trên API đơn giản, nhưng khi lưu lượng truy cập ổn định và kỳ vọng về độ trễ tăng lên, họ thường chuyển sang các thiết lập chuyên dụng để có hiệu suất và chi phí dễ dự đoán hơn.
Sự thay đổi quan trọng không phải là nền tảng—mà là cách bạn sử dụng nó theo thời gian :
- Giai đoạn đầu → bạn sử dụng nó như một API đơn giản
- Giai đoạn tăng trưởng → bạn bắt đầu lo lắng về độ trễ và chi phí
- Quy mô → bạn chuyển sang các điểm cuối chuyên dụng trong cùng một nền tảng
Vì vậy, không giống như các nền tảng không có máy chủ thuần túy, bạn không nhất thiết phải chuyển đổi nhà cung cấp—bạn thay đổi chế độ .
Những điểm cần cân nhắc trước khi quyết định
- Chi phí tăng lên khác với mức bạn mong đợi: Nền tảng không có máy chủ tính phí theo yêu cầu cố định cho mỗi giây điện toán. Khi hệ thống của bạn không hoạt động, mô hình đó hoạt động hiệu quả. Khi hệ thống của bạn chạy liên tục, tốc độ tương tự sẽ chạy suốt ngày đêm mà không hề thuyên giảm. Cơ sở hạ tầng hỗ trợ năng lực dự trữ có thể giảm đáng kể chi phí hiệu quả theo giờ, đôi khi đến hơn một nửa. Khối lượng công việc của bạn càng có thể dự đoán được càng lâu thì sự khác biệt đó càng tăng lên.
- Các giá trị mặc định được quản lý sẽ trở thành hạn chế theo thời gian :Nền tảng suy luận được quản lý đôi khi thay mặt bạn đưa ra quyết định về cấu hình. Những tối ưu hóa nào sẽ chạy, cách xử lý bộ nhớ và cách phân chia các yêu cầu. Trong giai đoạn đầu, những mặc định đó sẽ tiết kiệm thời gian. Sau này, khi bạn cần điều chỉnh lớp suy luận cho khối lượng công việc cụ thể của mình, những giá trị mặc định tương tự đó sẽ gây cản trở. Nếu bạn không thể truy cập vào cấu hình, bạn không thể thay đổi nó. Sở hữu cơ sở hạ tầng có nghĩa là những cài đặt đó là của bạn.
- Khả năng hiển thị của bạn bị giới hạn ở những gì nền tảng hiển thị cho bạn :Trên nền tảng được quản lý, khi có sự cố xảy ra hoặc chi phí tăng đột biến, khả năng điều tra của bạn bị giới hạn ở bảng điều khiển mà nền tảng đã xây dựng cho bạn. Bạn có thể thấy điều gì đó chậm hoặc tốn kém, nhưng việc truy tìm chính xác lý do tại sao lại khó khăn khi lớp cơ sở hạ tầng nằm ngoài tầm với. Cơ sở hạ tầng chuyên dụng cung cấp cho bạn khả năng quan sát đầy đủ trên toàn bộ điện toán, kết nối mạng và lưu trữ. Bạn nhìn thấy mọi thứ và bạn có thể hành động dựa trên đó.
- Kiểm soát nhiều hơn có nghĩa là có nhiều trách nhiệm hơn: Việc sở hữu cơ sở hạ tầng mang lại cho bạn chi phí thấp hơn, khả năng kiểm soát sâu hơn và khả năng hiển thị đầy đủ. Nhưng điều đó cũng có nghĩa là bạn đảm nhận công việc thiết lập và vận hành mà các nền tảng được quản lý xử lý cho bạn. Đó không phải lúc nào cũng là quyết định đúng đắn, đặc biệt nếu nhóm của bạn có quy mô nhỏ hoặc khối lượng công việc của bạn vẫn đang thay đổi. Điều đó có nghĩa là một nền tảng phù hợp luôn tạo ra sự cân bằng phù hợp để thu hẹp khoảng cách giữa nền tảng được quản lý và nền tảng tự quản lý. Một số nền tảng cơ sở hạ tầng hiện cung cấp hình ảnh suy luận được định cấu hình sẵn, triển khai GPU chỉ bằng một cú nhấp chuột và hỗ trợ Kubernetes ngay lập tức, điều đó có nghĩa là bạn không bắt đầu từ con số 0. Chi phí vận hành là có thật nhưng lại nhẹ hơn nhiều so với trước đây.
Kết luận
Suy luận serverless mang lại cho bạn tốc độ để bắt đầu, thử nghiệm và triển khai mà không gặp trở ngại. Nhưng khi hệ thống của bạn phát triển, chính sự trừu tượng từng giúp bạn di chuyển nhanh hơn có thể bắt đầu che giấu những điều quan trọng nhất:tính nhất quán về độ trễ, thông lượng và hiệu quả chi phí. Các nền tảng như Modal và Together.ai giúp bạn dễ dàng xây dựng và mở rộng quy mô ngay từ đầu và trong nhiều trường hợp, chúng vẫn là một phần của kiến trúc thậm chí sau này. Nhưng khi khối lượng công việc trở nên có thể dự đoán được và kỳ vọng ngày càng thắt chặt thì nhu cầu kiểm soát nhiều hơn trở nên không thể tránh khỏi. Các hệ thống trong thế giới thực không ở trạng thái tĩnh; họ chuyển từ trạng thái không chắc chắn sang có thể dự đoán được, từ thử nghiệm sang sản xuất. Và khi họ làm vậy, sự lựa chọn cơ sở hạ tầng “đúng đắn” cũng theo họ. Sai lầm thực sự mà các nhóm mắc phải là coi serverless như một mặc định dài hạn thay vì thực tế là:một giai đoạn. Bạn càng trì hoãn việc chuyển sang cơ sở hạ tầng chuyên dụng sau khi khối lượng công việc của bạn ổn định thì bạn càng phải trả nhiều tiền hơn về chi phí, hiệu suất hoặc cả hai.
Tác phẩm này được cấp phép theo Giấy phép quốc tế Creative Commons Ghi công-NonCommercial-ShareAlike 4.0.