def METHOD_NAME(cluster, dirname):
    # Run LBANN experiment
    experiment_output = test_func(cluster, dirname)
    # Parse LBANN log file
    train_accuracy = None
    gpu_usage = None
    mini_batch_times = []
    gpu_usages = []
    with open(experiment_output['stdout_log_file']) as f:
        for line in f:
            match = re.search('training epoch [0-9]+ objective function : ([0-9.]+)', line)
            if match:
                train_accuracy = float(match.group(1))
            match = re.search('training epoch [0-9]+ mini-batch time statistics : ([0-9.]+)s mean', line)
            if match:
                mini_batch_times.append(float(match.group(1)))
            match = re.search('GPU memory usage statistics : ([0-9.]+) GiB mean', line)
            if match:
                gpu_usages.append(float(match.group(1)))
    # Check if training accuracy is within expected range
    assert (expected_accuracy_range[0]
            < train_accuracy
            <expected_accuracy_range[1]), \
            'train accuracy is outside expected range'
    #Only tested on Ray. Skip if mini-batch test on another cluster. Change this when mini-batch values are available for other clusters 
    # Check if mini-batch time is within expected range
    # Note: Skip first epoch since its runtime is usually an outlier
    mini_batch_times = mini_batch_times[1:]
    mini_batch_time = sum(mini_batch_times) / len(mini_batch_times)
    assert (0.75 * expected_mini_batch_times[cluster]
            < mini_batch_time
            < 1.25 * expected_mini_batch_times[cluster]), \
            'average mini-batch time is outside expected range'
    # Check for GPU usage and memory leaks 
    # Note: Skip first epoch 
    gpu_usages = gpu_usages[1:] 
    gpu_usage = sum(gpu_usages)/len(gpu_usages)
    assert (0.75 * expected_gpu_usage[cluster] 
            < gpu_usage 
            < 1.25 * expected_gpu_usage[cluster]),\
            'average gpu usage is outside expected range'