TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for...

39
TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨ et [email protected] Tropics Project, INRIA Sophia-Antipolis ECCOMAS 2004, Jyv¨ askyl¨ a, July 25-28, 2004

Transcript of TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for...

Page 1: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

TAPENADE: a tool for AutomaticDifferentiation of programs

Laurent Hascoet

[email protected]

Tropics Project, INRIA Sophia-Antipolis

ECCOMAS 2004, Jyvaskyla, July 25-28, 2004

Page 2: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

1

PLAN:

• AD: principles of Tangent and Reverse

• Tapenade: technology from Compilation and Parallelization

• Tapenade: differentiation model on examples

• Tapenade: an AD tool on the web

• Conclusion and Further Developments

Page 3: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

2

AD: Principles of Tangent and Reverse

AD rewrites source programs to make them compute derivatives.

consider: P : {I1; I2; . . . Ip; } implementing f : IRm → IRn

Page 4: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

2

AD: Principles of Tangent and Reverse

AD rewrites source programs to make them compute derivatives.

consider: P : {I1; I2; . . . Ip; } implementing f : IRm → IRn

identify with: f = fp ◦ fp−1 ◦ · · · ◦ f1

name: x0 = x and xk = fk(xk−1)

Page 5: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

2

AD: Principles of Tangent and Reverse

AD rewrites source programs to make them compute derivatives.

consider: P : {I1; I2; . . . Ip; } implementing f : IRm → IRn

identify with: f = fp ◦ fp−1 ◦ · · · ◦ f1

name: x0 = x and xk = fk(xk−1)chain rule: f ′(x) = f ′p(xp−1).f ′p−1(xp−2). . . . .f ′1(x0)

Page 6: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

2

AD: Principles of Tangent and Reverse

AD rewrites source programs to make them compute derivatives.

consider: P : {I1; I2; . . . Ip; } implementing f : IRm → IRn

identify with: f = fp ◦ fp−1 ◦ · · · ◦ f1

name: x0 = x and xk = fk(xk−1)chain rule: f ′(x) = f ′p(xp−1).f ′p−1(xp−2). . . . .f ′1(x0)

f ′(x) generally too large and expensive ⇒ take useful views!

y = f ′(x).x = f ′p(xp−1).f ′p−1(xp−2). . . . .f ′1(x0).x tangent AD

x = f ′∗(x).y = f ′∗1 (x0). . . . f ′∗p−1(xp−2).f ′∗p (xp−1).y reverse AD

Evaluate both from right to left !

Page 7: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

3

AD: Example

...v2 = 2 ∗ v1 + 5v4 = v2 + p1 ∗ v3/v2

...

Page 8: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

3

AD: Example

...v2 = 2 ∗ v1 + 5v4 = v2 + p1 ∗ v3/v2

...

The corresponding (fragment of) Jacobian is:

f ′(x) = ...

1

11

0 1−p1∗v3

v22

p1v2

0

12 0

11

...

Page 9: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

4

Tangent AD keeps the structure of P :

y = f ′(x).x = f ′p(xp−1).f ′p−1(xp−2). . . . .f ′1(x0).x

...

v2 = 2 ∗ v1 + 5

v4 = v2 + p1 ∗ v3/v2...

Page 10: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

4

Tangent AD keeps the structure of P :

y = f ′(x).x = f ′p(xp−1).f ′p−1(xp−2). . . . .f ′1(x0).x

...

v2 = 2 ∗ v1 + 5

v4 = v2 + p1 ∗ v3/v2...

v2 = 2 ∗ v1

v4 = v2 ∗ (1− p1 ∗ v3/v22) + v3 ∗ p1/v2

just inserts the products xk = f ′k(xk−1) for k = 1 to p.

Page 11: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

5

AD: Reverse is more tricky than Tangent

x = f ′∗(x).y = f ′∗1 (x0). . . . f ′∗p−1(xp−2).f ′∗p (xp−1).y

time

y

Page 12: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

5

AD: Reverse is more tricky than Tangent

x = f ′∗(x).y = f ′∗1 (x0). . . . f ′∗p−1(xp−2).f ′∗p (xp−1).y

time

yf ′∗p (xp−1).

Page 13: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

5

AD: Reverse is more tricky than Tangent

x = f ′∗(x).y = f ′∗1 (x0). . . . f ′∗p−1(xp−2).f ′∗p (xp−1).y

time

yf ′∗p (xp−1).f ′∗p−1(xp−2).

Page 14: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

5

AD: Reverse is more tricky than Tangent

x = f ′∗(x).y = f ′∗1 (x0). . . . f ′∗p−1(xp−2).f ′∗p (xp−1).y

time

yf ′∗p (xp−1).f ′∗p−1(xp−2).. . .x = f ′∗1 (x0).

Page 15: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

5

AD: Reverse is more tricky than Tangent

x = f ′∗(x).y = f ′∗1 (x0). . . . f ′∗p−1(xp−2).f ′∗p (xp−1).y

time

yf ′∗p (xp−1).f ′∗p−1(xp−2).. . .x = f ′∗1 (x0).

xp−1 = fp−1(xp−2);

Page 16: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

5

AD: Reverse is more tricky than Tangent

x = f ′∗(x).y = f ′∗1 (x0). . . . f ′∗p−1(xp−2).f ′∗p (xp−1).y

time

yf ′∗p (xp−1).f ′∗p−1(xp−2).. . .x = f ′∗1 (x0).

xp−1 = fp−1(xp−2);xp−2 = fp−2(xp−3);. . .x1 = f1(x0);

x0; forward sweep

backward sweep

Page 17: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

5

AD: Reverse is more tricky than Tangent

x = f ′∗(x).y = f ′∗1 (x0). . . . f ′∗p−1(xp−2).f ′∗p (xp−1).y

time

yf ′∗p (xp−1).f ′∗p−1(xp−2).. . .x = f ′∗1 (x0).

xp−1 = fp−1(xp−2);xp−2 = fp−2(xp−3);. . .x1 = f1(x0);

x0; forward sweep

backward sweep

y�

��

��

��

��

��

��/

retrieve

i

Page 18: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

5

AD: Reverse is more tricky than Tangent

x = f ′∗(x).y = f ′∗1 (x0). . . . f ′∗p−1(xp−2).f ′∗p (xp−1).y

time

yf ′∗p (xp−1).f ′∗p−1(xp−2).. . .x = f ′∗1 (x0).

xp−1 = fp−1(xp−2);xp−2 = fp−2(xp−3);. . .x1 = f1(x0);

x0; forward sweep

backward sweep

y�

��

��

��

��

��

��/

retrieve

i

y�

��

��

��

��

��

��

��

��

��

retrieve

i

Page 19: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

5

AD: Reverse is more tricky than Tangent

x = f ′∗(x).y = f ′∗1 (x0). . . . f ′∗p−1(xp−2).f ′∗p (xp−1).y

time

yf ′∗p (xp−1).f ′∗p−1(xp−2).. . .x = f ′∗1 (x0).

xp−1 = fp−1(xp−2);xp−2 = fp−2(xp−3);. . .x1 = f1(x0);

x0; forward sweep

backward sweep

y�

��

��

��

��

��

��/

retrieve

i

y�

��

��

��

��

��

��

��

��

��

retrieve

i

y

?

retrieve

i

Memory usage (“Tape”) is the bottleneck!

Page 20: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

6

AD: Continued Example

Program fragment:

...v2 = 2 ∗ v1 + 5v4 = v2 + p1 ∗ v3/v2

...

Page 21: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

6

AD: Continued Example

Program fragment:

...v2 = 2 ∗ v1 + 5v4 = v2 + p1 ∗ v3/v2

...

Corresponding transposed Partial Jacobians:

f ′∗(x) = ...

1 2

01

1

1 01 1−p1∗v3

v22

1 p1v2

0

...

Page 22: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

7

AD: Reverse mode on the example

...

v2 = v2 + v4 ∗ (1− p1 ∗ v3/v22)

v3 = v3 + v4 ∗ p1/v2v4 = 0

v1 = v1 + 2 ∗ v2v2 = 0

...

Page 23: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

7

AD: Reverse mode on the example

...

v2 = v2 + v4 ∗ (1− p1 ∗ v3/v22)

v3 = v3 + v4 ∗ p1/v2v4 = 0

v1 = v1 + 2 ∗ v2v2 = 0

...

...

v2 = 2 ∗ v1 + 5

v4 = v2 + p1 ∗ v3/v2...

Page 24: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

7

AD: Reverse mode on the example

...

v2 = v2 + v4 ∗ (1− p1 ∗ v3/v22)

v3 = v3 + v4 ∗ p1/v2v4 = 0

v1 = v1 + 2 ∗ v2v2 = 0

...

...

v2 = 2 ∗ v1 + 5

v4 = v2 + p1 ∗ v3/v2...

Push(v4)

Push(v2)

Pop(v4)

Pop(v2)

Page 25: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

8

AD: The Checkpointing tactic

A Storage/Recomputation tradeoff:

Page 26: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

8

AD: The Checkpointing tactic

A Storage/Recomputation tradeoff:

Tapenade does it on the Call Graph :

Page 27: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

9

Tapenade: Internal Representation

Take profit of well-known techniquesfrom Compilation and Parallelization:

• Use a general abstract Imperative Language (IL)

• Represent programs as Call Graphs of Flow Graphs

• Store symbol declarations in nested Symbol Tables

Page 28: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

10

Page 29: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

11

Tapenade Modes

• normalize

• tangent

• multi-directional tangent

• reverse

Page 30: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

12

Tapenade: Global Static Analyses on Flow Graphs

• forward (resp. backward) dependence wrt independent inputs (resp.

dependent inputs)

• classical IN-OUT analysis (e.g. for snapshots)

• specific for the reverse mode: ”To Be Restored”, Adjoint Dead

Code

• data-dependency analysis to reorder instructions.

• . . . pointer analysis . . .

Usual restrictions: conservative assumptions, arrays . . .

Page 31: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

13

Example: reduced snapshots

Snapshot = IN(checkpoint)⋂

OUT(checkpoint and after)

Page 32: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

14

Tapenade Differentiation model on examples

• Control structures

• Procedure calls and checkpointing

• ”To Be Restored” analysis

• Instructions Reordering

• Dead Adjoint Code

Page 33: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

15

Control structuresoriginal program Tapenade reverse: fwd sweep

SUBROUTINE S1(a, n, x)...DO i=2,n,7IF (a(i).GT.1.0) THENa(i) = LOG(a(i)) + a(i-1)IF (a(i).LT.0.0) a(i)=2*a(i)END IFENDDO

DO i=2,n,7IF (a(i).GT.1.0) THENCALL PUSHREAL4(a(i))a(i) = LOG(a(i))+a(i-1)IF (a(i).LT.0.0) THENCALL PUSHREAL4(a(i))a(i) = 2*a(i)CALL PUSHINTEGER4(3)ELSE ...

Tapenade tangent Tapenade reverse: bwd sweep

SUBROUTINE S1_D(a, ad, n, x)...DO i=2,n,7IF (a(i).GT.1.0) THENad(i)=ad(i)/a(i)+ad(i-1)a(i) = LOG(a(i)) + a(i-1)IF (a(i).LT.0.0) THENad(i) = 2*ad(i)a(i) = 2*a(i)END IFEND IF...

CALL POPINTEGER4(adTo)DO i=adTo,2,-7CALL POPINTEGER4(branch)IF (branch .GE. 2) THENIF (branch .GE. 3) THENCALL POPREAL4(a(i))ab(i) = 2*ab(i)END IFCALL POPREAL4(a(i))ab(i-1) = ab(i-1) + ab(i)ab(i) = ab(i)/a(i)...

Page 34: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

16

Procedure calls and checkpointing

original program Tapenade reverse: fwd sweep

x = x**3CALL SUB(a, x, 1.5, z)x = x*y

CALL PUSHREAL4(x)x = x**3CALL PUSHREAL4(x)CALL SUB(a, x, 1.5, z)x = x*y

Tapenade tangent Tapenade reverse: bwd sweep

xd = 3*x**2*xdx = x**3CALL SUB_D(a, ad, x, xd,

1.5, 0.0, z)xd = y*xdx = x*y

xb = y*xbCALL POPREAL4(x)CALL SUB_B(a, ab, x, xb,

1.5, arg2b, z)CALL POPREAL4(x)xb = 3*x**2*xb

Page 35: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

17

”To Be Restored” analysis

original program reverse mode: reverse mode:naive bwd sweep bwd sweep with TBR

x = x + EXP(a)y = x + a**2a = 3*z

CALL POPREAL4(a)zb = zb + 3*abab = 0.0CALL POPREAL4(y)ab = ab + 2*a*ybxb = xb + ybyb = 0.0CALL POPREAL4(x)ab = ab + EXP(a)*xb

CALL POPREAL4(a)zb = zb + 3*abab = 0.0ab = ab + 2*a*ybxb = xb + ybyb = 0.0ab = ab + EXP(a)*xb

Page 36: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

18

Instructions Reordering

original program reverse mode: Tapenade reverse:backward sweep non-incremental

with TBR backward sweep

x = x + EXP(a)y = x + a**2a = 3*z

CALL POPREAL4(a)zb = zb + 3*abab = 0.0ab = ab + 2*a*ybxb = xb + ybyb = 0.0ab = ab + EXP(a)*xb

CALL POPREAL4(a)zb = zb + 3*abxb = xb + ybab = 2*a*yb+EXP(a)*xbyb = 0.0

Page 37: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

19

Dead Adjoint Code

original program reverse mode: Tapenade reverse:ajd. dead code removed

IF (a.GT.0.0) THENa = LOG(a)

ELSEa = LOG(c)CALL SUB(a)

ENDIFEND

IF (a .GT. 0.0) THENCALL PUSHREAL4(a)a = LOG(a)CALL POPREAL4(a)ab = ab/a

ELSEa = LOG(c)CALL PUSHREAL4(a)CALL SUB(a)CALL POPREAL4(a)CALL SUB_B(a, ab)cb = cb + ab/cab = 0.0

END IF

IF (a .GT. 0.0) THEN

ab = ab/aELSEa = LOG(c)

CALL SUB_B(a, ab)cb = cb + ab/cab = 0.0

END IF

Page 38: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

20

Tapenade: an AD tool on the web

• Servlet on http://www-sop.inria.fr/tropics or batch

• Uploads your Files and Includes

• Displays results and messages with links to source

Page 39: TAPENADE: a tool for Automatic Differentiation of programs · 2009-06-23 · TAPENADE: a tool for Automatic Differentiation of programs Laurent Hasco¨et Laurent.Hascoet@sophia.inria.fr

21

Conclusion and future work

Tapenade now 3 years old.

Several applications on industrial and academic codes:

Aeronautics, Hydrology, Chemistry, Biology, Agronomy...

Future developments:

• In progress: FORTRAN95, and then C (⇒ pointers!)

• User Directives: active I-O, checkpoints, special loops

• Validity domain for derivatives