<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="pretty-atom-feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  
  <title>DumpDocs</title>
  <subtitle>Personal blog about Machine learning, AI, ML Ops, LLM, Python</subtitle>
  <link href="https://shekharkoirala.github.io/feed/feed.xml" rel="self" />
  <link href="https://shekharkoirala.github.io/" />
  <updated>2025-02-25T19:16:40Z</updated>
  <id>https://shekharkoirala.github.io/</id>
  <author>
    <name>Shekhar Koirala</name>
  </author>
  <entry>
    <title>Robust MLOps Infrastructure</title>
    <link href="https://shekharkoirala.github.io/blog/mlops_infrastructure/" />
    <updated>2025-02-25T19:16:40Z</updated>
    <id>https://shekharkoirala.github.io/blog/mlops_infrastructure/</id>
    <content type="html">&lt;p&gt;Creating a reliable and flexible MLOps infrastructure is critical for organizations leveraging machine learning in production. In this post, I’ll explore practical challenges that emerge when deploying ML systems and propose pragmatic solutions using open-source tools and standard workflows.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://shekharkoirala.github.io/images/mlops-architecture.svg&quot; alt=&quot;mlops architecture&quot; width=&quot;800&quot; height=&quot;500&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-challenge-of-production-ml-systems&quot;&gt;The Challenge of Production ML Systems&lt;/h2&gt;
&lt;p&gt;After deploying a machine learning model in production, a new set of challenges emerges. The model pipeline typically involves data storage (like S3), orchestration tools (such as Airflow, Prefect, or Flyte), and back to storage for processed results. But this simple flow becomes complex when we consider the full ML lifecycle.&lt;/p&gt;
&lt;p&gt;Let’s address the common incremental issues that arise and propose practical solutions:&lt;/p&gt;
&lt;h3 id=&quot;testing-models-in-production&quot;&gt;Testing Models in Production&lt;/h3&gt;
&lt;p&gt;Challenge: How do you verify a newly deployed model performs well on critical test data? Pragmatic Solution: Create a dedicated testing workflow that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automatically runs inference on a curated set of critical test cases&lt;/li&gt;
&lt;li&gt;Compares performance against predefined thresholds for precision, recall, etc.&lt;/li&gt;
&lt;li&gt;Generates detailed reports highlighting any concerning areas&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Example test workflow with Prefect&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; prefect &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; flow&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; task
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; pandas &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; pd
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; sklearn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;metrics &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; precision_score&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; recall_score

&lt;span class=&quot;token decorator annotation punctuation&quot;&gt;@task&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;load_critical_test_data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s3_path&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;read_parquet&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s3_path&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token decorator annotation punctuation&quot;&gt;@task&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;run_model_inference&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;model&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; test_data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; model&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;predict&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;test_data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;drop&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;target&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; axis&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token decorator annotation punctuation&quot;&gt;@task&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calculate_metrics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;y_true&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y_pred&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;precision&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; precision_score&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;y_true&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y_pred&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;recall&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; recall_score&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;y_true&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y_pred&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token decorator annotation punctuation&quot;&gt;@task&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;evaluate_results&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;metrics&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; thresholds&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; metrics&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;precision&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; thresholds&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;precision&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;raise&lt;/span&gt; Exception&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Model precision below threshold&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Model passed critical test evaluation&quot;&lt;/span&gt;

&lt;span class=&quot;token decorator annotation punctuation&quot;&gt;@flow&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;test_new_model&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    model &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; load_model_from_registry&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;latest&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    test_data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; load_critical_test_data&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;s3://bucket/critical_test_data.parquet&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    predictions &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; run_model_inference&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;model&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; test_data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    metrics &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; calculate_metrics&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;test_data&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;target&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; predictions&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; evaluate_results&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;metrics&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;precision&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.85&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;recall&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.80&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; result&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;detecting-model-drift&quot;&gt;Detecting Model Drift&lt;/h3&gt;
&lt;p&gt;Challenge: Models degrade over time as data distributions change. How do you proactively detect this? Pragmatic Solution: Implement an automated drift detection workflow that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Periodically samples production data&lt;/li&gt;
&lt;li&gt;Calculates key statistical measures like PSI (Population Stability Index) or KL divergence&lt;/li&gt;
&lt;li&gt;Compares feature distributions between training data and current data&lt;/li&gt;
&lt;li&gt;Triggers alerts when significant drift is detected&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://shekharkoirala.github.io/images/mlops_mermaid_1.png&quot; alt=&quot;mlops drift&quot; width=&quot;699&quot; height=&quot;947&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;model-rollback-strategy&quot;&gt;Model Rollback Strategy&lt;/h3&gt;
&lt;p&gt;Challenge: What if a deployed model starts performing poorly or causing issues? Pragmatic Solution: Implement a robust model registry integrated with your serving infrastructure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Version and tag all models in the registry&lt;/li&gt;
&lt;li&gt;Maintain metadata about each model version (training data, performance metrics)&lt;/li&gt;
&lt;li&gt;Create fast-path rollback workflows that can quickly revert to prior stable versions&lt;/li&gt;
&lt;li&gt;Automate the rollback process when critical metrics drop below thresholds&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;flexible-model-serving&quot;&gt;Flexible Model Serving&lt;/h3&gt;
&lt;p&gt;Challenge: How do you create a model serving infrastructure that handles updates, scaling, and canary deployments? Pragmatic Solution: Build a model serving layer that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Integrates directly with your model registry&lt;/li&gt;
&lt;li&gt;Supports A/B testing and canary deployments&lt;/li&gt;
&lt;li&gt;Includes automatic scaling based on traffic&lt;/li&gt;
&lt;li&gt;Enables request/response logging for performance monitoring&lt;/li&gt;
&lt;li&gt;Implements circuit breakers to prevent cascading failures&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;changing-model-architecture&quot;&gt;Changing Model Architecture&lt;/h3&gt;
&lt;p&gt;Challenge: What if you need to fundamentally change your model architecture? Pragmatic Solution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create modular workflow definitions that can accommodate different model architectures&lt;/li&gt;
&lt;li&gt;Use environment management tools like Docker and conda to handle different dependencies&lt;/li&gt;
&lt;li&gt;Implement feature stores for consistent feature engineering across - model versions&lt;/li&gt;
&lt;li&gt;Design input/output interfaces that remain stable even as architectures change&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;model-comparison&quot;&gt;Model Comparison&lt;/h3&gt;
&lt;p&gt;Challenge: How do you effectively compare multiple model candidates? Pragmatic Solution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create a dedicated model comparison workflow that:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Runs several models on the same evaluation dataset&lt;/li&gt;
&lt;li&gt;Computes performance metrics for each model&lt;/li&gt;
&lt;li&gt;Generates visualizations to compare metrics&lt;/li&gt;
&lt;li&gt;Automatically selects the best model based on predefined criteria&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Keep the model registry at the center of this process to maintain versioning&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here are the few more best practices:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Start with a Minimal Viable Pipeline: Begin with the essential components and iterate&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adopt Standard Tools: Leverage battle-tested open-source tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mlflow/mlflow&quot;&gt;MLflow&lt;/a&gt; for experiment tracking and model registry&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kubeflow/&quot;&gt;Kubeflow&lt;/a&gt; or &lt;a href=&quot;https://github.com/flyteorg/flyte&quot;&gt;Flyte&lt;/a&gt; for workflow orchestration&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SeldonIO/seldon-core&quot;&gt;Seldon Core&lt;/a&gt; or &lt;a href=&quot;https://github.com/kserve/kserve&quot;&gt;KServe&lt;/a&gt; or custom gRPC / FastAPI for model serving&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://feast.dev/&quot;&gt;Feast&lt;/a&gt; for feature stores&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/evidentlyai/evidently&quot;&gt;Evidentialy&lt;/a&gt; for drift detection&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/prometheus/prometheus&quot;&gt;Prometheus&lt;/a&gt; and &lt;a href=&quot;https://github.com/grafana/grafana&quot;&gt;Grafana&lt;/a&gt; for monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Centralize Configuration: Use a central configuration repository for all workflow parameters&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build for Failure: Assume components will fail and design graceful degradation&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Standardize Metrics: Define organization-wide standards for model evaluation&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;databricks-alternative-solution&quot;&gt;DataBricks : ALternative Solution&lt;/h2&gt;
&lt;p&gt;Databricks provides a unified analytics platform that can significantly enhance and streamline any MLOps workflows. With the overhelming open source tools. Databricks is the safe approach for the MLOps ecosystem.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://shekharkoirala.github.io/images/databricks-mlops-integration.svg&quot; alt=&quot;databricks Architecture&quot; width=&quot;800&quot; height=&quot;500&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://shekharkoirala.github.io/images/mlops_databricks_mermaid.png&quot; alt=&quot;mlops databricks&quot; width=&quot;737&quot; height=&quot;1077&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;p&gt;Databricks claims faster ML development cycles and learn more about it at its academy : &lt;a href=&quot;https://customer-academy.databricks.com/&quot;&gt;https://customer-academy.databricks.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://shekharkoirala.github.io/images/databricks_certificate.png&quot; alt=&quot;certificate&quot; width=&quot;1305&quot; height=&quot;932&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Top 50 SQL for Mastery</title>
    <link href="https://shekharkoirala.github.io/blog/sql_50_mastery/" />
    <updated>2024-12-25T15:52:11Z</updated>
    <id>https://shekharkoirala.github.io/blog/sql_50_mastery/</id>
    <content type="html">&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/recyclable-and-low-fat-products/&quot;&gt;Recyclable and Low Fat Products&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;find_products&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;products&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DataFrame&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DataFrame&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;# return products[(products[&quot;low_fats&quot;] == &quot;Y&quot;) &amp;amp; (products[&quot;recyclable&quot;] ==&quot;Y&quot;)].loc[:,[&quot;product_id&quot;]]&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; products&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;products&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;low_fats&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Y&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;products&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;recyclable&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Y&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;product_id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; product_id &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Products &lt;span class=&quot;token keyword&quot;&gt;where&lt;/span&gt; low_fats &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Y&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt; recyclable &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Y&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note: can use df.iloc[:, [“column_name”]] or df[[“column_name]] df[“column_name] returns series.&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/find-customer-referee/&quot;&gt;Find Customer Refree&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;find_customer_referee&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;customer&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DataFrame&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DataFrame&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; customer&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;customer&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;referee_id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;customer&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;referee_id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isnull&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;find_customer_referee&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;customer&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DataFrame&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DataFrame&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    customer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fillna&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; inplace&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; customer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;loc&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;customer&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;referee_id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note: can insert the logic in the loc&lt;/p&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; name &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Customer &lt;span class=&quot;token keyword&quot;&gt;where&lt;/span&gt; referee_id &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;or&lt;/span&gt; referee_id &lt;span class=&quot;token operator&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;Null&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/big-countries/?&quot;&gt;Big countries&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-Python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-Python&quot;&gt;def big_countries(world: pd.DataFrame) -&gt; pd.DataFrame:
    return world[(world[&quot;area&quot;] &gt;= 3000000) | (world[&quot;population&quot;] &gt; 25000000)][[&quot;name&quot;, &quot;population&quot;, &quot;area&quot;]]&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; population&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; area &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; world &lt;span class=&quot;token keyword&quot;&gt;where&lt;/span&gt; population &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;25000000&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;or&lt;/span&gt; area &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3000000&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/article-views-i/&quot;&gt;Article View&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-Python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-Python&quot;&gt;def article_views(views: pd.DataFrame) -&gt; pd.DataFrame:
    return views[views[&quot;viewer_id&quot;] == views[&quot;author_id&quot;]][[&quot;author_id&quot;]].drop_duplicates()
                .sort_values(&quot;author_id&quot;).rename(columns={&quot;author_id&quot;: &quot;id&quot;})&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;distinct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;author_id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; id &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Views &lt;span class=&quot;token keyword&quot;&gt;where&lt;/span&gt; author_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; viewer_id &lt;span class=&quot;token keyword&quot;&gt;order&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;by&lt;/span&gt; id&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/invalid-tweets/&quot;&gt;invalid tweets&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; tweet_id &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Tweets &lt;span class=&quot;token keyword&quot;&gt;where&lt;/span&gt; length&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;content&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;invalid_tweets&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;tweets&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DataFrame&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DataFrame&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;22&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; tweets&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;query&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-interpolation&quot;&gt;&lt;span class=&quot;token string&quot;&gt;f&quot;content.str.len() &gt;15&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;tweet_id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; tweets&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;loc&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;tweets&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;content&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;tweet_id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/replace-employee-id-with-the-unique-identifier/&quot;&gt;Replace Employee id&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;replace_employee_id&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;employees&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DataFrame&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; employee_uni&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DataFrame&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DataFrame&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; pd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;merge&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;employees&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; employee_uni&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; how&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;left&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; on&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;unique_id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; unique_id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; name &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Employees &lt;span class=&quot;token keyword&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;join&lt;/span&gt; EmployeeUNI &lt;span class=&quot;token keyword&quot;&gt;on&lt;/span&gt; Employees&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; EmployeeUNI&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/product-sales-analysis-i/&quot;&gt;Product Sales Analysis&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; product_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; price &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Sales &lt;span class=&quot;token keyword&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;join&lt;/span&gt; Product &lt;span class=&quot;token keyword&quot;&gt;on&lt;/span&gt; Sales&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;product_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Product&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;product_id&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;8&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/customer-who-visited-but-did-not-make-any-transactions&quot;&gt;customer-who-visited-but-did-not-make-any-transactions&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; 
 customer_id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;token function&quot;&gt;COUNT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;AS&lt;/span&gt; count_no_trans &lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;FROM Visits LEFT JOIN Transactions ON Visits.visit_id = Transactions.visit_id WHERE transaction_id IS NULL GROUP BY customer_id; ``` 9. &lt;a href=&quot;https://leetcode.com/problems/rising-temperature/description/?envType=study-plan-v2&amp;amp;envId=top-sql-50&quot;&gt;Rising Temperature&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;language-Python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-Python&quot;&gt;import pandas as pd

def rising_temperature(weather: pd.DataFrame) -&gt; pd.DataFrame:
    if weather.size:
        weather.sort_values(by=[&#39;recordDate&#39;], inplace=True)
        weather.reset_index(inplace=True)
        weather.recordDate= pd.to_datetime(weather.recordDate, format=&quot;-%Y-%m-%d&quot;)
        new_dates = pd.date_range(start=weather[&#39;recordDate&#39;][0],
                                  end=weather[&#39;recordDate&#39;][len(weather)-1],freq=&#39;D&#39;)

        weather = weather.set_index(&quot;recordDate&quot;).reindex(new_dates).reset_index()
        weather.rename(columns={&quot;index&quot;: &quot;recordDate&quot;}, inplace=True)
        weather[&quot;change&quot;] = weather.temperature - weather.temperature.shift(1, fill_value=weather.temperature[0])
        return weather[weather[&quot;change&quot;] &gt; 0.0][[&quot;id&quot;]].rename(columns={&quot;id&quot;: &quot;Id&quot;})
    else:
        return weather[[&quot;id&quot;]].rename(columns={&quot;id&quot;:&quot;ID&quot;})&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;WITH&lt;/span&gt; PreviousWeatherData &lt;span class=&quot;token keyword&quot;&gt;AS&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; 
        id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        recordDate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        temperature&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
        LAG&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;temperature&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;OVER&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;BY&lt;/span&gt; recordDate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;AS&lt;/span&gt; PreviousTemperature&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        LAG&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;recordDate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;OVER&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;BY&lt;/span&gt; recordDate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;AS&lt;/span&gt; PreviousRecordDate
    &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; 
        Weather
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; 
    id 
&lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; 
    PreviousWeatherData
&lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; 
    temperature &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; PreviousTemperature
&lt;span class=&quot;token operator&quot;&gt;AND&lt;/span&gt; 
    recordDate &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; DATE_ADD&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;PreviousRecordDate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;INTERVAL&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;DAY&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This might be slower, as seen in leetcode.&lt;/p&gt;
&lt;pre class=&quot;language-SQL&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-SQL&quot;&gt;SELECT 
    w1.id
FROM 
    Weather w1
WHERE 
    w1.temperature &gt; (
        SELECT 
            w2.temperature
        FROM 
            Weather w2
        WHERE 
            w2.recordDate = DATE_SUB(w1.recordDate, INTERVAL 1 DAY)
    );&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-SQL&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-SQL&quot;&gt;SELECT 
    w1.id
FROM 
    Weather w1
JOIN 
    Weather w2
ON 
    DATEDIFF(w1.recordDate, w2.recordDate) = 1
WHERE 
    w1.temperature &gt; w2.temperature;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bonus:&lt;/p&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; EmpLastName&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; EmpFirstName&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ProjDesc&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; BldName&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; DeptName
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Employee&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Building&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Department&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Project
&lt;span class=&quot;token keyword&quot;&gt;where&lt;/span&gt; DeptBuilding &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; BldID
    &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt; empDeptID &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; DeptID
    &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt; EmpID &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ProjManager
&lt;span class=&quot;token keyword&quot;&gt;order&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;by&lt;/span&gt; EmpLastName&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; DeptName&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; BldName&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Multiple Tables could be used to join without using the word. Make sure to add where clause otherwise, data are added with each new row.&lt;/p&gt;
&lt;pre class=&quot;language-fallback&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-fallback&quot;&gt;from Department
inner join employee
inner join Building
on empDeptID = DeptID
and DeptBuilding = BldId
order by DeptName, EmpSalary desc&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;10&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/average-time-of-process-per-machine/description/&quot;&gt;Average Time of Process per machine&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; a1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;machine_id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;round&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;avg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a2&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;timestamp&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; a1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;timestamp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; processing_time
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Activity a1 
&lt;span class=&quot;token keyword&quot;&gt;join&lt;/span&gt; Activity a2
&lt;span class=&quot;token keyword&quot;&gt;on&lt;/span&gt; a1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;machine_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a2&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;machine_id &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt; a1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;process_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a2&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;process_id &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt; a1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;timestamp&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; a2&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;timestamp&lt;/span&gt; 
&lt;span class=&quot;token keyword&quot;&gt;group&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;by&lt;/span&gt; a1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;machine_id&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;11&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/employee-bonus/submissions/&quot;&gt;Employee Bonus&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; bonus
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Employee
&lt;span class=&quot;token keyword&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;join&lt;/span&gt; Bonus
&lt;span class=&quot;token keyword&quot;&gt;on&lt;/span&gt; Employee&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;empId &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Bonus&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;empId
&lt;span class=&quot;token keyword&quot;&gt;where&lt;/span&gt; Bonus&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;bonus &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;or&lt;/span&gt; Bonus&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;bonus &lt;span class=&quot;token operator&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;null&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;12&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/students-and-examinations/&quot;&gt;Students and Examinations&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; S&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;student_id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; S&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;student_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; SU&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;subject_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;COUNT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;E&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;student_id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; attended_exams
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Students S
&lt;span class=&quot;token keyword&quot;&gt;CROSS&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;JOIN&lt;/span&gt; Subjects SU
&lt;span class=&quot;token keyword&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;join&lt;/span&gt; Examinations E
&lt;span class=&quot;token keyword&quot;&gt;on&lt;/span&gt; S&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;student_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; E&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;student_id 
&lt;span class=&quot;token operator&quot;&gt;AND&lt;/span&gt; SU&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;subject_name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; E&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;subject_name
&lt;span class=&quot;token keyword&quot;&gt;Group&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;By&lt;/span&gt; S&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;student_id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; SU&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;subject_name
&lt;span class=&quot;token keyword&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;BY&lt;/span&gt; s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;student_id&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;13&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/managers-with-at-least-5-direct-reports/&quot;&gt;Managers with at least 5 direct reports&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Employee a
&lt;span class=&quot;token keyword&quot;&gt;Join&lt;/span&gt; Employee b &lt;span class=&quot;token keyword&quot;&gt;on&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ManagerId &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id
&lt;span class=&quot;token keyword&quot;&gt;group&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;by&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ManagerId
&lt;span class=&quot;token keyword&quot;&gt;having&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;14&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/confirmation-rate/submissions/1489282877/?envType=study-plan-v2&amp;amp;envId=top-sql-50&quot;&gt;Confirmation rate&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;user_id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;round&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;avg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;confirmed&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; confirmation_rate
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; SignUps &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; s
&lt;span class=&quot;token keyword&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;join&lt;/span&gt; Confirmations &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; c
&lt;span class=&quot;token keyword&quot;&gt;on&lt;/span&gt; s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;user_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;user_id
&lt;span class=&quot;token keyword&quot;&gt;group&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;by&lt;/span&gt; user_id&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;15&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/not-boring-movies/&quot;&gt;Not Boring Movie&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; 
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Cinema
&lt;span class=&quot;token keyword&quot;&gt;where&lt;/span&gt; description &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;boring&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt; id&lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;order&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;by&lt;/span&gt; rating &lt;span class=&quot;token keyword&quot;&gt;desc&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;16&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/average-selling-price/&quot;&gt;Average Selling Price&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; P&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;product_id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ifnull&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;round&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;US&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;units &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; P&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;price&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;US&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;units&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; average_price
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Prices &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; P
&lt;span class=&quot;token keyword&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;join&lt;/span&gt; UnitsSold &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; US
&lt;span class=&quot;token keyword&quot;&gt;on&lt;/span&gt; US&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;product_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; P&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;product_id &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt; US&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;purchase_date &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; P&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;start_date
    &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt; US&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;purchase_date &lt;span class=&quot;token operator&quot;&gt;&amp;lt;=&lt;/span&gt; P&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;end_date
&lt;span class=&quot;token keyword&quot;&gt;group&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;by&lt;/span&gt; P&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;product_id&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;17&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/project-employees-i/&quot;&gt;Project employees&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; project_id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ROUND&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;AVG&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;experience_years&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; average_years
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Project P
&lt;span class=&quot;token keyword&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;join&lt;/span&gt; Employee E
&lt;span class=&quot;token keyword&quot;&gt;on&lt;/span&gt; P&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;employee_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; E&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;employee_id
&lt;span class=&quot;token keyword&quot;&gt;group&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;by&lt;/span&gt; P&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;project_id&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;18&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/percentage-of-users-attended-a-contest/&quot;&gt;Percentage of Users attended a contest&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; contest_id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Round&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;user_id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Users&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; percentage
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Register
&lt;span class=&quot;token keyword&quot;&gt;group&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;by&lt;/span&gt; contest_id
&lt;span class=&quot;token keyword&quot;&gt;order&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;by&lt;/span&gt; percentage &lt;span class=&quot;token keyword&quot;&gt;desc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; contest_id &lt;span class=&quot;token keyword&quot;&gt;asc&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;19&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/queries-quality-and-percentage/description/&quot;&gt;Queries quality and Percentage&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; query_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ROUND&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;AVG&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Q&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;rating&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; Q&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;position&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;AS&lt;/span&gt; quality&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;Round&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Q&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;rating &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Q&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;rating&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; poor_query_percentage
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; Queries Q
&lt;span class=&quot;token keyword&quot;&gt;group&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;by&lt;/span&gt; query_name&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;20&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/monthly-transactions-i&quot;&gt;Monthly Transactions I&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-SQL&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-SQL&quot;&gt;SELECT DATE_FORMAT(trans_date, &quot;%Y-%m&quot;) as month, 
    country, 
    Count(*) as trans_count, 
    SUM(state = &#39;approved&#39;) as approved_count,
    SUM(amount) as trans_total_amount,
    SUM(Case when state = &#39;approved&#39; then amount else 0 end) as approved_total_amount
FROM Transactions
GROUP BY month, country&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;21&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/immediate-food-delivery-ii/&quot;&gt;Immediate Food Delivery&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;22&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://leetcode.com/problems/game-play-analysis-iv/description/&quot;&gt;Game Play Analysis&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Machine Learning Box</title>
    <link href="https://shekharkoirala.github.io/blog/Machinelearning/" />
    <updated>2024-08-28T16:47:41Z</updated>
    <id>https://shekharkoirala.github.io/blog/Machinelearning/</id>
    <content type="html">&lt;p&gt;Imagine a box where you put all of your machine learning stuff, Here it is.
[WIP] will update the structure&lt;/p&gt;
&lt;h3 id=&quot;bias-vs-varience&quot;&gt;Bias vs Varience&lt;/h3&gt;
&lt;h3 id=&quot;metrics&quot;&gt;Metrics&lt;/h3&gt;
&lt;h4 id=&quot;precision&quot;&gt;Precision&lt;/h4&gt;
&lt;h4 id=&quot;recall&quot;&gt;Recall&lt;/h4&gt;
&lt;h4 id=&quot;accuracy&quot;&gt;Accuracy&lt;/h4&gt;
&lt;h4 id=&quot;f1-score&quot;&gt;F1-score&lt;/h4&gt;
&lt;h3 id=&quot;cross-validation&quot;&gt;Cross-Validation&lt;/h3&gt;
&lt;p&gt;How do you choose which cross validation technique will be used for your project.
THink about how your model will be sued and interact with the data in a deployed setting.
if the dataset is huge, use Hold-out, which is basically 80-20 method&lt;/p&gt;
&lt;h4 id=&quot;k-fold&quot;&gt;K fold&lt;/h4&gt;
&lt;p&gt;if the data points are independent to each other.&lt;/p&gt;
&lt;p&gt;if the dataset is unbalanced: stratifiedKfold, as it should be aware with the classes.
if very little data, shufflesplit&lt;/p&gt;
&lt;h4 id=&quot;time-split&quot;&gt;Time split&lt;/h4&gt;
&lt;p&gt;if time is influencial in generation of the data, use Timesplit&lt;/p&gt;
&lt;h4 id=&quot;groupkfold&quot;&gt;GroupKfold&lt;/h4&gt;
&lt;p&gt;if the data is generated by the a patient , and we have lets say n patient generating the x data point,
it would be great to use group kfold. Group in this case in the participants.&lt;/p&gt;
&lt;h4 id=&quot;stratified-groupkfold&quot;&gt;stratified Groupkfold&lt;/h4&gt;
&lt;p&gt;if the data points skewed, we can use the stratisfied GroupKfold as well.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Setting up Nvidia SDK Manager and Torch Library in Jetson Board</title>
    <link href="https://shekharkoirala.github.io/blog/nvidia_jetson_sdk_jetpack_setup/" />
    <updated>2024-08-19T12:37:53Z</updated>
    <id>https://shekharkoirala.github.io/blog/nvidia_jetson_sdk_jetpack_setup/</id>
    <content type="html">&lt;p&gt;The blog serves as a backup for setting up the Nvidia Jetson Orion AGX for Development/Production.
Please note: review all the steps before proceeding.&lt;/p&gt;
&lt;p&gt;I was updating from JetPack 5.x to 6.x. My Jetson Orion AGX had already been flashed.&lt;/p&gt;
&lt;h1 id=&quot;installation&quot;&gt;Installation&lt;/h1&gt;
&lt;p&gt;The blog covers installing the &lt;a href=&quot;https://developer.nvidia.com/sdk-manager&quot;&gt;Nvidia sdk manager&lt;/a&gt;.
Make sure to install Ubuntu 22.04, not 24.04, for installing JetPack 6 (as of August 19, 2024).
Similarly, upgrade the host machine, install all the necessary Nvidia drivers and CUDA on the host machine before installing the Nvidia SDK Manager. More information on installing &lt;a href=&quot;https://shekharkoirala.com.np/posts/nvidia_cuda12_ubuntu/&quot;&gt;Nvidia Drivers on ubuntu&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;prerequistics&quot;&gt;Prerequistics&lt;/h2&gt;
&lt;p&gt;It is also advisable to review the dedicated &lt;a href=&quot;https://developer.nvidia.com/embedded/learn/jetson-agx-orin-devkit-user-guide/index.html#about-this-document&quot;&gt;developer kit user guide&lt;/a&gt;
Go over Jetson Zoo and check for package versions if needed: &lt;a href=&quot;https://elinux.org/Jetson_Zoo&quot;&gt;ZOO&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;prepare-the-nvidia-jetson-device&quot;&gt;Prepare the Nvidia Jetson Device&lt;/h2&gt;
&lt;p&gt;Once you log into the Nvidia SDK Manager, you can&#39;t verify the target board.
To do that, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Connect the USB Type-C port located above the power jack to the power source.&lt;/li&gt;
&lt;li&gt;Connect the Type-C port located beside the GPIO pins to the host computer.&lt;/li&gt;
&lt;li&gt;Connect the Micro-USB [UART] port located beside the HDMI pins to the host computer.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After this, make sure you boot the Nvidia Jetson in recovery mode. You can put the device in recovery mode in two ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Press the middle button (between power and restart) and the restart button together, then release them together.
[This step didn&#39;t work for me.]&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Turn on the Nvidia Jetson machine, open the terminal, and type:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;reboot&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--force&lt;/span&gt; forced-recovery&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After this the nvidia board will be seen in the Nvidia SDK Manager. You can also check it via command in host machine.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;lsusb&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;nvidia-sdk-manager&quot;&gt;Nvidia SDK Manager&lt;/h2&gt;
&lt;p&gt;Once the target board is detected, select the drive location where you want to download the necessary files.
Then, a prompt will appear to flash the board. Flash your board by selecting the eMMC drive.
Once the flash process is completed, it will prompt you to proceed with the installation of the Nvidia SDK Manager.
However, I encountered an issue where it wouldn&#39;t allow me to install everything.&lt;/p&gt;
&lt;p&gt;Here’s a workaround: Open the terminal on the freshly flashed Nvidia board.&lt;/p&gt;
&lt;p&gt;Connect to Wi-Fi, because the flashed Nvidia board functions like a new computer. Install the necessary software and drivers to proceed.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; update &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; upgrade
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; dist-upgrade
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt; build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev &lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; python3-pip
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; nvidia-jetpack&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And now, voila! You have the latest version of Nvidia Jetson.&lt;/p&gt;
&lt;h2 id=&quot;installing-python-packages&quot;&gt;Installing python packages.&lt;/h2&gt;
&lt;p&gt;Installing Python packages, including Poetry, can be tricky because TensorRT is installed in the system. To use it, you need to run the following command:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;poetry config virtualenvs.options.system-site-packages &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Yes, TensorRT is included in JetPack. You can verify its installation using the following command:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; tensorrt nvidia-tensorrt-dev python3-libnvinfer-dev&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, install Torch, TorchVision, and ONNX Runtime.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; https://nvidia.box.com/shared/static/mp164asf3sceb570wvjsrezk1p4ftj8t.whl &lt;span class=&quot;token parameter variable&quot;&gt;-O&lt;/span&gt; torch-2.3.0-cp310-cp310m-linux_aarch64.whl
pip &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; torch-2.3.0-cp310-cp310m-linux_aarch64.whl&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;for the wheel file url check this.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048&quot;&gt;forum posts&lt;/a&gt; , found both torch and torchvision, but might not update later.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elinux.org/Jetson_Zoo&quot;&gt;jetson zoo&lt;/a&gt; I didn&#39;t torch here&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.download.nvidia.com/compute/redist/jp/&quot;&gt;jetson distribution&lt;/a&gt; only found torch not torchvision.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Yes, it’s a bit of a mess, but it works. We don’t have much flexibility with the Torch version—we have to use whatever Nvidia provides for the JetPack versions.&lt;/p&gt;
&lt;h2 id=&quot;benchmarking&quot;&gt;Benchmarking.&lt;/h2&gt;
&lt;p&gt;Now, use the script to benchmark the speed of Torch and TensorRT.&lt;/p&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; torch
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; onnx
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; onnx_tensorrt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;backend &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; backend
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; tensorrt &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; trt
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; time
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; numpy &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; np

&lt;span class=&quot;token comment&quot;&gt;# Define a simple PyTorch model&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;MyModel&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;nn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Module&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;__init__&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;self&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token builtin&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__init__&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;conv1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;nn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Conv2d&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; kernel_size&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; stride&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; padding&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;relu1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;nn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ReLU&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;conv2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;nn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Conv2d&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; kernel_size&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; stride&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; padding&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;relu2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;nn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ReLU&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;pool &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;nn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;MaxPool2d&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel_size&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; stride&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fc1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;nn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Linear&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;64&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;16&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;512&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;relu3 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;nn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ReLU&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fc2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;nn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Linear&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;512&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;forward&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;self&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        x &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;conv1&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        x &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;relu1&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        x &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;conv2&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        x &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;relu2&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        x &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;pool&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        x &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;view&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;64&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;16&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        x &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fc1&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        x &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;relu3&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        x &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fc2&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; x

&lt;span class=&quot;token comment&quot;&gt;# Export the PyTorch model to ONNX&lt;/span&gt;
model &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; MyModel&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
input_shape &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
input_names &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;input&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
output_names &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;output&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
dummy_input &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;randn&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input_shape&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;onnx&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;export&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;model&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; dummy_input&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;my_model.onnx&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; verbose&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input_names&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;input_names&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; output_names&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;output_names&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Load the ONNX model and create a TensorRT engine from it&lt;/span&gt;
model_onnx &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; onnx&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;load&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;my_model.onnx&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
engine &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; backend&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prepare&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;model_onnx&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; device&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;CUDA:0&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Create a context for executing inference on the engine&lt;/span&gt;
context &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; engine&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;create_execution_context&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Allocate device memory for input and output buffers&lt;/span&gt;
input_name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;input&#39;&lt;/span&gt;
output_name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;output&#39;&lt;/span&gt;
input_shape &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
output_shape &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
input_buf &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; trt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;cuda&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;alloc_cuda_pinned_memory&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;trt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;volume&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input_shape&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; trt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;float32&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;itemsize&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
output_buf &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; trt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;cuda&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;alloc_cuda_pinned_memory&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;trt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;volume&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;output_shape&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; trt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;float32&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;itemsize&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Load the PyTorch model into memory and measure inference speed&lt;/span&gt;
model&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;load_state_dict&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;load&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;my_model.pth&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
model&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;eval&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
num_iterations &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt;
total_time &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.0&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;with&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;no_grad&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;range&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;num_iterations&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        start_time &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;time&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        input_data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;randn&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input_shape&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        output_data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; model&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input_data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        end_time &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;time&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        total_time &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; end_time &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; start_time
pytorch_fps &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; num_iterations &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; total_time
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-interpolation&quot;&gt;&lt;span class=&quot;token string&quot;&gt;f&quot;PyTorch FPS: &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;pytorch_fps&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token format-spec&quot;&gt;.2f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Create a TensorRT engine from the ONNX model and measure inference speed&lt;/span&gt;
trt_engine &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; backend&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prepare&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;model_onnx&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; device&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;CUDA:0&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
num_iterations &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt;
total_time &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.0&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;with&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;no_grad&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;range&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;num_iterations&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        input_data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;randn&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input_shape&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;cuda&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        start_time &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;time&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        output_data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; trt_engine&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;run&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input_data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;cpu&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;numpy&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
        end_time &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;time&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        total_time &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; end_time &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; start_time
tensorrt_fps &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; num_iterations &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;total_time
tensorrt_fps &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; num_iterations &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; total_time
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-interpolation&quot;&gt;&lt;span class=&quot;token string&quot;&gt;f&quot;TensorRT FPS: &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;tensorrt_fps&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token format-spec&quot;&gt;.2f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-interpolation&quot;&gt;&lt;span class=&quot;token string&quot;&gt;f&quot;Speedup: &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;tensorrt_fps&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;pytorch_fps&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token format-spec&quot;&gt;.2f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;x&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;model-train-py3.10&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; jetson-dublin@ubuntu:~/Development/shekhar/model_train$ python benchmark.py 
PyTorch  Inference Time: &lt;span class=&quot;token number&quot;&gt;0.007773&lt;/span&gt; seconds
TensorRT Inference Time: &lt;span class=&quot;token number&quot;&gt;0.002509&lt;/span&gt; seconds
TensorRT is &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;.10x faster than PyTorch&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Install Cuda 12.2 in Ubuntu 24.04</title>
    <link href="https://shekharkoirala.github.io/blog/nvidia_cuda_ubuntu1/" />
    <updated>2024-08-16T09:56:06Z</updated>
    <id>https://shekharkoirala.github.io/blog/nvidia_cuda_ubuntu1/</id>
    <content type="html">&lt;p&gt;So, Ubuntu 24.04 LTS was released on 25 April 2024. Its been more 3 months from the release and I thought it would be safe enough to install it in my main working computer. Wrong!! I wanted a documentation for setting up the CUDA 12.2 in Ubuntu 24.04 but ended for reinstalling everything. Thus, here is the blog for future me to setup everything. Thanks to all the great help I found in the Internet [ referenced as links ].&lt;/p&gt;
&lt;h2 id=&quot;ubuntu-drivers&quot;&gt;Ubuntu Drivers:&lt;/h2&gt;
&lt;p&gt;At first glance, it was nice and clean. I really the ubuntu drivers, may be it was in the ubuntu 22.x or 20.04.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; ubuntu-drivers list&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;nvidia-driver-520, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by nvidia-dkms-520&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-470-server, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by linux-modules-nvidia-470-server-generic-hwe-24.04&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-555, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by nvidia-dkms-555&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-470, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by linux-modules-nvidia-470-generic-hwe-24.04&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-535-server, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by linux-modules-nvidia-535-server-generic-hwe-24.04&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-515, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by nvidia-dkms-515&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-550, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by linux-modules-nvidia-550-generic-hwe-24.04&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-525, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by nvidia-dkms-525&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-535, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by linux-modules-nvidia-535-generic-hwe-24.04&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-545, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by nvidia-dkms-545&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-560, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by nvidia-dkms-560&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt; The result might be different for the fresh out of the box Ubuntu &amp;gt;&lt;/p&gt;
&lt;p&gt;and the best advertised part was :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; ubuntu-drivers autoinstall
&lt;span class=&quot;token comment&quot;&gt;# It will install the best latest version for your device.  haha&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But, it is great to have all the nvidia-drivers installed right after the fresh OS update. cherry on top, NVIDIA-SMI works. Now, I only need to install libraries like cuda and cudnn for AI/ML pipeline.&lt;/p&gt;
&lt;h2 id=&quot;installing-nvidia-cuda&quot;&gt;Installing Nvidia CUDA&lt;/h2&gt;
&lt;p&gt;Before Installing the CUDA, check the compalibility table. &lt;a href=&quot;https://docs.nvidia.com/deploy/cuda-compatibility/&quot;&gt;Nvida CUDA Compability&lt;/a&gt; and &lt;a href=&quot;https://docs.nvidia.com/deploy/cuda-compatibility/#id3&quot;&gt;Table&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;so, I chose (CUDA 12.2) as the nvidia driver 535.54.03+ was already installed on. Now to install the CUDA, Nvidia gave you three options based on the Architecture and Distribution selected: &lt;a href=&quot;https://developer.nvidia.com/cuda-12-2-2-download-archive?target_os=Linux&amp;amp;target_arch=x86_64&amp;amp;Distribution=Ubuntu&amp;amp;target_version=22.04&amp;amp;target_type=deb_local&quot;&gt;Nvidia CUDA installation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But wait, there is no ubuntu 24.04 version. So, You can’t run the network options or runfile. You have to rely on the 22.04 version deb local method.&lt;/p&gt;
&lt;p&gt;so I followed the following instruction method. Note: I had added the -12-2, otherwise it was installing the latest CUDA, which was 12.6&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; linux-headers-&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;uname&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-r&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; apt-key del 7fa2af80
&lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mv&lt;/span&gt; cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
&lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda-repo-ubuntu2204-12-2-local_12.2.2-535.104.05-1_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; cuda-repo-ubuntu2204-12-2-local_12.2.2-535.104.05-1_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; /var/cuda-repo-ubuntu2204-12-2-local/cuda-*-keyring.gpg /usr/share/keyrings/
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; update
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; cuda-12-2&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here, the problem starts, it won’t install the cuda as it requires Nvidia-driver 560.x, and you have 535.x.&lt;/p&gt;
&lt;h3 id=&quot;installing-latest-or-any-nvidia-driver-version-in-ubuntu-rabbithole&quot;&gt;Installing latest or any Nvidia Driver version in Ubuntu [RabbitHole]&lt;/h3&gt;
&lt;p&gt;At this point, I thought lets install Nvidia-driver 560.x. I found a really well documented guide: &lt;a href=&quot;https://www.if-not-true-then-false.com/2021/debian-ubuntu-linux-mint-nvidia-guide&quot;&gt;If Not Trye Then False’s Guide for Install Nvidia Driver&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This thing is great, but I have question for you. Do you know Nvidia Optimus ? what is Initramfs / prime-select / run level 3 / gdm3 / lightdm / DKMS / MODPROBE / Wayland / X org ?&lt;/p&gt;
&lt;p&gt;if not, dont go in the rabbithole as you might end up having problem with it. if you want to learn about it : &lt;a href=&quot;https://www.youtube.com/watch?v=Pn2iUgW3l6w&quot;&gt;Nvidia Optimus: a comfy guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Luckily the above guide have section : if you see Black Screen after Nvidia drivers install, then check following &lt;a href=&quot;https://www.youtube.com/watch?v=3vcOqqSS8xc&quot;&gt;video&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;manuall-dpkg-nvidia-driver-installation&quot;&gt;Manuall DPKG Nvidia Driver installation&lt;/h3&gt;
&lt;p&gt;Eventually, the better way to install the CUDA was to dont trust the Ubuntu for the Nvidia Drivers. Based on the great &lt;a href=&quot;https://forums.developer.nvidia.com/t/ubuntu-and-nvidia-provided-packages-conflict-breaking-installation/259150&quot;&gt;post&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg --force-all &lt;span class=&quot;token parameter variable&quot;&gt;-P&lt;/span&gt; nvidia-firmware-535-535.54.03 nvidia-kernel-common-535 nvidia-compute-utils-535
 &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; --fix-broken &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Yes, you break the system and then fix the broken. Luckily, there was no black screen when I was doing this. And I am also&lt;/p&gt;
&lt;p&gt;check Nvidia-smi, you should have Nvidia 535.x installed.&lt;/p&gt;
&lt;p&gt;Now you could run the above code:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; cuda-repo-ubuntu2204-12-2-local_12.2.2-535.104.05-1_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; update
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; cuda &lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;solving-cuda-dependencies-libtinfo5&quot;&gt;solving CUDA dependencies: libtinfo5&lt;/h3&gt;
&lt;p&gt;if you have problem with libtinfo5, Based on the site: &lt;a href=&quot;https://community.localwp.com/t/installation-failed-in-ubuntu-24-04-lts/42579&quot;&gt;libtinfo5&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; software-properties-common
&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-O&lt;/span&gt; http://launchpadlibrarian.net/648013231/libtinfo5_6.4-2_amd64.deb
&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-O&lt;/span&gt; http://launchpadlibrarian.net/648013227/libncurses5_6.4-2_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; libtinfo5_6.4-2_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; libncurses5_6.4-2_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; libnss3-tools
&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-O&lt;/span&gt; http://launchpadlibrarian.net/646633572/libaio1_0.3.113-4_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; libaio1_0.3.113-4_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; cuda-12-2     &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It should run and add this to ~/.profile&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# set PATH for cuda 12.2 installation&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;/usr/local/cuda-12.2/bin/&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;&lt;span class=&quot;token environment constant&quot;&gt;PATH&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/usr/local/cuda-12.2/bin&lt;span class=&quot;token variable&quot;&gt;${&lt;span class=&quot;token environment constant&quot;&gt;PATH&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:+&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;${&lt;span class=&quot;token environment constant&quot;&gt;PATH&lt;/span&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/usr/local/cuda-12.2/lib64&lt;span class=&quot;token variable&quot;&gt;${LD_LIBRARY_PATH&lt;span class=&quot;token operator&quot;&gt;:+&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;${LD_LIBRARY_PATH}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That should give you nvcc version&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt; ~/.profile
nvcc &lt;span class=&quot;token parameter variable&quot;&gt;--version&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;nvcc: NVIDIA &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;R&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Cuda compiler driver
Copyright &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2005&lt;/span&gt;-2023 NVIDIA Corporation
Built on Tue_Aug_15_22:02:13_PDT_2023
Cuda compilation tools, release &lt;span class=&quot;token number&quot;&gt;12.2&lt;/span&gt;, V12.2.140
Build cuda_12.2.r12.2/compiler.33191640_0&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can install cuDNN if you are into training Neural Network, check the compability version of cuDNN again: &lt;a href=&quot;https://docs.nvidia.com/deeplearning/cudnn/latest/reference/support-matrix.html&quot;&gt;compability matrix&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; cudnn9&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And thats all you need.&lt;/p&gt;
&lt;h1 id=&quot;bonus&quot;&gt;Bonus:&lt;/h1&gt;
&lt;h2 id=&quot;1-installing-pyenv-in-the-fresh-ubuntu-24-04&quot;&gt;1. Installing Pyenv in the Fresh Ubuntu 24.04&lt;/h2&gt;
&lt;p&gt;Yes, in Ubuntu right out of the box, Pyenv installation won’t work. You need to add following Prerequists:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt; build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev &lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; https://pyenv.run &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;export PYENV_ROOT=&quot;$HOME/.pyenv&quot;&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&gt;&lt;/span&gt; ~/.zshrc^Jecho &lt;span class=&quot;token string&quot;&gt;&#39;[[ -d $PYENV_ROOT/bin ]] &amp;amp;&amp;amp; export PATH=&quot;$PYENV_ROOT/bin:$PATH&quot;&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&gt;&lt;/span&gt; ~/.zshrc^Jecho &lt;span class=&quot;token string&quot;&gt;&#39;eval &quot;$(pyenv init -)&quot;&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&gt;&lt;/span&gt; ~/.zshrc
&lt;span class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;zsh&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; python3-pip
pyenv &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3.13&lt;/span&gt;
pyenv &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3.12&lt;/span&gt;
pyenv &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3.11&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and so on ..&lt;/p&gt;
&lt;h2 id=&quot;2-installing-virtualenv-in-the-fresh-ubuntu-24-04&quot;&gt;2. Installing Virtualenv in the Fresh Ubuntu 24.04&lt;/h2&gt;
&lt;p&gt;Pipenv&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; software-properties-common python-software-properties
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; add-apt-repository ppa:pypa/ppa
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; update
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; pipenv&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Poetry:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-sSL&lt;/span&gt; https://install.python-poetry.org &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; python3 -&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;3-checking-cuda-with-pytorch-script&quot;&gt;3. Checking Cuda with Pytorch Script.&lt;/h2&gt;
&lt;p&gt;Here is a small script to test the GPU and the packages. You need to install Torch, Torchvision , Numpy to run the script. You can use the latest packages for this.&lt;/p&gt;
&lt;pre class=&quot;language-Python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-Python&quot;&gt;import torchvision
import torch
import traceback

tcuda: torch.cuda = torch.cuda
print(f&quot;How many gpu in the server ? -&gt; {tcuda.device_count()}&quot;)
print(f&quot;can torch access {tcuda.device_count()} GPUs? :&gt; {tcuda.is_available()}&quot;)
print(f&quot;Attempting to access GPU device name : {tcuda.current_device()} ....&quot;)


try:
    model = torchvision.models.detection.retinanet_resnet50_fpn(pretrained=True)
    model.cuda()
    model.eval()
    x = [torch.rand(3, 300, 400).cuda(), torch.rand(3, 500, 400).cuda()]
    predictions = model(x)
    print(predictions)
    print(f&quot;is torch gpu is initialized ? :&gt; {tcuda.is_initialized()}&quot;)
    print(f&quot;torch cuda memory summary :&gt; {tcuda.memory_summary()}&quot;)
    print(f&quot;memory reserved {tcuda.memory_reserved()}&quot;)
    print(f&quot;memory allocated {tcuda.memory_allocated()}&quot;)

except Exception as e:
    print(e)
    print(&quot;No CUDA available&quot;)
    traceback.print_exc()&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;4-setting-up-the-terminal&quot;&gt;4. setting up the Terminal&lt;/h2&gt;
&lt;h3 id=&quot;zsh&quot;&gt;ZSH&lt;/h3&gt;
&lt;p&gt;Install Some cool &lt;a href=&quot;https://www.nerdfonts.com/font-downloads&quot;&gt;Nerd Fonts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Install zsh and oh my zsh and Terminator&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;zsh&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; terminator
&lt;span class=&quot;token function&quot;&gt;sh&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install Oh my zsh plugins&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone https://github.com/zsh-users/zsh-autosuggestions.git &lt;span class=&quot;token variable&quot;&gt;$ZSH_CUSTOM&lt;/span&gt;/plugins/zsh-autosuggestions
&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class=&quot;token variable&quot;&gt;$ZSH_CUSTOM&lt;/span&gt;/plugins/zsh-syntax-highlighting
&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone https://github.com/zdharma-continuum/fast-syntax-highlighting.git &lt;span class=&quot;token variable&quot;&gt;${ZSH_CUSTOM&lt;span class=&quot;token operator&quot;&gt;:-&lt;/span&gt;$HOME&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;.oh-my-zsh&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;custom}&lt;/span&gt;/plugins/fast-syntax-highlighting
&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone &lt;span class=&quot;token parameter variable&quot;&gt;--depth&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; -- https://github.com/marlonrichert/zsh-autocomplete.git &lt;span class=&quot;token variable&quot;&gt;$ZSH_CUSTOM&lt;/span&gt;/plugins/zsh-autocomplete&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install Powerlevel10k&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt; &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone &lt;span class=&quot;token parameter variable&quot;&gt;--depth&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; https://github.com/romkatv/powerlevel10k.git &lt;span class=&quot;token variable&quot;&gt;${ZSH_CUSTOM&lt;span class=&quot;token operator&quot;&gt;:-&lt;/span&gt;$HOME&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;.oh-my-zsh&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;custom}&lt;/span&gt;/themes/powerlevel10k&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Update this in the ~/.zshrc&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;ZSH_THEME&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;powerlevel10k/powerlevel10k&quot;&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;plugins&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;git zsh-autosuggestions zsh-syntax-highlighting fast-syntax-highlighting zsh-autocomplete python&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and update the zshrc and setup the theme&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;nano&lt;/span&gt; ~/.zshrc
&lt;span class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;zsh&lt;/span&gt;
p10k configure&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;atuin&quot;&gt;Atuin&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--proto&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;=https&#39;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--tlsv1.2&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-LsSf&lt;/span&gt; https://setup.atuin.sh &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sh&lt;/span&gt;
atuin login
&lt;span class=&quot;token builtin class-name&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;token environment constant&quot;&gt;$HOME&lt;/span&gt;/.atuin/bin/env
atuin login
atuin &lt;span class=&quot;token function&quot;&gt;sync&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;handle-ssh&quot;&gt;Handle SSH&lt;/h3&gt;
&lt;p&gt;I prefer to run multiple ssh key in a single machine and it is handled by a ssh config file.&lt;/p&gt;
&lt;p&gt;cat config&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;#Default GitHub&lt;/span&gt;
Host github.com
  HostName github.com
  User &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt;
  IdentityFile ~/.ssh/id_rsa

Host github-mac
  HostName github.com
  User &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt;
  IdentityFile ~/.ssh/id_rsa_personal

Host gitlab
  HostName gilab.com 
  IdentityFile ~/.ssh/id_rsa_personal&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;id_rsa could be your one key and id_rsa_personal could be your personal / other github user.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; ./ssh
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; /home/shekhar/Downloads/ssh/. &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt; 
&lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-T&lt;/span&gt; git@github.com
ssh-add id_rsa
ssh-add id_rsa_personal&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Installing CUDA 12.x on Ubuntu 24.04</title>
    <link href="https://shekharkoirala.github.io/blog/nvidia_cuda12_ubuntu/" />
    <updated>2024-08-16T09:56:06Z</updated>
    <id>https://shekharkoirala.github.io/blog/nvidia_cuda12_ubuntu/</id>
    <content type="html">&lt;h1 id=&quot;motive&quot;&gt;MOTIVE&lt;/h1&gt;
&lt;p&gt;So, Ubuntu 24.04 LTS was released on 25 April 2024. Its been more 3 months from the release and I thought it would be safe enough to install it in my main working computer. Wrong!!
I wanted a documentation for setting up the CUDA 12.2 in Ubuntu 24.04 but ended for reinstalling everything. Thus, here is the blog for future me to setup everything. Thanks to all the great help I found in the Internet [ referenced as links ].&lt;/p&gt;
&lt;h2 id=&quot;ubuntu-drivers&quot;&gt;Ubuntu Drivers:&lt;/h2&gt;
&lt;p&gt;At first glance, it was nice and clean. I really the ubuntu drivers, may be it was in the ubuntu 22.x or 20.04.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; ubuntu-drivers list&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;nvidia-driver-520, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by nvidia-dkms-520&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-470-server, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by linux-modules-nvidia-470-server-generic-hwe-24.04&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-555, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by nvidia-dkms-555&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-470, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by linux-modules-nvidia-470-generic-hwe-24.04&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-535-server, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by linux-modules-nvidia-535-server-generic-hwe-24.04&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-515, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by nvidia-dkms-515&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-550, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by linux-modules-nvidia-550-generic-hwe-24.04&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-525, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by nvidia-dkms-525&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-535, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by linux-modules-nvidia-535-generic-hwe-24.04&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-545, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by nvidia-dkms-545&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
nvidia-driver-560, &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;kernel modules provided by nvidia-dkms-560&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt; The result might be different for the fresh out of the box Ubuntu &amp;gt;&lt;/p&gt;
&lt;p&gt;and the best advertised part was :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; ubuntu-drivers autoinstall
&lt;span class=&quot;token comment&quot;&gt;# It will install the best latest version for your device.  haha&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But, it is great to have all the nvidia-drivers installed right after the fresh OS update. cherry on top, NVIDIA-SMI works. Now, I only need to install libraries like cuda and cudnn for AI/ML pipeline.&lt;/p&gt;
&lt;h2 id=&quot;installing-nvidia-cuda&quot;&gt;Installing Nvidia CUDA&lt;/h2&gt;
&lt;p&gt;Before Installing the CUDA, check the compalibility table.
&lt;a href=&quot;https://docs.nvidia.com/deploy/cuda-compatibility/&quot;&gt;Nvida CUDA Compability&lt;/a&gt;
and &lt;a href=&quot;https://docs.nvidia.com/deploy/cuda-compatibility/#id3&quot;&gt;Table&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;so, I chose (CUDA 12.2) as the nvidia driver 535.54.03+ was already installed on. Now to install the CUDA, Nvidia gave you three options based on the Architecture and Distribution selected:
&lt;a href=&quot;https://developer.nvidia.com/cuda-12-2-2-download-archive?target_os=Linux&amp;amp;target_arch=x86_64&amp;amp;Distribution=Ubuntu&amp;amp;target_version=22.04&amp;amp;target_type=deb_local&quot;&gt;Nvidia CUDA installation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But wait, there is no ubuntu 24.04 version. So, You can&#39;t run the network options or runfile. You have to rely on the 22.04 version deb local method.&lt;/p&gt;
&lt;p&gt;so I followed the following instruction method.
Note: I had added the -12-2, otherwise it was installing the latest CUDA, which was 12.6&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; linux-headers-&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;uname&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-r&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; apt-key del 7fa2af80
&lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mv&lt;/span&gt; cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
&lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda-repo-ubuntu2204-12-2-local_12.2.2-535.104.05-1_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; cuda-repo-ubuntu2204-12-2-local_12.2.2-535.104.05-1_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; /var/cuda-repo-ubuntu2204-12-2-local/cuda-*-keyring.gpg /usr/share/keyrings/
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; update
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; cuda-12-2&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here, the problem starts, it won&#39;t install the cuda as it requires Nvidia-driver 560.x, and you have 535.x.&lt;/p&gt;
&lt;h3 id=&quot;installing-latest-or-any-nvidia-driver-version-in-ubuntu-rabbithole&quot;&gt;Installing latest or any Nvidia Driver version in Ubuntu [RabbitHole]&lt;/h3&gt;
&lt;p&gt;At this point, I thought lets install Nvidia-driver 560.x. I found a really well documented guide: &lt;a href=&quot;https://www.if-not-true-then-false.com/2021/debian-ubuntu-linux-mint-nvidia-guide&quot;&gt;If Not Trye Then False&#39;s Guide for Install Nvidia Driver&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This thing is great, but I have question for you.
Do you know Nvidia Optimus ? what is Initramfs / prime-select / run level 3 / gdm3 / lightdm / DKMS / MODPROBE / Wayland / X org ?&lt;/p&gt;
&lt;p&gt;if not, dont go in the rabbithole as you might end up having problem with it.
if you want to learn about it : &lt;a href=&quot;https://www.youtube.com/watch?v=Pn2iUgW3l6w&quot;&gt;Nvidia Optimus: a comfy guide&lt;/a&gt;
{{&amp;lt; youtube Pn2iUgW3l6w &amp;gt;}}
Luckily the above guide have section : if you see Black Screen after Nvidia drivers install, then check following &lt;a href=&quot;https://www.youtube.com/watch?v=3vcOqqSS8xc&quot;&gt;video&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;manuall-dpkg-nvidia-driver-installation&quot;&gt;Manuall DPKG Nvidia Driver installation&lt;/h3&gt;
&lt;p&gt;Eventually, the better way to install the CUDA was to dont trust the Ubuntu for the Nvidia Drivers. Based on the great &lt;a href=&quot;https://forums.developer.nvidia.com/t/ubuntu-and-nvidia-provided-packages-conflict-breaking-installation/259150&quot;&gt;post&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg --force-all &lt;span class=&quot;token parameter variable&quot;&gt;-P&lt;/span&gt; nvidia-firmware-535-535.54.03 nvidia-kernel-common-535 nvidia-compute-utils-535
 &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; --fix-broken &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Yes, you break the system and then fix the broken. Luckily, there was no black screen when I was doing this.
And I am also&lt;/p&gt;
&lt;p&gt;check Nvidia-smi, you should have Nvidia 535.x installed.&lt;/p&gt;
&lt;p&gt;Now you could run the above code:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; cuda-repo-ubuntu2204-12-2-local_12.2.2-535.104.05-1_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; update
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; cuda &lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;solving-cuda-dependencies-libtinfo5&quot;&gt;solving CUDA dependencies: libtinfo5&lt;/h3&gt;
&lt;p&gt;if you have problem with libtinfo5, Based on the site: &lt;a href=&quot;https://community.localwp.com/t/installation-failed-in-ubuntu-24-04-lts/42579&quot;&gt;libtinfo5&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; software-properties-common
&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-O&lt;/span&gt; http://launchpadlibrarian.net/648013231/libtinfo5_6.4-2_amd64.deb
&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-O&lt;/span&gt; http://launchpadlibrarian.net/648013227/libncurses5_6.4-2_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; libtinfo5_6.4-2_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; libncurses5_6.4-2_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; libnss3-tools
&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-O&lt;/span&gt; http://launchpadlibrarian.net/646633572/libaio1_0.3.113-4_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; libaio1_0.3.113-4_amd64.deb
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; cuda-12-2     &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It should run and add this to ~/.profile&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# set PATH for cuda 12.2 installation&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;/usr/local/cuda-12.2/bin/&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;&lt;span class=&quot;token environment constant&quot;&gt;PATH&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/usr/local/cuda-12.2/bin&lt;span class=&quot;token variable&quot;&gt;${&lt;span class=&quot;token environment constant&quot;&gt;PATH&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:+&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;${&lt;span class=&quot;token environment constant&quot;&gt;PATH&lt;/span&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/usr/local/cuda-12.2/lib64&lt;span class=&quot;token variable&quot;&gt;${LD_LIBRARY_PATH&lt;span class=&quot;token operator&quot;&gt;:+&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;${LD_LIBRARY_PATH}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That should give you nvcc version&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt; ~/.profile
nvcc &lt;span class=&quot;token parameter variable&quot;&gt;--version&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;nvcc: NVIDIA &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;R&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Cuda compiler driver
Copyright &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2005&lt;/span&gt;-2023 NVIDIA Corporation
Built on Tue_Aug_15_22:02:13_PDT_2023
Cuda compilation tools, release &lt;span class=&quot;token number&quot;&gt;12.2&lt;/span&gt;, V12.2.140
Build cuda_12.2.r12.2/compiler.33191640_0&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can install cuDNN if you are into training Neural Network, check the compability version of cuDNN again: &lt;a href=&quot;https://docs.nvidia.com/deeplearning/cudnn/latest/reference/support-matrix.html&quot;&gt;compability matrix&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; cudnn9&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And thats all you need.&lt;/p&gt;
&lt;h1 id=&quot;bonus&quot;&gt;Bonus:&lt;/h1&gt;
&lt;h2 id=&quot;1-installing-pyenv-in-the-fresh-ubuntu-24-04&quot;&gt;1. Installing Pyenv in the Fresh Ubuntu 24.04&lt;/h2&gt;
&lt;p&gt;Yes, in Ubuntu right out of the box, Pyenv installation won&#39;t work.
You need to add following Prerequists:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt; build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev &lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; https://pyenv.run &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;export PYENV_ROOT=&quot;$HOME/.pyenv&quot;&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&gt;&lt;/span&gt; ~/.zshrc^Jecho &lt;span class=&quot;token string&quot;&gt;&#39;[[ -d $PYENV_ROOT/bin ]] &amp;amp;&amp;amp; export PATH=&quot;$PYENV_ROOT/bin:$PATH&quot;&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&gt;&lt;/span&gt; ~/.zshrc^Jecho &lt;span class=&quot;token string&quot;&gt;&#39;eval &quot;$(pyenv init -)&quot;&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&gt;&lt;/span&gt; ~/.zshrc
&lt;span class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;zsh&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; python3-pip
pyenv &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3.13&lt;/span&gt;
pyenv &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3.12&lt;/span&gt;
pyenv &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3.11&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and so on ..&lt;/p&gt;
&lt;h2 id=&quot;2-installing-virtualenv-in-the-fresh-ubuntu-24-04&quot;&gt;2. Installing Virtualenv in the Fresh Ubuntu 24.04&lt;/h2&gt;
&lt;p&gt;Pipenv&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; software-properties-common python-software-properties
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; add-apt-repository ppa:pypa/ppa
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; update
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; pipenv&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Poetry:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-sSL&lt;/span&gt; https://install.python-poetry.org &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; python3 -&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;3-checking-cuda-with-pytorch-script&quot;&gt;3. Checking Cuda with Pytorch Script.&lt;/h2&gt;
&lt;p&gt;Here is a small script to test the GPU and the packages.
You need to install Torch, Torchvision , Numpy to run the script.
You can use the latest packages for this.&lt;/p&gt;
&lt;pre class=&quot;language-Python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-Python&quot;&gt;import torchvision
import torch
import traceback

tcuda: torch.cuda = torch.cuda
print(f&quot;How many gpu in the server ? -&gt; {tcuda.device_count()}&quot;)
print(f&quot;can torch access {tcuda.device_count()} GPUs? :&gt; {tcuda.is_available()}&quot;)
print(f&quot;Attempting to access GPU device name : {tcuda.current_device()} ....&quot;)


try:
    model = torchvision.models.detection.retinanet_resnet50_fpn(pretrained=True)
    model.cuda()
    model.eval()
    x = [torch.rand(3, 300, 400).cuda(), torch.rand(3, 500, 400).cuda()]
    predictions = model(x)
    print(predictions)
    print(f&quot;is torch gpu is initialized ? :&gt; {tcuda.is_initialized()}&quot;)
    print(f&quot;torch cuda memory summary :&gt; {tcuda.memory_summary()}&quot;)
    print(f&quot;memory reserved {tcuda.memory_reserved()}&quot;)
    print(f&quot;memory allocated {tcuda.memory_allocated()}&quot;)

except Exception as e:
    print(e)
    print(&quot;No CUDA available&quot;)
    traceback.print_exc()&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;4-setting-up-the-terminal&quot;&gt;4. setting up the Terminal&lt;/h2&gt;
&lt;h3 id=&quot;zsh&quot;&gt;ZSH&lt;/h3&gt;
&lt;p&gt;Install Some cool &lt;a href=&quot;https://www.nerdfonts.com/font-downloads&quot;&gt;Nerd Fonts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Install zsh and oh my zsh and Terminator&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;zsh&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; terminator
&lt;span class=&quot;token function&quot;&gt;sh&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install Oh my zsh plugins&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone https://github.com/zsh-users/zsh-autosuggestions.git &lt;span class=&quot;token variable&quot;&gt;$ZSH_CUSTOM&lt;/span&gt;/plugins/zsh-autosuggestions
&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class=&quot;token variable&quot;&gt;$ZSH_CUSTOM&lt;/span&gt;/plugins/zsh-syntax-highlighting
&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone https://github.com/zdharma-continuum/fast-syntax-highlighting.git &lt;span class=&quot;token variable&quot;&gt;${ZSH_CUSTOM&lt;span class=&quot;token operator&quot;&gt;:-&lt;/span&gt;$HOME&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;.oh-my-zsh&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;custom}&lt;/span&gt;/plugins/fast-syntax-highlighting
&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone &lt;span class=&quot;token parameter variable&quot;&gt;--depth&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; -- https://github.com/marlonrichert/zsh-autocomplete.git &lt;span class=&quot;token variable&quot;&gt;$ZSH_CUSTOM&lt;/span&gt;/plugins/zsh-autocomplete&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install Powerlevel10k&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt; &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone &lt;span class=&quot;token parameter variable&quot;&gt;--depth&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; https://github.com/romkatv/powerlevel10k.git &lt;span class=&quot;token variable&quot;&gt;${ZSH_CUSTOM&lt;span class=&quot;token operator&quot;&gt;:-&lt;/span&gt;$HOME&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;.oh-my-zsh&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;custom}&lt;/span&gt;/themes/powerlevel10k&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Update this in the ~/.zshrc&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;ZSH_THEME&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;powerlevel10k/powerlevel10k&quot;&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;plugins&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;git zsh-autosuggestions zsh-syntax-highlighting fast-syntax-highlighting zsh-autocomplete python&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and update the zshrc and setup the theme&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;nano&lt;/span&gt; ~/.zshrc
&lt;span class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;zsh&lt;/span&gt;
p10k configure&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;atuin&quot;&gt;Atuin&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--proto&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;=https&#39;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--tlsv1.2&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-LsSf&lt;/span&gt; https://setup.atuin.sh &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sh&lt;/span&gt;
atuin login
&lt;span class=&quot;token builtin class-name&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;token environment constant&quot;&gt;$HOME&lt;/span&gt;/.atuin/bin/env
atuin login
atuin &lt;span class=&quot;token function&quot;&gt;sync&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;handle-ssh&quot;&gt;Handle SSH&lt;/h3&gt;
&lt;p&gt;I prefer to run multiple ssh key in a single machine and it is handled by a ssh config file.&lt;/p&gt;
&lt;p&gt;cat config&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;#Default GitHub&lt;/span&gt;
Host github.com
  HostName github.com
  User &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt;
  IdentityFile ~/.ssh/id_rsa

Host github-mac
  HostName github.com
  User &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt;
  IdentityFile ~/.ssh/id_rsa_personal

Host gitlab
  HostName gilab.com 
  IdentityFile ~/.ssh/id_rsa_personal&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;id_rsa could be your one key and id_rsa_personal could be your personal / other github user.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; ./ssh
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; /home/shekhar/Downloads/ssh/. &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt; 
&lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-T&lt;/span&gt; git@github.com
ssh-add id_rsa
ssh-add id_rsa_personal&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Case study: Automated Image Clustering for E-commerce company</title>
    <link href="https://shekharkoirala.github.io/blog/image_clustering_intro/" />
    <updated>2024-05-04T13:49:57Z</updated>
    <id>https://shekharkoirala.github.io/blog/image_clustering_intro/</id>
    <content type="html">&lt;h1 id=&quot;background&quot;&gt;Background&lt;/h1&gt;
&lt;p&gt;In this case study, Artificial Intelligence based system is used to take buisness decisions. The study is based on a e-commerce company which ingest lots of data like images, quarterly reports, invoices, customer feedbacks, customer reviews with images, etc. It would be great if this large amount of data is automatically categorized or grouped together. Previously, a machine learning team in the company had created a model to classify the input data. But the nature of the e-commerce data, new product launches, new customer feedbacks, etc. are not predictable. Thus, the model needs to be retrained frequently. The company is looking for a solution that can automatically perform and help the analyst to get the insight from the unstructured data.&lt;/p&gt;
&lt;h1 id=&quot;image-clustering&quot;&gt;Image Clustering&lt;/h1&gt;
&lt;p&gt;Lets dive in the Technical side of the case study. There are multiple paradigms of supervised machine learning, such as classification, object detection, and segmentation, among others. There are many robust supervised algorithms; however, to achieve high accuracy, we need labeled data, which is costly and time-consuming. Clustering is an unsupervised learning technique that can be applied to unlabeled datasets. It is one of the most interesting and challenging problems in the field of computer vision. The goal of image clustering is to group similar images together in the same cluster. There are also other forms of machine learning, such as semi-supervised learning, reinforcement learning, and transfer learning, which are not covered in this article. The main goal of the article is to explore the image clustering technique beyond its traditional use cases.&lt;/p&gt;
&lt;h2 id=&quot;image-clustering-view-from-professional-settings&quot;&gt;Image clustering:  View from Professional settings&lt;/h2&gt;
&lt;p&gt;In real world scenario, a company could ingest images from multiple sources. The image sizes / format , interest point in the image are unknown. To fetch the insight from the unstructure settings is really hard and requires alot of regular hand picked tuning. Thus, Many companies moves towards supervised learning where they sample the data and label them and train a supervised model to get the insight.&lt;/p&gt;
&lt;p&gt;However, the unsupervised learning is also a good choice when the data is unpredictable and the labels are not available. The image clustering is one of the unsupervised learning technique which can be used to cluster the images based on the similarity and thus using this in the automated workflow to get the insight from the unstructured data.&lt;/p&gt;
&lt;h2 id=&quot;methodology&quot;&gt;Methodology&lt;/h2&gt;
&lt;p&gt;Image clustering systems can be divided into two main categories:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Image feature Generation
Image pixels are stored as matrics in the computer. The size of image matrics varies based on the image size and format. Thus Image pixel couldnot be used directly to custering algorithm due to its size and variability.
Image features can be generated using various methods like neural networks, computer vision algorithms like SIFT, SURF, ORB, etc. Sometimes feature reduction techniques like PCA, LDA, etc are used to reduce the dimensionality of the features.&lt;/li&gt;
&lt;li&gt;Feature clustering
After a feature is generated, the clustering algorithm is applied to the features to cluster the images. The clustering algorithm can be K-means, DBSCAN, Hierarchical clustering, etc.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;for the sake of this study, we are using a small dataset of brand logos. However in the study properitery e-commerce data [ logos from pdfs/ document ] are used. &lt;img src=&quot;https://shekharkoirala.github.io/images/logos.png&quot; alt=&quot;logos&quot; width=&quot;504&quot; height=&quot;477&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;p&gt;Note: It really depends on the company data, sometimes the whole image are used to generate the features and sometimes the interest points are used to generate the features. Segment Anything model can be used to generate the interest points. Here, an invoice is parsed by the model when the text prompt is logo and the bounding box over the Tesla logo is generated.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://shekharkoirala.github.io/images/segment_anything.png&quot; alt=&quot;Segment Anything&quot; width=&quot;1187&quot; height=&quot;623&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;p&gt;Model Web Demo: &lt;a href=&quot;https://huggingface.co/spaces/yizhangliu/Grounded-Segment-Anything&quot;&gt;Segment Anything&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;image-feature-generation&quot;&gt;Image Feature Generation&lt;/h2&gt;
&lt;p&gt;The latest trend of Attention based models outperforms the traditional computer vision algorithms. The attention based models like ViT, ResNet, EfficientNet, etc are used to generate the features. Likewise, there are multi model models like CLIP, DALL-E, etc which are used to generate the features. Using the multi model models, the features can be used to compared with the possible text data and thus can be used to generate the insight from the images.&lt;/p&gt;
&lt;p&gt;for the example of the image clustering, we will be using the openAI&#39;s CLIP model to generate the features.&lt;/p&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; transformers &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; AutoProcessor&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; AutoTokenizer&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; CLIPModel

model &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; CLIPModel&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;from_pretrained&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;openai/clip-vit-large-patch14&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
processor &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; AutoProcessor&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;from_pretrained&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;openai/clip-vit-large-patch14&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;a good alternative to the CLIP model is the VIT model.&lt;/p&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; transformers &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; ViTImageProcessor&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ViTForImageClassification

processor &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ViTImageProcessor&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;from_pretrained&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;google/vit-base-patch16-224&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
model &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ViTForImageClassification&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;from_pretrained&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;google/vit-base-patch16-224&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Resource to browse the models for feature generation: &lt;a href=&quot;https://huggingface.co/models?pipeline_tag=image-classification&amp;amp;sort=downloads&quot;&gt;Huggingface&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once the model is loaded, we can generate the features using the model.&lt;/p&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;with&lt;/span&gt; torch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;no_grad&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      inputs &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; processor&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;images&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;batch_images&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; return_tensors&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;pt&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      image_feature_data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; model&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get_image_features&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;**&lt;/span&gt;inputs&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is important that the processor should be feed in the batch image data. since the the underlying model is trained on the batch image data. Thus batch image helps to achieve better throughput for generating the features.&lt;/p&gt;
&lt;h2 id=&quot;image-clustering-algorithm&quot;&gt;Image clustering Algorithm&lt;/h2&gt;
&lt;p&gt;Once the features are generated, the clustering algorithm is applied to the features. The clustering algorithm can be K-means, DBSCAN, Hierarchical clustering, etc.  Here, we choose Faiss for the clustering as it has both CPU and GPU support.&lt;/p&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; faiss

n_centroids &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# number of clusters&lt;/span&gt;
n_iter &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# number of iterations&lt;/span&gt;
verbose &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;
feature_data_dim &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; feature_data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;shape&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# dimension of the feature data&lt;/span&gt;
kmeans &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; faiss&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Kmeans&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;feature_data_dim&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ncentroids&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; niter&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;niter&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; verbose&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;verbose&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
kmeans&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;train&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;feature_data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lets see How it creates the cluster. &lt;img src=&quot;https://shekharkoirala.github.io/images/cluster_v1.png&quot; alt=&quot;cluster&quot; width=&quot;739&quot; height=&quot;372&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;p&gt;The image clustering result doesnot make sense. lets update the hyperparamter and create the clustering again with different number of clusters.&lt;/p&gt;
&lt;pre class=&quot;language-python&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;n_centroids &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;35&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# number of clusters&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The clustering result is much better. &lt;img src=&quot;https://shekharkoirala.github.io/images/cluster_v2.png&quot; alt=&quot;cluster&quot; width=&quot;704&quot; height=&quot;641&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;p&gt;The cluster result is better than the previous as we increased the number of clusters. The number of clusters can be determined based on the domain knowledge of the dataset or using the metrics.&lt;/p&gt;
&lt;h2 id=&quot;image-clustering-metrics&quot;&gt;Image clustering Metrics&lt;/h2&gt;
&lt;p&gt;Finding the best cluster size is a challengine task. The perfect cluster size can be predicted if some domain knowledge of the dataset is available. In the absence of domain knowledge, we can use the metrics to find the best cluster size.&lt;/p&gt;
&lt;p&gt;Image clustering can be compared based on two types of metrics.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Extrinsic metrics:
Extrinsic metrics are based on the ground truth labels. Some of the popular extrinsic metrics are:
&lt;ul&gt;
&lt;li&gt;Adjusted Rand Index (ARI)&lt;/li&gt;
&lt;li&gt;Normalized Mutual Information (NMI)&lt;/li&gt;
&lt;li&gt;Fowlkes-Mallows Index (FMI)&lt;/li&gt;
&lt;li&gt;Homogeneity, Completeness, and V-measure&lt;/li&gt;
&lt;li&gt;Precision, Recall, and F1-score&lt;/li&gt;
&lt;li&gt;Confusion matrix&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;However, we are into the unsupervised learning, we will not be using these metrics.&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Intrinsic metrics:
Intrinsic metrics are based on the clustering results. Some of the popular intrinsic metrics are:
&lt;ul&gt;
&lt;li&gt;Silhouette score&lt;/li&gt;
&lt;li&gt;Davies-Bouldin Index&lt;/li&gt;
&lt;li&gt;Calinski-Harabasz Index&lt;/li&gt;
&lt;li&gt;Gap statistic&lt;/li&gt;
&lt;li&gt;Elbow method&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lets see how we can use these metrics to evaluate the clustering results.&lt;/p&gt;
&lt;p&gt;elbow method is used to find the best cluster size.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://shekharkoirala.github.io/images/elbow.png&quot; alt=&quot;elbow&quot; width=&quot;877&quot; height=&quot;864&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;p&gt;The elbow method is used to find the best cluster size. The best cluster size is the point where the curve starts to flatten. In the above image, the best cluster size is 35/40.&lt;/p&gt;
&lt;p&gt;Similarly, other metrics can be used to evaluate the clustering results.&lt;/p&gt;
&lt;p&gt;The blog only highlights the specfic part of the image clustering system. All the necessary code snippets are provided to get started with the image clustering. Many software enhancement and glue code are skipped for the sake of the article.&lt;/p&gt;
&lt;h1 id=&quot;result&quot;&gt;Result&lt;/h1&gt;
&lt;p&gt;A image clustering system is created and implemented in the system and the data is forwarded to the analyst for the further analysis. The system is able to cluster the data based on the cluster and thus necessary action can be taken much faster.
As the system is automated, many documents gets labelled eventually and thus labelling the cluster is much easier than labelling the whole dataset.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Data Sourcing for Machine Learning</title>
    <link href="https://shekharkoirala.github.io/blog/data_sourcing_ml/" />
    <updated>2024-04-07T19:53:30Z</updated>
    <id>https://shekharkoirala.github.io/blog/data_sourcing_ml/</id>
    <content type="html"></content>
  </entry>
  <entry>
    <title>Terraform with AWS &amp; Python</title>
    <link href="https://shekharkoirala.github.io/blog/terraform_aws_python/" />
    <updated>2023-11-20T21:43:18Z</updated>
    <id>https://shekharkoirala.github.io/blog/terraform_aws_python/</id>
    <content type="html">&lt;p&gt;This is based on a workshop on Pycon Ireland 2023 given by : Pavlo Tishkin&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Setup AWS account&lt;/li&gt;
&lt;li&gt;Setup AWS CLI&lt;/li&gt;
&lt;li&gt;Setup Terraform&lt;/li&gt;
&lt;li&gt;Setup Python&lt;/li&gt;
&lt;li&gt;Setup AWS credentials&lt;/li&gt;
&lt;li&gt;Setup AWS S3 bucket&lt;/li&gt;
&lt;li&gt;Setup AWS Lambda function&lt;/li&gt;
&lt;li&gt;Setup AWS CloudWatch event&lt;/li&gt;
&lt;li&gt;Setup AWS IAM role&lt;/li&gt;
&lt;li&gt;Setup AWS IAM policy&lt;/li&gt;
&lt;li&gt;setup lamda function&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;&amp;lt; updating soon&amp;gt;&amp;gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Installing Luminance HDR on Ubuntu</title>
    <link href="https://shekharkoirala.github.io/blog/install_luminance_ubuntu/" />
    <updated>2023-09-13T10:43:23Z</updated>
    <id>https://shekharkoirala.github.io/blog/install_luminance_ubuntu/</id>
    <content type="html">&lt;h3 id=&quot;how-to-install-luminance-hdr-in-ubuntu&quot;&gt;How to install luminance HDR in ubuntu&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;install dependecies&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-shell&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; qtcreator qtbase5-dev qt5-qmake cmake libexiv2-dev libtiff-dev libraw-dev libpng-dev libjpeg-dev libopenexr-dev libfftw3-dev libboost-all-dev libcfitsio-dev libgsl-dev&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This command installs the following dependencies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;QT5 development tools&lt;/li&gt;
&lt;li&gt;exiv2 library&lt;/li&gt;
&lt;li&gt;libtiff library&lt;/li&gt;
&lt;li&gt;libraw library&lt;/li&gt;
&lt;li&gt;libpng library&lt;/li&gt;
&lt;li&gt;libjpeg library&lt;/li&gt;
&lt;li&gt;libopenexr library&lt;/li&gt;
&lt;li&gt;fftw3 library&lt;/li&gt;
&lt;li&gt;libboost library&lt;/li&gt;
&lt;li&gt;cfitsio library&lt;/li&gt;
&lt;li&gt;Gnu Gsl library&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;sudo apt install qttools5-dev
sudo apt-get install qttools5-dev-tools
sudo apt install libqt5webkit5-dev
sudo apt-get install libqt5svg5-dev
sudo apt-get install libeigen3-dev&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;
&lt;p&gt;install luminance hdr&lt;/p&gt;
&lt;pre class=&quot;language-shell&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone
&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; luminance-hdr
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; build
&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; build

cmake &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;                                                                                                                                                        5s &lt;span class=&quot;token number&quot;&gt;12&lt;/span&gt;:07:11 PM
&lt;span class=&quot;token parameter variable&quot;&gt;-DCMAKE_BUILD_TYPE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Release&quot;&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-DCMAKE_INSTALL_PREFIX&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token environment constant&quot;&gt;$HOME&lt;/span&gt;/programs/lhdr&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
  </entry>
</feed>