이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

tf.distribute.StrategyExtended

참조 박을

TensorFlow 1 개 버전 GitHub의에서 소스보기

유통 인식 할 필요가 알고리즘을 추가하는 API.

이 페이지의 기능의 일반적인 사용 사례 :

  • 소재지

tf.distribute.DistributedValues (컴퓨팅 장치와는 대조적으로) 미러 값에 이르게 변수와 같은 디바이스에 상주하는 분산 된 변수와 동일한 지역을 가질 수있다. 이러한 값은 호출로 전달 될 수있다 tf.distribute.StrategyExtended.update 변수 값을 업데이트하기 위해. 당신은 사용할 수 있습니다 tf.distribute.StrategyExtended.colocate_vars_with 변수를 다른 변수와 동일한 지역을 제공 할 수 있습니다. 당신은 사용하여 변수의 지역에 "PerReplica"값을 변환 할 수 있습니다 tf.distribute.StrategyExtended.reduce_to 또는 tf.distribute.StrategyExtended.batch_reduce_to .

  • 분산 변수를 업데이트하는 방법

분산 변수는 여러 디바이스에 생성 한 변수이다. 에서 논의 된 바와 같이 용어 미러링 변수 SyncOnRead 변수는 두 가지 예이다. 분산 변수를 업데이트하기위한 표준 패턴에 있습니다 :

  1. 전달 함수에서 tf.distribute.Strategy.run (업데이트 변수) 쌍의 목록을 계산한다. 예를 들어, 업데이트 변수에 대한 손실의 기울기가 될 수있다.
  2. 호출하여 상호 복제 모드로 전환 tf.distribute.get_replica_context().merge_call() 인수로 업데이트 및 변수.
  3. 통화 tf.distribute.StrategyExtended.reduce_to(VariableAggregation.SUM, t, v) (하나 개의 변수) 또는 tf.distribute.StrategyExtended.batch_reduce_to (변수의리스트)를 업데이트를 합산한다.
  4. 전화 tf.distribute.StrategyExtended.update(v) 각 변수의 값을 업데이트 할 수 있습니다.

4 단계 2는 클래스에 의해 자동으로 수행하는 tf.keras.optimizers.Optimizer 당신이 호출하는 경우 tf.keras.optimizers.Optimizer.apply_gradients 복제 맥락에서 방법을.

사실, 더 높은 수준의 솔루션은 분산 변수를 호출하는 것입니다 업데이트 assign 정기적으로 할 것 같은 변수에 tf.Variable . 당신은 복제 상황과 교차 복제 환경 모두에서 메서드를 호출 할 수 있습니다. 미러 변수의 호출 assign 복제 맥락에서 것은 지정해야합니다 aggregation 변수 생성자의 유형입니다. 이 경우에, 컨텍스트 스위칭 및 동기화 2-4가 해당 처리 단계에 설명. 당신이 호출 할 경우 assign 간 복제 맥락에서 미러 변수에, 당신은 단지 다른 미러 변수 또는 미러에서 단일 값 또는 할당 값을 할당 할 수 있습니다 tf.distribute.DistributedValues . SyncOnRead 변수의 경우, 복제 맥락에서, 당신은 단순히 호출 할 수 있습니다 assign 그것에 더 집계는 후드 아래에 발생하지 않습니다. 간 복제 맥락에서, 당신은 단지 SyncOnRead 변수에 단일 값을 할당 할 수 있습니다. 하나의 예시적인 경우는 체크 포인트에서 복원되는 다음 경우 aggregation 변수의 타입이 tf.VariableAggregation.SUM ,이 복제본 값은 검사 점 전에, 그래서 값이 복제본의 개수로 나눈, 복원시에 첨가한다고 가정 다음 각 복제에 할당; 경우 생성 aggregation 형이다 tf.VariableAggregation.MEAN 값은 서로 직접 복제에 할당된다.

experimental_require_static_shapes 반환 True 정적 인 형태가 필요한 경우; False 이 없습니다.
parameter_devices 장소 변수에 사용 된 모든 장치의 튜플을 반환합니다.
worker_devices 반환 컴퓨팅 복제 실행에 사용되는 모든 장치의 튜플.

행동 양식

batch_reduce_to

소스보기

여러 결합 reduce_to 빠른 실행을 위해 하나에 전화를.

인수
reduce_op 환원 형의 인스턴스 tf.distribute.ReduceOp 열거.
value_destination_pairs (값, 휴양지) 쌍의 시퀀스. 참조 reduce_to() 에 대한 설명을.
experimental_hints tf.distrbute.experimental.CollectiveHints . 힌트는 공동 작업을 수행 할 수 있습니다.

보고
미러 값의 쌍마다 하나의 목록 value_destination_pairs .

colocate_vars_with

소스보기

장치 변수에 생성 될 제어하는 ​​것을 스코프.

변수를 생성 할 때 아무런 조작이 범위 안에 그래프에 첨가되지 않아야, 단지 사용한다 (일부 실시 변수 생성을 변경함으로써 작동 등은 tf.compat.v1.colocate_with () 범위를 사용하여 동작).

이 내용은 내부 사용할 수 있습니다 self.scope() .

사용 예제 :

 with strategy.scope():
  var1 = tf.Variable(...)
  with strategy.extended.colocate_vars_with(var1):
    # var2 and var3 will be created on the same device(s) as var1
    var2 = tf.Variable(...)
    var3 = tf.Variable(...)

  def fn(v1, v2, v3):
    # operates on v1 from var1, v2 from var2, and v3 from var3

  # `fn` runs on every device `var1` is on, `var2` and `var3` will be there
  # too.
  strategy.extended.update(var1, fn, args=(var2, var3))
 

인수
colocate_with_variable 이 전략의에서 만든 변수 scope() . 반환되는 콘텍스트 관리자에있는 동안 만든 변수는 장치의 동일한 세트 될 예정 colocate_with_variable .

보고
컨텍스트 매니저.

reduce_to

소스보기

결합 (통해 예를 들어 합계 또는 평균) 복제본을 통해 값.

인수
reduce_op 환원 형의 인스턴스 tf.distribute.ReduceOp 열거.
value 복제 당 하나 개의 값을 가진 당 복제 값입니다.
destinations 미러링 된 변수 당 복제 텐서 또는 장치 스트링. 반환 값은 모든 대상 장치 (또는 모든 장치에 복사됩니다 destinations 상주 가치). 모든-감소를 수행하려면, 통과 value to destinations .
experimental_hints tf.distrbute.experimental.CollectiveHints . 힌트는 공동 작업을 수행 할 수 있습니다.

보고
텐서 또는 값이 미러링 destinations .

update

소스보기

실행 fn 업데이트에 var 같은 장치에 미러링 입력을 사용.

tf.distribute.StrategyExtended.update 분산 변수 소요 var 업데이트 할, 업데이트 기능 fn , 및 argskwargs 에 대한 fn . 이 적용되는 fn 의 각 성분 변수 var 로부터 값을 전달 대응 argskwargs . 둘 다 argskwargs 당 복제 값을 포함 할 수 없습니다. 그들은 미러 값을 포함 할 경우, 그들은 호출하기 전에 랩 해제됩니다 fn . 예를 들어, fn 될 수 assign_addargs 각 성분이 미러 변수에 추가되어야 할 값이 포함 된 미러 DistributedValues 될 수 var . 호출 update 호출 assign_add 각 성분 변수 var 그 장치에 대응 텐서 값.

사용 예제 :

 strategy = tf.distribute.MirroredStrategy(['/gpu:0', '/gpu:1']) # With 2 devices
with strategy.scope():
  v = tf.Variable(5.0, aggregation=tf.VariableAggregation.SUM)
def update_fn(v):
  return v.assign(1.0)
result = strategy.extended.update(v, update_fn)
# result is
# Mirrored:{
#  0: tf.Tensor(1.0, shape=(), dtype=float32),
#  1: tf.Tensor(1.0, shape=(), dtype=float32)
# }
 

경우 var 여러 장치, 다음과 같이이 메소드 구현 로직의 미러는 :

 results = {}
for device, v in var:
  with tf.device(device):
    # args and kwargs will be unwrapped if they are mirrored.
    results[device] = fn(v, *args, **kwargs)
return merged(results)
 

그 이외의 경우,이 메소드는 반환 fn(var, *args, **kwargs) 함께 코 로케이션 var .

인수
var 변수, 가능성에 작동하는 여러 장치에 미러링.
fn 기능 호출합니다. 첫 번째 인수로 변수를 고려해야한다.
args 튜플 또는 목록. 추가 위치 인수가 전달하려면 fn() .
kwargs 키워드 인수 DICT가에 전달할 fn() .
group 부울. 디폴트는 true. false의 경우, 반환 값은 미개봉 될 것입니다.

보고
기본적으로는의 반환 값 합병 fn 모든 복제본에 걸쳐있다. 병합 결과는 확인이 전혀 평가하는 경우, 부작용 (업데이트) 모든 복제에 일어날 것입니다 있는지 확인하는 종속성이 있습니다. 대신 "그룹 = 거짓"를 지정하면,이 기능은 각 목록은 복제 당 요소가리스트의 둥지를 반환하고, 호출자는 실행되는 모든 요소를 ​​보장 할 책임이있다.

value_container

소스보기

반환이 당 복제하는 용기 value 에 속한다.

인수
value 하여 리턴 값 run() 에서 생성 또는 가변 scope() .

보고
용기있는 value 에 속한다. 값이 (파괴 된 용기의 경우 포함) 용기에 속하지 않는 경우, 값 자체를 반환합니다. value in experimental_local_results(value_container(value)) 항상 true가됩니다.

variable_created_in_scope

소스보기

여부를 테스트 v 이 전략의 범위가 활성화 동안 만들었습니다.

전략 범위 내에서 생성 된 변수는에 의해 "소유"하고 있습니다 :

strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
  v = tf.Variable(1.)
strategy.extended.variable_created_in_scope(v)
True

그것을 소유하지 않은 전략 외부에서 만든 변수 :

strategy = tf.distribute.MirroredStrategy()
v = tf.Variable(1.)
strategy.extended.variable_created_in_scope(v)
False

인수
v tf.Variable 인스턴스입니다.

보고
진정한 경우 v 없는 경우는 false, 범위 내에서 작성되었습니다.