Skip to main content

OpenAI Gymnasium vectorized approach works slower than non-vectorized

I'm getting started with OpenAI Gymnasium. My task is to speed-up trajectory generation. So to create N trajectories, I want to use a single parallel multi-env instead of running the same env N times with resets. I found the vector module of Gym and tried to use it. But for me it doesn't speed up the generation, moreover it's sometimes slower. Here's sample code:

Vectorized

n_envs = 100
vec_envs = gym.vector.make("CartPole-v0", render_mode="rgb_array", num_envs=n_envs)
vec_envs.reset()
n_actions = vec_envs.action_space[0].n

%%time
t_steps = 1000
for iter_idx in range(t_steps):
    actions_batch = np.random.randint(low=0, high=n_actions, size=(n_envs,))
    new_s, r, terminated, truncated, info = vec_envs.step(actions_batch)

Here %%time gives me:

CPU times: total: 5.8 s Wall time: 6.84 s

Non Vectorized

env = gym.make("CartPole-v0", render_mode="rgb_array")
env.reset()
n_actions = env.action_space.n

%%time
t_steps = 1000

def gen_single_session(env, t_steps):
    for iter_idx in range(t_steps):
        action = np.random.randint(low=0, high=n_actions)
        new_s, r, terminated, truncated, info = env.step(action)
        if terminated or truncated:
            env.reset()

for session_idx in range(100):
    gen_single_session(env, t_steps)
    env.reset()

And here %%time gives me:

CPU times: total: 1.33 s Wall time: 1.3 s

In these lines I'm simulating the Vector behavior (if subenv terminates, it will be automatically reset):

if terminated or truncated:
    env.reset()

If I change the env to LunarLander-v2 I get closer runtimes: 13s vs 15s respectively.

Am I doing something wrong? What's the best way to make it parallel?



source https://stackoverflow.com/questions/77084199/openai-gymnasium-vectorized-approach-works-slower-than-non-vectorized

Comments

Popular posts from this blog

ValueError: X has 10 features, but LinearRegression is expecting 1 features as input

So, I am trying to predict the model but its throwing error like it has 10 features but it expacts only 1. So I am confused can anyone help me with it? more importantly its not working for me when my friend runs it. It works perfectly fine dose anyone know the reason about it? cv = KFold(n_splits = 10) all_loss = [] for i in range(9): # 1st for loop over polynomial orders poly_order = i X_train = make_polynomial(x, poly_order) loss_at_order = [] # initiate a set to collect loss for CV for train_index, test_index in cv.split(X_train): print('TRAIN:', train_index, 'TEST:', test_index) X_train_cv, X_test_cv = X_train[train_index], X_test[test_index] t_train_cv, t_test_cv = t[train_index], t[test_index] reg.fit(X_train_cv, t_train_cv) loss_at_order.append(np.mean((t_test_cv - reg.predict(X_test_cv))**2)) # collect loss at fold all_loss.append(np.mean(loss_at_order)) # collect loss at order plt.plot(np.log(al...

Sorting large arrays of big numeric stings

I was solving bigSorting() problem from hackerrank: Consider an array of numeric strings where each string is a positive number with anywhere from to digits. Sort the array's elements in non-decreasing, or ascending order of their integer values and return the sorted array. I know it works as follows: def bigSorting(unsorted): return sorted(unsorted, key=int) But I didnt guess this approach earlier. Initially I tried below: def bigSorting(unsorted): int_unsorted = [int(i) for i in unsorted] int_sorted = sorted(int_unsorted) return [str(i) for i in int_sorted] However, for some of the test cases, it was showing time limit exceeded. Why is it so? PS: I dont know exactly what those test cases were as hacker rank does not reveal all test cases. source https://stackoverflow.com/questions/73007397/sorting-large-arrays-of-big-numeric-stings

How to load Javascript with imported modules?

I am trying to import modules from tensorflowjs, and below is my code. test.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title </head> <body> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.0.0/dist/tf.min.js"></script> <script type="module" src="./test.js"></script> </body> </html> test.js import * as tf from "./node_modules/@tensorflow/tfjs"; import {loadGraphModel} from "./node_modules/@tensorflow/tfjs-converter"; const MODEL_URL = './model.json'; const model = await loadGraphModel(MODEL_URL); const cat = document.getElementById('cat'); model.execute(tf.browser.fromPixels(cat)); Besides, I run the server using python -m http.server in my command prompt(Windows 10), and this is the error prompt in the console log of my browser: Failed to loa...