78 Matching Annotations
  1. Nov 2024
    1. Deploying Machine Learning Models with Flask and AWS Lambda: A Complete Guide

      In essence, this article is about:

      1) Training a sample model and uploading it to an S3 bucket:

      ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression import joblib

      Load the Iris dataset

      iris = load_iris() X, y = iris.data, iris.target

      Split the data into training and testing sets

      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

      Train the logistic regression model

      model = LogisticRegression(max_iter=200) model.fit(X_train, y_train)

      Save the trained model to a file

      joblib.dump(model, 'model.pkl') ```

      1. Creating a sample Zappa config, because AWS Lambda doesn’t natively support Flask, we need to use Zappa, a tool that helps deploy WSGI applications (like Flask) to AWS Lambda:

      ```json { "dev": { "app_function": "app.app", "exclude": [ "boto3", "dateutil", "botocore", "s3transfer", "concurrent" ], "profile_name": null, "project_name": "flask-test-app", "runtime": "python3.10", "s3_bucket": "zappa-31096o41b" },

      "production": {
          "app_function": "app.app",
          "exclude": [
              "boto3",
              "dateutil",
              "botocore",
              "s3transfer",
              "concurrent"
          ],
          "profile_name": null,
          "project_name": "flask-test-app",
          "runtime": "python3.10",
          "s3_bucket": "zappa-31096o41b"
      }
      

      } ```

      1. Writing a sample Flask app:

      ```python import boto3 import joblib import os

      Initialize the Flask app

      app = Flask(name)

      S3 client to download the model

      s3 = boto3.client('s3')

      Download the model from S3 when the app starts

      s3.download_file('your-s3-bucket-name', 'model.pkl', '/tmp/model.pkl') model = joblib.load('/tmp/model.pkl')

      @app.route('/predict', methods=['POST']) def predict(): # Get the data from the POST request data = request.get_json(force=True)

      # Convert the data into a numpy array
      input_data = np.array(data['input']).reshape(1, -1)
      
      # Make a prediction using the model
      prediction = model.predict(input_data)
      
      # Return the prediction as a JSON response
      return jsonify({'prediction': int(prediction[0])})
      

      if name == 'main': app.run(debug=True) ```

      1. Deploying this app to production (to AWS):

      bash zappa deploy production

      and later eventually updating it:

      bash zappa update production

      1. We should get a URL like this:

      https://xyz123.execute-api.us-east-1.amazonaws.com/production

      which we can query:

      curl -X POST -H "Content-Type: application/json" -d '{"input": [5.1, 3.5, 1.4, 0.2]}' https://xyz123.execute-api.us-east-1.amazonaws.com/production/predict

  2. Nov 2023
    1. basicConfig

      هم بهش میگه خروجی را کجا بریزه و هم براش یه Level تعیین کرد. طبیعتا اگر Level در حد Critical باشه، دیگه نمیره سراغ Info.

    2. format

      چقد قشنگ Format را تعریف کرده

    3. basicConfig

      هم بهش میگه خروجی را کجا بریزه و هم براش یه Level تعیین کرد.

    4. Debug

      Debug Level: اطلاعات Debugger مثل همون System.log ها است

    5. confirmation message

      Level Info: این برای نشون دادن FLow برنامه و یه جورایی برای Confirmation Messages است

  3. Jul 2023
    1. A de

      ما یه چیز دیگه هم داریم به نام @before_request که اونم خیلی جالبه

    2. Modern web

      این Routing در واقع برای map کردن یک HTTP Request به یک Function است. مثل اینکه این Routing میتونن به انواع و اقسام HTTP Requst جواب بدن مثل GET و POST و غیره. در واقع در نهایت یک Routing Table درست میشه که هر URL به یک تیکه کدی وصل می کنه و به این Routing Table یا Routing Engine کفته می شود.(یاد مفهوم Routing Table در لایه 3 یا network افتادم)

      برای status code می تونی بعد اون return سااده بنویسی 200 return "Would you like some tea?", 200

    1. o con

      حالا می خواد بره با Axios وصلش کنه

    2. e

      حالا رفت سراغ Vue

    3. requests

      در واقع تعیین می کنه که درخواست ها از چه پروتکلی، با چه IP یا Domain Name و رو چه Port می تونی جواب بدی. خیلی خووبه براش تعیین کنی تو فقط باید از این IP و Port که در Front تعیین کردی استفاده کنی

    4. Flask-CORS

      تازه رفت سراغ Flask-origin چقد جاالب.

    1. )

      یه سری چیز دیگه هم هست use_reloader انگار پس از هر تغییری خودش restart می کنه threaded یعنی هر request را به یک thread بسپاری

    1. .

      ما یه سری چیز جالب دیگه هم داریم که اینجا نیورده request.json request.data

    2. method

      از همین استفاده می کرد که بتونه بفهمه الان با Method به نام Request یا Response

    3. Form

      این داخلش اطلاعاتی که به وسیله POST و در داخل Form در سمت View درست شده است را میفرستن تو این Object که انگار یک Dictionary هم هست. خیلی بهتر در این سایت برات نوشتم. https://www.digitalocean.com/community/tutorials/processing-incoming-request-data-in-flask

    1. abort(401)

      اینم اولین باره من دارم می بینم. مثل اینکه قدیمیه ولی کسی دیگه از این استفاده نمی کنه

    2. url_for

      من تا الان همچین تابعی ندیده بودم. فقط اسم اون url را میده. build a URL dynamically بعضی وقتا می خوای بر اساس ورودی کاربر به url های مختلفی اون را بفرستی که برای این کار از url_for استفاده می کنند. هر چی پارامتر بعد بهش بدی میشه در واقع همون پارامترهای اون تابع: url_for('cricket',favteam = team) مثالش اینجاس: https://www.geeksforgeeks.org/flask-url-helper-function-flask-url_for/

    3. redirect()

      که خب برای وقتایی هست که تو میخوای در یک تابعی هستی و درخواست را بفرستی برای یک تابع دیگه کخ اون Handle کنه. مثلا وقتی User و Pass نداره بره تو صفحه Signup. سه تا پارامتر میگیره شامل location که آدرسی که میخواد نتیجه بره و statuscode که خب طبیعتا 302 است و response نفهمیدم.

    1. return resp

      همیشه برای Return شدن میومدیم از render_template استفاده می کردیم ولی ایندفعه کار باحالی کرده و با make_response این کار را کرده. چه جالب اینجوری Set می کنه. دقت داشته باش که با این make response میشه خیلی کارا کرد از جمله Set کردن Status Code برای Response و mimetype و headers.

      • myResponse = make_response('Response')
      • myResponse.headers['customHeader'] = 'This is a custom header'
      • myResponse.status_code = 403
      • myResponse.mimetype = 'video/mp4'
    2. request.cookies.get

      اینم نحوه get کردن که مثل همیشه از طریق request این کار را می کنه

    3. Read

      برای Set شدن باید از سمت Server بیاد و برای Get شدن باید از سمت Client بیاد. برای Get کردنم که همون طور که میدونی خود مرورگر Client برات تو همون درخوسات های Get برات این Cookie را هم میفرسته

    4. In Flask

      برای Set شدن باید از سمت Server بیاد و برای Get شدن باید از سمت Client بیاد. همون جور که میدونی برای برای درست کردن response ا دستوری به نام make_response() استفده می کنیم . تو این دستور از تابعی به نام set_cookie استفاده می کنیم که میره برات یک Cookie را ذخیره می کنه.

    5. client’s computer

      اقا این Cookie همون جور که می دونی به عنوان بخشی از پروتکل http کار می کند و برای ذخیره کردن اطلاعات کاربر به کار می رود. من تو Onenote برات نوشتم. برای دسترسی به Cookie ها، داخل Request Object می تونی با attr به نام cookie بهش دسترسی داشته باشی. یک سری Extra Date داره.

    1. ven belo

      اقا دقت کن که من form در یک جلسه قبل گفتم حالا اومده تو صفحه student.html یک فرم گذاشته که تو فرمش گفته بفرس به result (البته من تو digital occean خوندم که باید بفرسته به همون جایی که ازش form را گرفته و این برام عحیبه) به هر حال در result گفته با post بگیر و اطلاعات را از طریق request.form بگیر و حالا با صفحه result اون اطلاعات را به کاربر نشون بده. خیلی ساده و قشنگ

    1. If the JSON o

      نکته خیلی مهمی که میگه اینه که حتما باید Value ها حاوی کلید باشند مگرنه به مشکل میخوره

    2. request.get_json()

      چه تابع جالبی که میاد اطلاعات JSON را به Python تبدیل می کند

    3. s:

      قوانین تبدیل JSON به Python dict: اولا اگر در Json حالت Key و Value داشته باشد، در پایتون به صورت Dictionary است. دوما آرایه در Json به List در پایتون تبدیل می شود. سوما Value هایی که داخل " " باشد به Sting در پایتون تبدیل می شود. چهارما باحاله نگاه کن :) پنجما اعدادی که " " نداشته باشد به اعداد تبدیل می شود.

    4. In P

      هر وقت اسم JSON پیش می اید نام POSTMAN می درخشد

    5. Usin

      حالا رفت سراغ Json چون خیلی بهتر از Query String و Form Data براد اطلاعات را میفرسته. برای اطلاعات پیچیده تر بهتر است.

    6. Inside

      شاهکارش برای Handle کردن FORM. خیلی خووبه یاد بیگیر

    7. The most important thing to know about this form is that it performs a POST request to the same route that generated the form.

      این فرم POST Request را میفرسته به همون URL که این Form را Generate کرده. دقتم داشته باش که این فیلد ها را بعدا میشه در Object به نام Form گرفت و اسمشم همونایی که در Attribute به نام name گذاشتیم که اینجا language و Framework است

    8. To de

      جالبه برای درست کردن Form اومده هر دو تابع GET و POST را گذاشته و اینجوری تو موقع Get که فرم را میفرسته

    9. Form data

      از اینجا در مورد object به نام Form توزیح می دهد که اطلاعاتی که تو اطلاعاتی که در From و در تابع POST میفرستی میاد در Object به نام Form

    10. reques

      دو جورمیاد اون Query String را میگیره request.args.get request.args حس می کنم که این args یک Array است دقت داشته باش که language یک کلید است و با این دستور میاد محتوا را میگیره. در صورتی request.args.get که حتی اگر language هم خالی باشه بازم مشکلی در اجرای برنامه پیش نمیاد، البته اگه برنامه تو اینا Handle کنه و مقدار خروجی اش برابر None است. در صورتی که request.args بخوای بری اگر نداشته باشه بهت خطای 400 میده.

    11. A query string

      اینجا داره query string هاشا درست میکنه

    12. This tutoria

      اینجا که برات پیش نیازها را نوشته

    1. static file su

      اینجا تو بحث Static فایل ها است که مثل JS و CSS است. میگه به صورت عمومی این کار Web Server است ولی در موقع Develope باید این فایل ها را در پوشه Static بذاریم.

    2. A special endpoint ‘static’ is used to generate URL for static files.

      خیلی جالبه میگه فقط با گفتن کلید واژه static خودش برات URL دسترسی به این پوشه را درست می کنه. الان تو مثالشم ببینی میاد با یه url_for() و یک کلید واژه static و اسم فایل، اون فایل را برات Serve می کنه

    1. render_template

      این render_template که بذاری یعنی برو از Template Engine بخون . با این تابع میگی برو از تو پوشه TEMPLATE و فایل hello را بخون

    2. ro

      ببین من خیلی با اینجاش دیگه موافق نیستم چون تو Return به جای یک عبارت ساده، میاد یه HTML می نویسه و این هر جوری حساب کنی تخمیه و ما نباید اینجوری بریمو باید Json پس بده. این روش کلا اشتباس

    1. args

      جالبه این args من نمیدونم کجاها به درد میخوره

    2. request

      اول همه باید خیلی خوووب دید داشته باشی نسبت به Request و Response در موقع درخواست POST. این جا از یک ابجکت جدید رونمایی کرد به نام request و در موقع پست توی request اطلاعات ارسالی است(دقت داشته باش که توی body اون اطالاعات ارسالی است) و تو Response حالا 200 می تونه باشه(مجیدی دوباره اطلاعات ارسالی را پس میفرستاد)

    3. The following tabl

      متدهای اصلی HTTP را داره میگه

    1. dynamically building a URL

      با این تابع که بهش میگن url_for میشه یک تابع دیگه را اجرا کنی. توی اولین ارگومانش اسم تابعی که باید Redirect بشه را میدی و توی آزگومان های بعدی در واقع باید همون Variable Rule یا Variable Name ها را بدی

    1. variable parts

      بخ این که میان یه URL را به تابع وصل می کنند میگن Rule یا URL RULES(مثل همین چیزهایی که در iptables است) به این کاری که ما داریم اینجا انجام میدیم میگن Variable Rule به اون که داخل پرانتزه میگن Parameter به اون چیزی که داخل < > است نیگن Variable Name * نکته مهم این است که باید حواست باشه که اسم Variable Name با اسم اونی که تو تابع میده یکی است

    2. python or /python/

      به صورت پیش فرض هم /python و هم /python/ یکی است ولی جالبه برای Flask اینجوری نیس که این قواعد از Wekzeug میاد

    3. n add

      به صورت پیش فرض این Variable Rule به صورت رشته است. ولی میشه Integer یا FLoat هم باشد که نمونه هاش را میبینی

  4. Jun 2023
    1. The add_url_rule() fu

      البته میگه یه جور دیگه هم این را گفت و اونم اینکه با متدی به نام add_url_rule این URL را به این تابع وصل کنی

    1. above example, ‘/’ URL is bound wit

      اصطلاحا میگن این URL به این تابع Bind شد

    2. app.run

      این متد هم ماله Flask و توش میتونی host که ما اینجا 127.0.0.1 است. نمیدونم این 0.0.0.0 به چه دردی میخوره. اون پورت که به صورت پیش فرض برابر 5000 است. اون Debug باید فعال کنی و Option که برو بعدا ببین به چه دردی میخوره.

    3. Th

      بعدا ببینیم اینا چی هستن

    4. route() function of the Flask class is a decorator

      این @app.route یه Decorator است یعنی میاد روی سر یک Function و یک سری عملکرد اون را افزایش می دهد. مثل همون مثال که زد و Log انداخت و اینا.

    5. Flask constructor t

      نمیدونم Constructor برای چی این name را می گیره

    6. An object of Flask

      جالبه این Flask خودش یه WSGI را داره

    1. templating engine

      اینم یک template engine کامل است که خب اومده بین کد های html ، از certain data source برای رندر شدن Dynammic Web Pages استفاده می کند.

  5. Feb 2021
    1. When we are providing our API endpoint to frontend team we need to ensure that we don’t overwhelm them with preprocessing technicalities.We might not always have a Python backend server (eg. Node.js server) so using numpy and keras libraries, for preprocessing, might be a pain.If we are planning to serve multiple models then we will have to create multiple TensorFlow Serving servers and will have to add new URLs to our frontend code. But our Flask server would keep the domain URL same and we only need to add a new route (a function).Providing subscription-based access, exception handling and other tasks can be carried out in the Flask app.

      4 reasons why we might need Flask apart from TensorFlow serving

    1. The most common way to deploy a trained model is to save into the binary format of the tool of your choice, wrap it in a microservice (for example a Python Flask application) and use it for inference.

      Model as Code <--- the most common way of deploying ML models

  6. Oct 2020
  7. Jun 2020
    1. The philosophy behind Flask is that it gives only the components you need to build an app so that you have the flexibility and control. In other words, it’s un-opinionated. Some features it offers are a build-int dev server, Restful request dispatching, Http request handling, and much more.

      Flask isn't as full of features as Django (which makes him lighter), but it still offers:

      • build-int dev server
      • Restful request dispatching
      • HTTP request handling
      • much more...
  8. Apr 2020
    1. To use Gunicorn as your web server, it must be included in the requirements.txt file as an app dependency. It does not need to be installed in your virtual environment/host machine.
  9. Dec 2019
    1. Werkzeug provides a development server: a simple web server that you can run with a single command and almost no configuration. When you do flask run (or werkzeug.serving.run_simple()), this development server is what you are getting
  10. Aug 2019
  11. Jun 2019
  12. Jun 2018
    1. Hmm. Definitely more http:// and a little more / than there needs to be. It seems like SERVER_NAME should be set to something more like localhost:5000. Let’s try.

      Still having issues when it comes to multi application routing.

  13. Sep 2017
  14. Apr 2017
  15. Jul 2015