Lambda Logo

Performance, Pricing, and Utilization for Lambda GPU Cloud Instances

William Lorenzo, Drake Hashimoto, Albert Hickey, Syed Muhammad Arham Ali

November 20, 2025

Introduction

As a data analyst and machine learning practitioner, my primary interest in this project stems from exploring Lambda’s GPU cloud infrastructure — a platform designed to accelerate high-performance AI workloads. My background includes conducting computational experiments in both R and Python, where I’ve applied TensorFlow (Developed by Google Brain) and PyTorch (developed by Meta’s AI Research) to construct and train neural network models for predictive analytics and deep learning.

This hands-on experience has shown us how crucial GPU acceleration is in scaling AI computations efficiently. Lambda’s integration of GPU cloud instances offers a real-world framework to understand how computational hardware, pricing, and performance interact to influence accessibility and innovation in artificial intelligence.

Through this project, our team and I intend to examine how hardware specifications, benchmark performance, and pricing dynamics reflect broader trends in the AI ecosystem — particularly how users and organizations perceive and adopt advanced technologies. Understanding these relationships not only deepens our technical insight into GPU-powered computation but also highlights how cloud-based GPU platforms like Lambda are shaping the future of AI research, deployment, and public perception of emerging technologies.

Objective of the Study

The objective of this particular study is to approximate whether hardware performance metrics such as benchmark_score, vram_gb, num_gpus, and power_watts have a measurable relationship with the hourly_price_usd of Lambda GPU cloud instances. The intention is to identify if higher performance GPUs command high hourly rental prices.

Description of Data and Variables:

The dataset, lambda_ai_gpu_instances.csv, contains approximately 300 observations of GPU instances carrying variables connected to pricing, hardware specifications, and utilization.

Variable Description Table

Variable Description Type
gpu_model Type of GPU instance Categorical
vram_gb Video memory capacity (in GB) Numeric
num_gpus Number of GPUs per instance Numeric
benchmark_score Performance benchmark score Numeric
power_watts Power consumption (in watts) Numeric
hourly_price_usd Hourly rental price of GPU instance (USD) Numeric (Dependent Variable)

Exploratory Data Analysis

Upon constructing further inferential analysis, the dataset was thoroughly explored from using descriptive statistics and exploratory data analysis to summarize distributions and relationships among variables.

# Loading Packages
library(tidyverse)
Warning: package 'ggplot2' was built under R version 4.4.3
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   4.0.0     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(broom)
library(reshape2)

Attaching package: 'reshape2'

The following object is masked from 'package:tidyr':

    smiths
library(knitr)
Warning: package 'knitr' was built under R version 4.4.3
# Loading Dataset
df <- read.csv("lambda_ai_gpu_instances.csv")
# Examining First Few Rows
head(df)
  instance_id gpu_model vram_gb num_gpus    region hourly_price_usd
1     LMB-100      L40S      96        4   US-East            14.30
2     LMB-101      V100      96        8 Australia            10.54
3     LMB-102  RTX 4090      16        1   US-East             4.41
4     LMB-103      V100      96        8    Europe             6.50
5     LMB-104      V100      48        4    Europe            15.46
6     LMB-105      H100      80        4    Europe            14.54
  avg_utilization_. power_watts uptime_hours customer_segment benchmark_score
1              81.6        1442          496       Individual            9970
2              63.0         825          724       Enterprise            7991
3              81.7         725          204       Individual            7067
4              77.0        1168          291       Enterprise            7577
5              89.0        1350          116       Enterprise            7011
6              55.3        1291         1243       Enterprise            8274
  availability_date reliability_score
1        2025-08-07              99.6
2        2024-01-19              90.1
3        2023-10-15             100.0
4        2023-12-02              96.8
5        2024-09-24              98.3
6        2022-02-18              92.9
# Summary Statistics
summary(df)
 instance_id         gpu_model            vram_gb         num_gpus   
 Length:300         Length:300         Min.   :16.00   Min.   :1.00  
 Class :character   Class :character   1st Qu.:24.00   1st Qu.:1.00  
 Mode  :character   Mode  :character   Median :48.00   Median :2.00  
                                       Mean   :54.69   Mean   :3.51  
                                       3rd Qu.:80.00   3rd Qu.:4.00  
                                       Max.   :96.00   Max.   :8.00  
    region          hourly_price_usd avg_utilization_.  power_watts    
 Length:300         Min.   : 4.100   Min.   : 50.20    Min.   : 307.0  
 Class :character   1st Qu.: 7.737   1st Qu.: 61.48    1st Qu.: 610.5  
 Mode  :character   Median :12.435   Median : 75.85    Median : 930.5  
                    Mean   :12.087   Mean   : 75.27    Mean   : 935.0  
                    3rd Qu.:16.365   3rd Qu.: 87.20    3rd Qu.:1236.0  
                    Max.   :19.970   Max.   :100.00    Max.   :1596.0  
  uptime_hours    customer_segment   benchmark_score availability_date 
 Min.   : 116.0   Length:300         Min.   : 6007   Length:300        
 1st Qu.: 518.2   Class :character   1st Qu.: 7457   Class :character  
 Median :1021.0   Mode  :character   Median : 8678   Mode  :character  
 Mean   :1011.1                      Mean   : 8937                     
 3rd Qu.:1504.2                      3rd Qu.:10572                     
 Max.   :1999.0                      Max.   :11948                     
 reliability_score
 Min.   : 90.00   
 1st Qu.: 92.47   
 Median : 94.90   
 Mean   : 94.94   
 3rd Qu.: 97.62   
 Max.   :100.00   
# Dimension
dim(df)
[1] 300  13
# Data Types
str(df)
'data.frame':   300 obs. of  13 variables:
 $ instance_id      : chr  "LMB-100" "LMB-101" "LMB-102" "LMB-103" ...
 $ gpu_model        : chr  "L40S" "V100" "RTX 4090" "V100" ...
 $ vram_gb          : int  96 96 16 96 48 80 16 80 96 96 ...
 $ num_gpus         : int  4 8 1 8 4 4 8 1 2 4 ...
 $ region           : chr  "US-East" "Australia" "US-East" "Europe" ...
 $ hourly_price_usd : num  14.3 10.54 4.41 6.5 15.46 ...
 $ avg_utilization_.: num  81.6 63 81.7 77 89 55.3 88.1 77.1 98.1 67.1 ...
 $ power_watts      : num  1442 825 725 1168 1350 ...
 $ uptime_hours     : int  496 724 204 291 116 1243 492 524 228 1253 ...
 $ customer_segment : chr  "Individual" "Enterprise" "Individual" "Enterprise" ...
 $ benchmark_score  : int  9970 7991 7067 7577 7011 8274 10869 7814 8426 11297 ...
 $ availability_date: chr  "2025-08-07" "2024-01-19" "2023-10-15" "2023-12-02" ...
 $ reliability_score: num  99.6 90.1 100 96.8 98.3 92.9 90.1 97.4 98.3 97.4 ...
# Checking for NA
na_counter <- sum(is.na(df))
cat("NA:", na_counter)
NA: 0
# Select only numeric columns for correlation
numeric_df <- df %>%
  select_if(is.numeric)

# Compute correlation matrix
corr_matrix <- cor(numeric_df, use = "complete.obs")

# Melt the correlation matrix for ggplot
melted_corr <- melt(corr_matrix)

# Get actual range of correlations for better contrast
rng <- range(melted_corr$value, na.rm = TRUE)

# Plot Heatmap
ggplot(data = melted_corr, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile(color = "black") +
  scale_fill_gradient2(
    low = "#3c096c",    # dark purple for negative
    mid = "#b983ff",    # light purple near 0
    high = "#ffb3ff",   # pinkish-purple for positive
    midpoint = 0,
    limits = rng,       # use actual data range, not -1 to 1
    name = "Correlation"
  ) +
  theme_minimal() +
  theme(
    plot.background  = element_rect(fill = "black", color = NA),
    panel.background = element_rect(fill = "black", color = NA),
    panel.grid       = element_blank(),
    axis.text.x      = element_text(
                         angle = 45, vjust = 1, hjust = 1, color = "white"
                       ),
    axis.text.y      = element_text(color = "white"),
    axis.title       = element_text(color = "white"),
    plot.title       = element_text(color = "white", face = "bold", hjust = 0.5),
    legend.title     = element_text(color = "white"),
    legend.text      = element_text(color = "white")
  ) +
  coord_fixed() +
  labs(
    title = "Correlation Heatmap of Lambda GPU Dataset",
    x = "",
    y = ""
  )

Statistical Inferences

The intention of this particular approach is to carefully examine whether GPU performance variables are crucially associated with hourly price and whether price differences exist between various GPU models.

Correlation and Simple Linear Regression

A Pearson correlation test was performed to assess the linear relationship between benchmark_score and hourly_price_usd. A simple linear regression was then fit to model hourly pricing as a function of benchmark score.

# Pearson Correlation Test
cor_test <- cor.test(df$benchmark_score, df$hourly_price_usd)
cor_test

    Pearson's product-moment correlation

data:  df$benchmark_score and df$hourly_price_usd
t = -1.1945, df = 298, p-value = 0.2332
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.18085765  0.04455857
sample estimates:
        cor 
-0.06903059 
# Simple Linear Regression Model
lm_model <- lm(hourly_price_usd ~ benchmark_score, data = df)
summary(lm_model)

Call:
lm(formula = hourly_price_usd ~ benchmark_score, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
-8.295 -4.405  0.288  4.311  8.383 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)     13.7522285  1.4211753   9.677   <2e-16 ***
benchmark_score -0.0001864  0.0001560  -1.195    0.233    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 4.759 on 298 degrees of freedom
Multiple R-squared:  0.004765,  Adjusted R-squared:  0.001426 
F-statistic: 1.427 on 1 and 298 DF,  p-value: 0.2332

The simple linear regression model is expressed as:

\[ Y = \beta_0 + \beta_1X + \epsilon \]

  • Intercept:

\[ \hat{\beta}_0 = 13.7522285 \]

  • Slope:

\[ \hat{\beta}_1 = -0.0001864 \]

Thus, the estimated regression equation is:

\[ \hat{Y} = 13.75 - 0.0001864x. \]

where \(Y\) is hourly_price_usd, \(X\) is the benchmark_score, \(\beta_0\) is the intercept, \(\beta_1\) is the slope, and \(\epsilon\) portrays random error.

# Linear Regression Visualization
ggplot(data = df, aes(x = benchmark_score, y = hourly_price_usd)) +
  geom_point(col = "blue") +
  geom_smooth(method = "lm", se = T, col = "red", linetype = "dashed") +
  labs(
    "title" = "Figure 1. Relationship Between Benchmark Score and Hourly GPU Price",
    x = "Benchmark Score",
    y = "Hourly Price (USD)"
  ) +
  theme_minimal() +
  theme(
    plot.background = element_rect(fill = "black", color = NA),
    panel.background = element_rect(fill = "black", color = NA),
    panel.grid.major = element_line(color = "gray30"),
    panel.grid.minor = element_line(color = "gray20"),
    axis.text = element_text(color = "white"),
    axis.title = element_text(color = "white"),
    plot.title = element_text(color = "white", face = "bold"),
    legend.position = "none"
  )
`geom_smooth()` using formula = 'y ~ x'

The Pearson correlation has a coefficient of \(r = -0.069\) with \(p = 0.233\), thoroughly indicating a statistically insignificant negative relationship. The linear regression model produced \(\beta_1 = -0.00019\) and \(R^2 = 0.0048\), elucidating that benchmark performance explains less than 1% of price variation. Ultimately, there is insufficient evidence to conclude that GPU benchmark performance affect hourly pricing.

Two-Sample \(t\)-Test

A Welch two-sample \(t\)-test was integrated to determine whether there was a significant difference in mean hourly prices between particular GPU models (A100 and L40S).

The test statistic is defined as:

\[ t = \frac{\bar{X}_1 - \bar{X}_2}{ \sqrt{ \frac{s_1^2}{n_1} + \frac{s_2^2}{n_2} }} \]

where \(\bar{X}_1\) and \(\bar{X}_2\) are the sample means, \(S^2_1\) and \(S^2_2\) are sample variances, and \(n_1\) and \(n_2\) are the sample sizes.

substituting values into the Welch test statistic:

\[ t = \frac{0.67344} {\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}} \]

Using the sample variances and sample sizes computed in R, the resulting test statistic is:

\[ t = 0.85174 \]

The degrees of freedom (Welch–Satterthwaite approximation) are:

\[ df \;=\; \frac{ \left( \frac{s_1^2}{n_1} + \frac{s_2^2}{n_2} \right)^2 }{ \frac{\left(\frac{s_1^2}{n_1}\right)^2}{n_1 - 1} + \frac{\left(\frac{s_2^2}{n_2}\right)^2}{n_2 - 1} } \]

\[ df \;\approx\; \frac{ \left( \frac{s_1^2}{n_1} + \frac{s_2^2}{n_2} \right)^2 }{ \frac{\left(\frac{s_1^2}{n_1}\right)^2}{n_1 - 1} + \frac{\left(\frac{s_2^2}{n_2}\right)^2}{n_2 - 1} } \;\approx\; 139.37 \]

Thus, the Welch–Satterthwaite approximation yields

\[ df \approx 139.37. \]

For Welch’s two-sample t-test, the 95% confidence interval for the difference in population means \((\mu_1 - \mu_2)\) is given by

\[ (\bar{X}_1 - \bar{X}_2) \;\pm\; t_{\alpha/2,\,df} \cdot \sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}} \]

where:

  • \(\bar{X}_1, \bar{X}_2\) are the sample means

  • \(s_1^2, s_2^2\) are the sample variances

  • \(n_1, n_2\) are the sample sizes

  • \(t_{\alpha/2, df}\) is the critical \(t\)-value with \(df\) degrees of freedom

From the sample:

\[ \bar{X}_1 = 12.99290, \qquad \bar{X}_2 = 12.31946 \]

So the difference in sample means is

\[ \bar{X}_1 - \bar{X}_2 = 12.99290 - 12.31946 = 0.67344 \]

Using the sample variances, sample sizes, and the Welch–Satterthwaite degrees of freedom \(df \approx 139.37\), the estimated standard error of the difference is

\[ SE = \sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}} \approx 0.79 \]

The critical value for a 95% confidence interval is approximately

\[ t_{0.025,\,139.37} \approx 1.98 \]

Thus, the 95% confidence interval is

\[ (\bar{X}_1 - \bar{X}_2) \;\pm\; t_{0.025,\,139.37} \cdot SE = 0.67344 \;\pm\; 1.98 \times 0.79 \]

which gives:

\[ 0.67344 \;\pm\; 1.563 \;\Rightarrow\; (-0.8898,\; 2.2367) \]

Therefore, the 95% confidence interval for the difference in mean hourly price (A100 minus L40S) is

\[ (-0.8898,\; 2.2367). \]

Because this interval contains 0, it is consistent with the conclusion that there is no statistically significant difference between the two mean prices.

Under the null hypothesis \(H_0 : \mu_1 - \mu_2 = 0\), the test statistic follows a \(t\)-distribution with \(df \approx 139.37\). The two-sided p-value is then defined as

\[ p = 2 \cdot P\left(T_{df} \ge |t_{\text{obs}}|\right), \]

where \(T_{df}\) is a random variable following a \(t\)-distribution with the given degrees of freedom.

Substituting the observed values:

\[ p = 2 \cdot P\left(T_{139.37} \ge |0.85174|\right). \]

Evaluating this probability (using R or a \(t\)-distribution table) gives:

\[ P\left(T_{139.37} \ge 0.85174\right) \approx 0.1979, \]

so the two-sided p-value is

\[ p = 2 \times 0.1979 \approx 0.3958. \]

Thus, the two-sided p-value computed from the \(t\)-distribution is

\[ p = 0.3958. \]

# Welch's Two-Sample t-Test
gpu_subset <- df |>
  filter(gpu_model %in% c("A100", "L40S"))

t.test(hourly_price_usd ~ gpu_model, data = gpu_subset)

    Welch Two Sample t-test

data:  hourly_price_usd by gpu_model
t = 0.85174, df = 139.37, p-value = 0.3958
alternative hypothesis: true difference in means between group A100 and group L40S is not equal to 0
95 percent confidence interval:
 -0.8897991  2.2366773
sample estimates:
mean in group A100 mean in group L40S 
          12.99290           12.31946 
# Boxplot
ggplot(data = gpu_subset, aes(x = gpu_model, y = hourly_price_usd, fill = gpu_model)) +
  geom_boxplot(color = "black") +
  scale_fill_manual(values = c("purple2", "darkorchid4")) +  # purple shades
  labs(
    title = "Figure 2. Hourly Price Comparison: A100 vs L40S GPUs",
    x = "GPU Model",
    y = "Hourly Price (USD)"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.background = element_rect(fill = "black", color = NA),
    panel.background = element_rect(fill = "black", color = NA),
    panel.grid.major = element_line(color = "gray30"),
    panel.grid.minor = element_line(color = "gray20"),
    axis.text = element_text(color = "white"),
    axis.title = element_text(color = "white"),
    plot.title = element_text(color = "white", face = "bold"),
    legend.position = "none"
  )

# Summary Table of Means
mean_table <- gpu_subset %>%
  group_by(gpu_model) %>%
  summarise(
    Mean_Price = mean(hourly_price_usd),
    SD_Price = sd(hourly_price_usd),
    n = n()
  )
kable(mean_table, digits = 2, caption = "Table 1. Mean Hourly Price by GPU Model")
Table 1. Mean Hourly Price by GPU Model
gpu_model Mean_Price SD_Price n
A100 12.99 4.81 69
L40S 12.32 4.63 74

\(t = 0.85\), \(df = 139.37\), and \(p-value\) = 0.396. There are no significant difference in average hourly price between A100 and L40S GPUs.

The mean hourly price for A100 was $12.99, while for L40S it was $12.32. The 95% confidence interval for the difference in means was (-0.89, 2.24), which includes zero, confirming no significant difference.

Conclusion

This analysis indicates that GPU hardware performance metrics–such as benchmark score, capacity of VRAM, number of GPUs, and power consumption–do not significantly predict hourly rental pricing in Lambda’s GPU cloud environment. Both approaches (Pearson’s Correlation and Linear Regression analyses) illustrated no statistically significant relationship between benchmark performance and price, and the \(t\)-test confirmed no significant difference between A100 and L40S pricing.

These results suggest that Lambda’s pricing model is not directly performance-driven. On the other hand, crucial variables such as geographic region, reliability, uptime, and market demand likely play a more substantial role in determining hourly rates.