R on the server: Difference between revisions

From Stat DS Computing Wiki
No edit summary
hydra -> leviathans
Line 3: Line 3:
[[Category:Department Servers]]
[[Category:Department Servers]]


The department's Hydra cluster has R installed on each machine. It also has RStudio Server running on each machine, so there are two ways to run R code.
The department's Leviathan cluster has R installed on each machine. It also has RStudio Server running on each machine, so there are two ways to run R code.


== Running R on the server ==
== Running R on the server ==


=== Command line ===
=== Command line ===
On the Hydras, or on other servers that do not support RStudio, log into the server via SSH first. After getting onto the server (see [[Linux_and_department_servers|Linux and the department server]]), you can start using <code>R</code> but opening an interactive session on the console with
On the Leviathans, or on other servers that do not support RStudio, log into the server via SSH first. After getting onto the server (see [[Linux_and_department_servers|Linux and the department server]]), you can start using <code>R</code> but opening an interactive session on the console with


<syntaxhighlight lang="bash">R</syntaxhighlight>
<syntaxhighlight lang="bash">R</syntaxhighlight>
Line 15: Line 15:


=== RStudio Server ===
=== RStudio Server ===
RStudio Server is running on each Hydra. Choose a Hydra with low usage. For example, suppose you choose <code>hydra3</code>. Then type the following URL into your web browser:
RStudio Server is running on each Leviathan. Choose a Leviathan with low usage. For example, suppose you choose <code>leviathan3</code>. Then type the following URL into your web browser:
  <nowiki>http://hydra3.stat.cmu.edu:8787/</nowiki>
  <nowiki>http://leviathan3.stat.cmu.edu:8787/</nowiki>
This will open RStudio Server. Use your statistics account (the same one you use to log in via SSH) to log in.
This will open RStudio Server. Use your statistics account (the same one you use to log in via SSH) to log in.


You will be able to use the RStudio files pane to view all your files on the hydras. It looks just like RStudio on your own computer. Files are shared across machines, but your RStudio session is specific to the hydra you started it on. Return to the same hydra to view your running code or output.
You will be able to use the RStudio files pane to view all your files on the Leviathans. It looks just like RStudio on your own computer. Files are shared across machines, but your RStudio session is specific to the Leviathan you started it on. Return to the same Leviathan to view your running code or output.


== Library Management ==
== Library Management ==
Line 33: Line 33:
<li>The server’s version of <code>R</code> may different than you personal computer. It will also occasionally update. This will require you to re-install packages (see[[Renv|<code>Renv</code>’s wiki (R package environments)]]&nbsp;for a way to make this less painful).</li>
<li>The server’s version of <code>R</code> may different than you personal computer. It will also occasionally update. This will require you to re-install packages (see[[Renv|<code>Renv</code>’s wiki (R package environments)]]&nbsp;for a way to make this less painful).</li>
<li>Compared to RStudio, you may need to debug package installation and dependence structure. Good luck!</li>
<li>Compared to RStudio, you may need to debug package installation and dependence structure. Good luck!</li>
<li>Packages that use C, C++, or Fortran code will try to compile it from scratch, instead of downloading a pre-compiled version (like on Windows or macOS). This may require certain libraries to be installed on the servers; if package installation fails and tells you to use <code>apt</code> to install a library, you'll need to ask for help to install these, as you don't have the power to.
</li>
</ol>
</ol>


Line 57: Line 59:
==== Example uses of arguments ====
==== Example uses of arguments ====


Examples of argument values abound in statistical analysis. If you're using [Slurm|Slurm] you may use arguments to parallelize a task. These types of tasks could be running through complicated data observations, examining outcomes across a grid of hyperparameters, etc. It could also be useful to pass in the name of a file to process or folder to pull from.
Examples of argument values abound in statistical analysis. If you're using [[Slurm]] you may use arguments to parallelize a task. These types of tasks could be running through complicated data observations, examining outcomes across a grid of hyperparameters, etc. It could also be useful to pass in the name of a file to process or folder to pull from.


=== <code>R CMD BATCH</code> ===
=== <code>R CMD BATCH</code> ===
Line 76: Line 78:
at the start and at the end
at the start and at the end
<pre class="{r}">used_time <- Sys.time() - start
<pre class="{r}">used_time <- Sys.time() - start
print(used_time)</pre>
print(used_time)</pre>If you're running a script, you can also use the <code>time</code> command, as in:<syntaxhighlight lang="shell">
</li>
time Rscript some_script.R
</syntaxhighlight></li>
<li>'''Understanding memory usage:''' When you are running code in <code>R</code> or RStudio, you can get some understanding of how large an object is (and therefore get a lower bound on your potential RAM usage) using the package <code>pryr</code>. Calling <code>pryr::object_size(object_name)</code> will tell you what the approximate size of the object is. See [http://adv-r.had.co.nz/memory.html adv-r] on the package usage.  
<li>'''Understanding memory usage:''' When you are running code in <code>R</code> or RStudio, you can get some understanding of how large an object is (and therefore get a lower bound on your potential RAM usage) using the package <code>pryr</code>. Calling <code>pryr::object_size(object_name)</code> will tell you what the approximate size of the object is. See [http://adv-r.had.co.nz/memory.html adv-r] on the package usage.  



Revision as of 14:49, 29 June 2026


The department's Leviathan cluster has R installed on each machine. It also has RStudio Server running on each machine, so there are two ways to run R code.

Running R on the server

Command line

On the Leviathans, or on other servers that do not support RStudio, log into the server via SSH first. After getting onto the server (see Linux and the department server), you can start using R but opening an interactive session on the console with

R

You’ll be able to run code (except for visualization as the server can’t display graphics), from the console.

RStudio Server

RStudio Server is running on each Leviathan. Choose a Leviathan with low usage. For example, suppose you choose leviathan3. Then type the following URL into your web browser:

http://leviathan3.stat.cmu.edu:8787/

This will open RStudio Server. Use your statistics account (the same one you use to log in via SSH) to log in.

You will be able to use the RStudio files pane to view all your files on the Leviathans. It looks just like RStudio on your own computer. Files are shared across machines, but your RStudio session is specific to the Leviathan you started it on. Return to the same Leviathan to view your running code or output.

Library Management

Compared to your personal computer (and your personal computer using RStudio), installing packages has a few nuances.

  1. The first time installing a package, e.g.
    server$ R
    
    R > install.packages("tidyverse")

    you’ll be asked to set up a local folder to store your files.

  2. The server’s version of R may different than you personal computer. It will also occasionally update. This will require you to re-install packages (seeRenv’s wiki (R package environments) for a way to make this less painful).
  3. Compared to RStudio, you may need to debug package installation and dependence structure. Good luck!
  4. Packages that use C, C++, or Fortran code will try to compile it from scratch, instead of downloading a pre-compiled version (like on Windows or macOS). This may require certain libraries to be installed on the servers; if package installation fails and tells you to use apt to install a library, you'll need to ask for help to install these, as you don't have the power to.

Running Jobs

Beyond just opening up an interactive R session with R, you can run files in 2 ways (as described below).

Rscript

Rscript is a more commonly used tool to run .R files, as it allows you to pass additional arguments to the file. For example:

Rscript file.R arg1 arg2

In order to use arg1 and arg2 in your R code, you’ll access them (as strings) using commandArgs(), for example:

args <- commandArgs(trailingOnly = TRUE)
if (length(args) > 0) {
  first_parameter <- args[1]
  second_parameter <- as.numeric(args[2])
  ...
}

Rscript also allows for standard output (printed to the terminal while running).

Example uses of arguments

Examples of argument values abound in statistical analysis. If you're using Slurm you may use arguments to parallelize a task. These types of tasks could be running through complicated data observations, examining outcomes across a grid of hyperparameters, etc. It could also be useful to pass in the name of a file to process or folder to pull from.

R CMD BATCH

R CMD BATCH is an older approach (compared to Rscript you cannot pass in additional arguments nor see printouts to the standard output, but a file_name.Rout file will be generated with all print outs of the code.

R CMD BATCH file.R

If you don't have any input arguments to access and want to save errors and messages that came from running your .R file, this might be a better approach.

Additional useful tools

When approaching running code on different servers (and even on your own computer), it may be useful to understand the amount of time an analysis (or a part of an analysis) will run and how much memory it uses. This can help you decide what computing resources you need / what would make your analysis feasible. Knowing this information can also help you decide if you need to make your code more efficient (which can be done with the help of profiles and potentially C++ functions - link to come soon).

  1. Estimating time usage: To measure the amount of time code takes to run, one approach is to put
    start <- Sys.time()

    at the start and at the end

    used_time <- Sys.time() - start
    print(used_time)
    If you're running a script, you can also use the time command, as in:
    time Rscript some_script.R
  2. Understanding memory usage: When you are running code in R or RStudio, you can get some understanding of how large an object is (and therefore get a lower bound on your potential RAM usage) using the package pryr. Calling pryr::object_size(object_name) will tell you what the approximate size of the object is. See adv-r on the package usage. For example,
    R> library(pryr)
    R> dm_small <- as.matrix(dist(1:10))
    R> object_size(dm_small)
    2.1 kB
    R> dm_medium <- as.matrix(dist(1:10-))
    R> object_size(dm_medium)
    87.7 kB
    R> dm_large <- as.matrix(dist(1:1000))
    R> object_size(dm_large)
    8.07 MB
    R> dm_large <- as.matrix(dist(1:10000))
    R> object_size(dm_large)
    801 MB

    If we did

    R> dm_large <- as.matrix(dist(1:1000000))

    we'd expect object_size(dm_large) to be around 80 GB, which should crash your personal computer's R/Rstudio since you probably don't have that much RAM.



    It is possible to also check your amount of RAM usage with OS-centric tools (e.g. Mac's: Activity Monitor or Window's: Dask Management).