Trình docker API phần còn lại của Python

Ý tưởng của bài viết này là tạo một bộ chứa Docker nhanh chóng và dễ dàng để thực hiện suy luận trực tuyến với các mô hình máy học được đào tạo bằng cách sử dụng API Python với Flask. Trước khi đọc bài viết này, đừng ngần ngại đọc Tại sao nên sử dụng Docker cho Machine Learning, Cài đặt nhanh và Sử dụng Docker lần đầu, cũng như Xây dựng và chạy Bộ chứa Docker cho Mô hình Machine Learning của bạn, trong đó chúng ta tìm hiểu cách sử dụng Docker để thực hiện đào tạo mô hình và

Suy luận hàng loạt là tuyệt vời khi bạn có thời gian để tính toán các dự đoán của mình. Hãy tưởng tượng bạn cần dự đoán thời gian thực. Trong trường hợp này, suy luận hàng loạt không phù hợp hơn và chúng tôi cần suy luận trực tuyến. Nhiều ứng dụng sẽ không hoạt động hoặc sẽ không hữu ích nếu không có dự đoán trực tuyến như xe tự hành, phát hiện gian lận, giao dịch tần suất cao, ứng dụng dựa trên dữ liệu bản địa hóa, nhận dạng và theo dõi đối tượng hoặc giao diện máy tính não. Đôi khi, dự đoán cần được cung cấp tính bằng mili giây

Để tìm hiểu khái niệm này, chúng tôi sẽ triển khai các suy luận trực tuyến (Phân tích phân biệt tuyến tính và mô hình Mạng thần kinh Perceptron nhiều lớp) với Docker và Flask-RESTful

Để bắt đầu, hãy xem xét các tệp sau. Dockerfile, đào tạo. py, api. py, yêu cầu. txt, đào tạo. csv, kiểm tra. json

Con tàu. py là một tập lệnh python nhập và chuẩn hóa dữ liệu EEG và huấn luyện hai mô hình để phân loại dữ liệu. Dockerfile sẽ được sử dụng để xây dựng Docker image của chúng ta, các yêu cầu. txt (flask, jar-restful, joblib) dành cho các phụ thuộc Python và api. py là tập lệnh sẽ được gọi để thực hiện suy luận trực tuyến bằng API REST. xe lửa. csv là dữ liệu được sử dụng để huấn luyện các mô hình của chúng tôi và kiểm tra. json là tệp chứa dữ liệu điện não đồ mới sẽ được sử dụng với các mô hình suy luận của chúng tôi

Bạn có thể tìm thấy tất cả các tệp trên GitHub

Flask-RESTful API

Bước đầu tiên trong việc xây dựng API là suy nghĩ về dữ liệu chúng tôi muốn xử lý, cách chúng tôi muốn xử lý dữ liệu đó và kết quả đầu ra chúng tôi muốn với API của mình. Trong ví dụ của chúng tôi, chúng tôi sẽ sử dụng bài kiểm tra. json trong đó chúng tôi có 1300 hàng dữ liệu EEG với 160 tính năng mỗi (cột). Chúng tôi muốn các API của chúng tôi như sau

-API 1. Chúng tôi sẽ cung cấp một số hàng cho API sẽ trích xuất cho chúng tôi dữ liệu từ hàng đã chọn và in nó

-API 2. Chúng tôi sẽ cung cấp một số hàng cho API sẽ trích xuất hàng đã chọn, đưa dữ liệu mới vào các mô hình và truy xuất dự đoán phân loại (Biến chữ cái trong dữ liệu)

- API3. Chúng tôi sẽ yêu cầu API lấy tất cả dữ liệu trong bài kiểm tra. json và in ngay cho chúng tôi điểm phân loại của các mô hình

Cuối cùng, chúng tôi muốn truy cập các quy trình đó bằng cách thực hiện một yêu cầu HTTP

Chúng ta hãy xem api. tập tin py

Bước đầu tiên, sau khi nhập các phụ thuộc bao gồm Flask vi khung web nguồn mở, là đặt các biến môi trường được ghi trong Dockerfile. Chúng tôi cũng cần tải các mô hình tuần tự hóa Phân tích phân biệt tuyến tính và Mạng thần kinh Perceptron nhiều lớp. Chúng tôi tạo ứng dụng Flask của mình bằng cách viết app = Flask(__name__). Sau đó, chúng tôi tạo ba tuyến đường Flask để chúng tôi có thể phục vụ lưu lượng HTTP trên tuyến đường đó

- http. //0. 0. 0. 0. 5000/dòng/250. Lấy dữ liệu từ thử nghiệm. json và trả về hàng được yêu cầu được xác định bởi biến Line (trong ví dụ này, chúng tôi muốn trích xuất dữ liệu của hàng số 250)

- http. //0. 0. 0. 0. 5000/dự đoán/51. Trả về dự đoán phân loại từ cả mô hình được đào tạo LDA và Mạng thần kinh bằng cách đưa dữ liệu được yêu cầu (trong ví dụ này, chúng tôi muốn đưa dữ liệu của hàng số 51)

- http. //0. 0. 0. 0. 5000/điểm. Trả về điểm phân loại cho cả mô hình suy luận Mạng thần kinh và LDA trên tất cả dữ liệu có sẵn (kiểm tra. json)

The Flask routes allows us to request what we need from the API by adding the name of our procedure (/line/, /prediction/, /score) to the URL (http://0.0.0.0:5000). Whatever the data we add, api.py will always return the output we request.

Mô hình học máy

Con tàu. py là tập lệnh python nhập và chuẩn hóa dữ liệu EEG trong tệp csv (đào tạo. csv) và đào tạo hai mô hình để phân loại dữ liệu (sử dụng scikit-learning). Kịch bản lưu hai mô hình. Phân tích phân biệt tuyến tính (clf_lda) và mạng lưới thần kinh nhiều lớp perceptron (clf_NN)

Hình ảnh Docker cho suy luận trực tuyến

Chúng tôi có tất cả để xây dựng hình ảnh Docker của mình. Để bắt đầu, chúng ta cần Dockerfile với hình ảnh jupyter/scipy-notebook làm hình ảnh cơ sở. Chúng tôi cũng cần đặt các biến môi trường và cài đặt joblib để cho phép tuần tự hóa và giải tuần tự hóa các mô hình và bình được đào tạo của chúng tôi (các yêu cầu. txt). Chúng tôi sao chép tàu. csv, kiểm tra. json, đào tạo. py và api. py vào hình ảnh. Sau đó, chúng tôi chạy tàu. py sẽ phù hợp và tuần tự hóa các mô hình máy học như một phần của quy trình xây dựng hình ảnh của chúng tôi

Đây rồi

Để xây dựng hình ảnh này, hãy chạy lệnh sau

docker build -t my-docker-api -f Dockerfile . 

Chúng tôi thu được đầu ra sau

Chạy suy luận trực tuyến Docker

Now the goal is to run our online inference meaning that each time a client issues a POST request to the /line/, /prediction/, /score endpoints, we will show the requested data (row), predict the class of the data we inject using our pre-trained models, and the score of our pre-trained models using all the available data. To launch the web server, we will run a Docker container and run the api.py script:

docker run -it -p 5000:5000 my-docker-api python3 api.py

Cờ -p hiển thị cổng 5000 trong vùng chứa thành cổng 5000 trên máy chủ của chúng tôi, cờ -it cho phép chúng tôi xem nhật ký từ vùng chứa và chúng tôi chạy api python3. py trong hình ảnh my-api

Đầu ra như sau

Bạn có thể thấy rằng chúng tôi đang chạy trên http. //0. 0. 0. 0. 5000/ và bây giờ chúng tôi có thể sử dụng trình duyệt web của mình hoặc lệnh curl để đưa ra yêu cầu POST tới địa chỉ IP

Nếu chúng ta gõ

curl http://0.0.0.0:5000/line/232

Chúng tôi sẽ nhận được hàng số 232 được trích xuất từ ​​​​dữ liệu của chúng tôi (thử nghiệm. json)

Kết quả tương tự khi sử dụng trình duyệt web

Nếu chúng ta gõ lệnh curl sau

curl http://0.0.0.0:5000/prediction/232

Chúng ta sẽ thấy đầu ra sau

Đầu ra ở trên có nghĩa là mô hình LDA đã phân loại dữ liệu được cung cấp (hàng 232) là chữ cái 21 (U) trong khi Mạng thần kinh Perceptron nhiều lớp phân loại dữ liệu là chữ cái 8 (H). Hai mô hình không đồng nhất

Nếu chúng ta gõ

curl http://0.0.0.0:5000/score

Chúng tôi sẽ thấy điểm số của các mô hình của chúng tôi trên toàn bộ tập dữ liệu

Như chúng ta có thể đọc, chúng ta nên tin tưởng hơn vào Mạng lưới thần kinh Perceptron nhiều lớp với điểm chính xác là 0. 59 ngay cả khi điểm không quá cao. Một số việc cần làm để nâng cao độ chính xác

Cái gì tiếp theo?

Tôi hy vọng bạn có thể thấy sự đơn giản của việc chứa các ứng dụng máy/học sâu của mình bằng cách sử dụng Docker và bình để thực hiện suy luận trực tuyến. Đây là một bước cần thiết khi chúng tôi muốn đưa các mô hình của mình vào sản xuất. Tất nhiên, đó là một cách nhìn đơn giản vì chúng ta cần tính đến nhiều khía cạnh hơn như mạng, bảo mật, giám sát, cơ sở hạ tầng, điều phối hoặc thêm cơ sở dữ liệu để lưu trữ dữ liệu thay vì sử dụng tệp json

Làm cách nào để Dockerize Python REST API?

Bước 1. cài đặt docker. Tải xuống trình cài đặt docker từ https. // tài liệu. người đóng tàu. com/máy tính để bàn. .
Bước 2. Cài đặt python và bình
Bước 3. Tạo API bình. .
Bước 5. Tạo tệp yêu cầu. .
Bước 6. Tạo dockerfile. .
Bước 7. Xây dựng và chạy hình ảnh docker. .
Bước 8. Đẩy và kéo hình ảnh Docker (tùy chọn)

Làm cách nào để triển khai API REST trong Docker?

Sử dụng công cụ có thể gọi API REST để triển khai hình ảnh Docker. .
Sao chép Dockerfile và tập lệnh joinMember và removeMember vào máy tính đã cài đặt Docker. .
Mở một cửa sổ lệnh tại thư mục chứa các tệp
Chạy lệnh Docker để tạo image. .
Xác minh việc tạo hình ảnh

Docker có sử dụng API REST không?

API Docker Engine là API RESTful được truy cập bởi ứng dụng khách HTTP chẳng hạn như wget hoặc curl hoặc thư viện HTTP là một phần của hầu hết các ngôn ngữ lập trình hiện đại.

Docker có tốt cho Python không?

Phiên bản Python . The “official” Docker image has the benefit of providing every version of Python you might want, and tends to be very up-to-date with bugfix releases.